谁能告诉,如何将设备驱动程序加载到 linux 内核中?表示函数调用流程。谁调用了什么?等,用于静态和 pnp 驱动程序。有一些例子会很棒,比如插入 USB 笔式驱动器之类的东西。谢谢
问问题
1198 次
1 回答
2
- 首先,要加载到内核中,驱动程序必须被编译为模块。
- 编译后的模块将具有.ko扩展名。
- 模块的通常位置在/lib/modules目录中。
- 您可以使用命令lsmod获得所有插入模块的列表。
- 当系统或用户插入模块时加载模块(命令insmod或modprobe)
module_init()函数指定插入模块时要调用的函数:
static int __init hello_init(void) { printk(KERN_ALERT "Hello world!\n"); return 0; } module_init(hello_init);
同理,函数module_exit()指定了模块卸载时要执行的函数
- 该函数被定义为静态的,因为它不应该在文件之外可见
__init标记告诉内核在模块加载后可以删除该函数
内核函数sys_init_module():
- 分配(通过vmalloc())内存来保存模块;
- 将模块复制到该内存区域;
- 通过内核符号表解析模块中的内核引用(类似于链接器ld)
- 调用模块的初始化函数。
于 2013-07-10T07:00:43.920 回答