linux 内核学习12-符号共享
我们在为一个设备编写驱动程序时,会把驱动按照功能分为好几个内核模块,这些内核模块之间有一些接口函数需要互相调用,这个怎么实现呢?Linux内核为我们提供了两个宏来解决这些问题。
EXPORT_SYMBOL()
EXPORT_SYMBOL_GPL()
EXPORT_SYMBOL() 把函数或者符号对全部内核代码公开,也就是将一个函数以符号的方式导出给内核中的其他模块使用
EXPORT_SYMBOL_GPL()只能包含GPL许可代码,内核核心的大部分模块导出来的都是使用这种形式。
这里需要显示通过模块声明GPL
如MODULE_LICENSE("GPL")
内核符号表可以通过/proc/kallsysms
来查看
$ cat /proc/kallsyms
0000000000000000 r _note_6 [pata_acpi]
0000000000000000 d __this_module [pata_acpi]
0000000000000000 t cleanup_module [pata_acpi]
0000000000000000 r __mod_pci__pacpi_pci_tbl_device_table [pata_acpi]
第一列 | 第二列 | 第三列 | 第四列 |
---|---|---|---|
显示该符号在内核地址空间的地址 | 符属性号 | 符号字符串就是EXPORT_SYMBOL()导出的符号 | 在那些内核模块使用这些符号 |