Syscalls in LKM's



  • Wie kann ich in einem LKM syscalls aus führen ?
    Ich habe folgendes LKM.

    #include <linux/module.h>	/* Needed by all modules */
    #include <linux/kernel.h>	/* Needed for KERN_INFO */
    #include <linux/init.h>		/* Needed for the macros */
    #include <linux/syscalls.h>
    
    static int __init hello_2_init(void)
    {
    	printk(KERN_INFO "Hello, world 2\n");
    	sys_mkdir("mydir",0777);
    	return 0;
    }
    
    static void __exit hello_2_exit(void)
    {
    	printk(KERN_INFO "Goodbye, world 2\n");
    }
    
    module_init(hello_2_init);
    module_exit(hello_2_exit);
    

    $ cat /usr/include/linux/syscalls.h |grep sys_mkdir
    asmlinkage long sys_mkdir(const char __user *pathname, int mode);

    Makefile:

    obj-m += lkm.o 
    
    all:
    	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    clean:
    	make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    

    Ich bekomme aber:

    WARNING: "sys_mkdir" [/home/me/Desktop/lkm/lkm.ko] undefined!

    insmod lkm.ko
    insmod: error inserting 'lkm.ko': -1 Unknown symbol in module

    Danke



  • System-Calls sollten in Linux-Kernel-Modulen vermieden werden. Normalerweise ist es auch einfach nicht nötig.
    Deswegen exportieren neuere Kernel diese Funktionen nichtmehr.

    Vielleicht schreibst du mal, wofür du das brauchst.


Anmelden zum Antworten