全部博文(215)
分类: LINUX
2013-08-07 16:33:31
LKM(Loadable Kernel Module)可以调用的内核函数及变量都列在/usr/src/linux-headers-xxxxxxxxx/Module.symvers里。有 些资料说是在/proc/kallsyms里,这是不对的。kallsyms里列出的是内核中的各种符号,但并不是所有的符号都可以被LKM调用。如果使 用了不可用的符号,insmod的时候会报错:Unknown symbol in module
如果想调用Module.symvers以外的内核函数,必须修改内核。找到该函数,在函数结束的“}”后加上一行:
EXPORT_SYMBOL(funcname); |
在LKM的源文件中,用extern声明一下该函数。如果这个函数是系统调用,在extern后面还要加上asmlinkage,否则参数不会正确传递。
来源:http://blog.sunner.cn/more-kernel-functions-called-by-lkm/