🚀返回专栏总目录
文章目录
- 一、为啥需要导出符号
- 二、符号表
- 三、内核模块符号导出
- 四、案例
沉淀、分享、成长,让自己和他人都能有所收获!😄
📢这里的符号主要指的是全局变量和函数。
一、为啥需要导出符号
Linux 内核采用的是以模块化形式管理内核代码。内核中的每个模块相互之间是相互独立的,也就是说A模块的全局变量和函数,B模块是无法访问的。
有些时候,我们写一些模块代码的时候,发现部分函数功能别人已经实现了,此时我们就想如果我们可以调用他们已经实现好的函数接口就好了。那如何才能做到这点呢? 符号导出了,也就是说你可以把你实现的函数接口和全局变量导出,以供其他模块使用。
在Linux 内核的世界里,如果一个模块已经以静态的方式编译进的内核,那么它导出的符号就会出现在全局的内核符号表中。在Ubuntu 18.04系统中,Linux 内核的全局符号表在Module.symvers文件中存放。
二、符号表
该文件是一个符号表,包含了内核的所有全局变量和函数在内存中的地址。
这是一个帮助内核开发者调试内核而加入的文件,在 Linux 系统崩溃时产生的 Opps 信息中,函数调用堆栈中显示出来的函数名,就是在这个文件