用户名: 密码: 忘记密码? 注册

深入linux内核架构学习笔记-第7章 模块

作者:  时间: 2010-11-16
7.1-7.2:

1. 可以用nm命令列出模块内使用的函数和全局变量。如:
> nm test.ko
0000003c r __mod_author109
0000000c r __mod_description110
00000000 r __mod_license111
00000074 r __mod_vermagic5
00000068 r __module_depends
00000000 D __this_module
00000000 S bb
00000000 T cleanup_module
00000000 T init_module
         U printk
00000000 t test_exit
00000000 t test_init
00000000 B timer

r:表示符号在“只读”数据区,
D:表示符号在“初始化了的”数据区
S:表示符号在“未初始化”数据区
T:在文本区
U:符号未定义,此符号必须已经编译进内核,否则模块加载或运行不成功
B:在未初始化的数据区,即BSS
Note: 更多定义见:man nm

如果KALLSYMS_ALL开始了,则可以用以下命令显示内核已经存在的符号定义:
> cat /proc/kallsyms |grep "xxx"

2. 模块间可能有依赖关系,其依赖关系存放在下面文件:
> cat /lib/modules/kernel version/modules.dep
/lib/modules/2.6.32/kernel/drivers/video/backlight/backlight.ko:
/lib/modules/2.6.32/kernel/drivers/video/backlight/lcd.ko:
/lib/modules/2.6.32/kernel/drivers/video/backlight/generic_bl.ko: /lib/modules/2.6.32/kernel/drivers/video/backlight/backlight.ko
/lib/modules/2.6.32/kernel/drivers/scsi/scsi_wait_scan.ko:

前面的模块依赖于后面的模块。
模块依赖文件的产生是用depmod命令产生,它产生所有模块以及内核的符号列表,然后分析出依赖关系。

3. modinfo xxx.ko 可以列出模块的一些有用信息
4. 有些模块需要提供更多的信息给内核,如PCI,USB等,这些信息通常用MODULE_ALIAS来提供,这些信息是通过 scripts/mod/file2alias.c脚本来分析产生 .mod.c文件给内核提供信息。