Linux内核符号表导出
2022-11-01 本文已影响0人
二进制人类
解决驱动的依赖问题:如果当前驱动中需要使用到其它驱动中所定义的函数或者变量,则需要将被依赖驱动中的函数和变量进行符号导出,在当前驱动中可以去访问导出的符号。
EXPORT_SYMBOL(符号); # 符号可以是函数,和变量名称;
EXPORT_SYMBOL_GPL(符号);
注意:
在使用的时候,按照依赖顺序加载驱动程序,卸载的时候按照逆序卸载。
模块一
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
/* 符号导出:导出的符号可以在其它模块中去引用 */
void test_func(void)
{
printk(KERN_INFO "my test func\n");
}
MODULE_LICENSE("GPL");
EXPORT_SYMBOL(test_func);
EXPORT_SYMBOL_GPL(kprobe_decode_arm_table)
模块二
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
extern void test_func(void);
/* 定义模块加载函数 */
static int __init my_module_init(void)
{
/* 输出:KERN_INFO(正常运行输出) */
printk(KERN_INFO "my module init\n");
test_func();
return 0;
}
/* 定义模块卸载函数 */
static void __exit my_module_exit(void)
{
printk(KERN_INFO "my module exit\n");
}
/* 声明模块的加载入口 */
module_init(my_module_init);
/* 声明模块的卸载入口 */
module_exit(my_module_exit);