内核符号导出,内核模块版本不匹配时
/proc/kallsyms 记录了内核中所有导出的符号的名字与地址.
导出内核符号的意义
此例中有2个内核模块 calculate.c 和 hello.c
hello.c
#include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("GPL"); extern int add_integar(int a, int b); extern int sub_integar(int a, int b); static int __init hello_init() { int res = add_integar(1,2); //用到add_integar()函数 return 0; } static int __exit hello_exit() { int res = sub_integar(2,1); //用到sub_integar()函数,这两个函数在calculate.c内核模块中 } module_init( hello_init); module_exit( hello_exit);
calculate.c
#include <linux/module.h> #include <linux/init.h> MODULE_LICENSE("GPL"); int add_integar(int a, int b) { return a+b; } int sub_integar(int a, int b) { return a-b; } static int __init sym_init() { return 0; } static int __exit sym_exit() { } module_init( sym_init); module_exit( sym_exit); EXPORT_SYMBOL(add_integar); //EXPORT_SYMBOL()导出add_integar函数和sub_integar EXPORT_SYMBOL(sub_integar);
EXPORT_SYMBOL(符号名)
用于导出内核符号使用