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);
上一篇下一篇

猜你喜欢

热点阅读