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 moduleDanke
-
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.