1.导出符号表设计的初衷
在内核中有的模块都是运行在同一个3-4G的内核空间的,模块和模块间就可以进行函数的直接调用,在调用前只需要将被调用函数的符号表导出即可。
在demoA模块中有一个add函数,在demoB模块中想调用demoA模块中的add函数,此时只需要让demoB模块拿到demoA模块中add函数的地址即可。这个过程就使用导出符号表完成
2.导出符号表的API
EXPORT_SYMBOL_GPL(name) 功能:进行符号表的导出 参数: @name:函数名或变量名
vi Module.symvers(看到导出的信息)
0x72f36e8 add /home/linux/DC51/day2/export/demoA/demoA EXPORT_SYMBOL_GPL
编译:
先编译demoA模块,拿到Module.symvers符号表文件,将这个Module.symvers文件拷贝到demoB目录下,然后再编译demoB模块。(否则会提示这个函数没有定义)
安装:
先安装demoA.ko模块,在安装demoB.ko模块
卸载:
先卸载demoB.ko模块,再卸载demoA.ko模块
意义:
①可以解决代码冗余的问题
②内核实现好的一些函数,驱动工程师可以直接调用,而不需要自己实现