自动加载驱动模块

假设你的设备驱动程序为:yourdrivername.ko 

1 cp yourdrivername.ko /lib/modules/"version"/kernel/drivers/misc 

其中,version为linux的版本,默认为:2.6.23.1-42.fc8 

2 编辑/lib/modules/"version"/modules.dep,设置驱动程序之间的关联,增加一行: 

/lib/modules/"version"/kernel/drivers/misc/yourdrivername.ko: 

如果有关联,在:后面标注关联的驱动程序名称 

3 编辑/etc/rc.d/rc.local,增加一行 

/sbin/modprobe yourdrivername
### 驱动模块自动加载机制 Linux 内核支持驱动模块自动加载机制,这一机制基于设备树(Device Tree)和模块信息的结合。当系统检测到某个设备存在时,内核会根据设备树中定义的 `compatible` 属性,查找匹配的驱动模块,并尝试自动加载模块。这一过程不需要用户手动执行 `modprobe` 命令。 自动加载依赖于模块的设备 ID 表,该表通过 `MODULE_DEVICE_TABLE` 宏声明,并被注入到模块的 ELF 段中。用户空间工具(如 `modprobe`)可以读取这些信息,并根据设备匹配规则自动加载相应的驱动模块[^2]。 ### modprobe 的作用与手动加载 尽管内核支持自动加载机制,但在某些情况下,用户仍需要手动运行 `modprobe` 来加载驱动模块。例如,当系统启动时未检测到设备,但设备在运行时被插入(如 USB 设备),或者需要在特定时刻加载某个驱动模块以进行测试或调试时,就需要使用 `modprobe` 命令显式加载模块。 此外,`modprobe` 会自动处理模块之间的依赖关系,确保所有依赖的模块都被正确加载,而 `insmod` 则需要手动处理这些依赖[^1]。 ### 自动加载与手动加载的协同 在实际使用中,自动加载和手动加载是互补的。自动加载机制适用于大多数标准设备,尤其是那些在系统启动时就已经存在的设备。而手动加载则适用于调试、热插拔设备或特定场景下的模块加载需求。 为了确保模块能够被 `modprobe` 正确加载,必须将模块文件(`.ko`)放置在 `/lib/modules/$(uname -r)/` 目录下,并运行 `depmod` 更新模块依赖信息。这样,`modprobe` 才能正确识别模块及其依赖关系[^4]。 ### 示例代码 以下是一个使用 `MODULE_DEVICE_TABLE` 的驱动程序示例: ```c #include <linux/module.h> #include <linux/of.h> #include <linux/platform_device.h> static const struct of_device_id my_device_of_match[] = { { .compatible = "myvendor,mydevice" }, { /* end of list */ } }; MODULE_DEVICE_TABLE(of, my_device_of_match); static int my_device_probe(struct platform_device *pdev) { // Probe logic here return 0; } static int my_device_remove(struct platform_device *pdev) { // Remove logic here return 0; } static struct platform_driver my_device_driver = { .probe = my_device_probe, .remove = my_device_remove, .driver = { .name = "my_device", .of_match_table = my_device_of_match, }, }; module_platform_driver(my_device_driver); MODULE_LICENSE("GPL"); ``` 在上述代码中,`MODULE_DEVICE_TABLE(of, my_device_of_match)` 声明了该模块支持的设备 ID 表,并将其注册到内核中。这样,当设备树中存在 `compatible = "myvendor,mydevice"` 的节点时,内核将自动加载驱动模块[^2]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值