解决开发板中加载驱动后,不能在/dev下自动创建设备节点问题

在制作linux根文件系统时,会创建/etc/init.d/rcS文件,如下:

#!/bin/sh

echo "----------myrootfs start-------------------"

/bin/mount -a
/sbin/dev -s 

echo "----------myrootfs end-------------------"

每次开机,都会执行上面脚本文件,其中/bin/mount -a为挂载fstab中的文件系统,/sbin/dev -s 为创建设备节点

但是,如果要insmod一个驱动时,驱动加载成功,但是并没有在/dev下创建设备节点,原因是:/sbin/dev -s 只是系统启动时执行一次,之后再加载驱动,/sbin/mdev并不会再执行,所以没有在/dev下创建设备节点。

解决方法:

讲/etc/init.d/rcS文件中的/sbin/dev -s  改为:

 echo /sbin/mdev > /proc/sys/kernel/hotplug

重启开发板即可解决问题。

而其原理是:

mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用场合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或者动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。以‘-s’为参数调用位于/sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。

启动时运行命令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。

 

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值