有关busybox设备节点的bug解决方法

在玩我板子是发现,编写驱动自动创建设备节点的函数后,mdev竟然会自动产生"字符设备"的节点!因为我移植的驱动是块设备驱动,所以肯定mdev机制出现问题,文件系统我用的是busybox 1.16.2。寻找解决方法找到竟然是busybox自身的bug导致....尼玛坑爹不,不过也正常,毕竟是开源工具,又不付费~~免费用人家东西,出点问题正常  ...
       其实问题出在busybox 1.16.2 的源码文件 util-linux/mdev.c中的make_device()函数(不同版本的busybox源码稍微有所不同,不过问题肯定在make_device()函数中):
         type = S_IFCHR; 
         if (strstr(path, "/block/"))
         
type = S_IFBLK;
   
   改为:
         type = S_IFCHR;

         f (strstr(path, "block"))

         type = S_IFBLK;然后重新make(记得修改Makefile中的ARCH等~),以及make CONFIG_PREFIX=/path/from/root install。

strstr 函数是在第一个变量中查找第二个变量字符串找到了就返回真,否则返回假;在没改之前:打印make_device 函数中的path , type, S_IFBLK变量如下:
对于字符设备:以.device/mtd1 为例:
打印出的信息:
path = /sys/devices/virtual/mtd/mtd1
 
type = 8192, S_IFBLK = 24576
 
肯定type  S_IFBLK是不相等的。毫无疑问,因为他是字符设备,但是对于块设备,代码的意图应该是如果在path中找到block的字眼(而不是/block/字眼),就认为它是块设备,重新使type = S_IFBLK, 块设备的这两个值是相等的。

而对于/device/mtdblk:
打印出来居然是这样的:
path = /sys/devices/virtual/mtd/mtd3/mtdblock3
type = 8192, S_IFBLK = 24576
很显然type  S_IFBLK 不等,显然是上述bug造成的,除非你的块设备文件名里含有/mtdblock/ 它才认为你是块设备。

还有一种解决法案:
每次加载模块后,执行mdec -s.
其实在/etc/init.d/rc.S(用Busybox制作的自启动文件) 中最后有句就是mdev -s,只不过是内核刚启动后对其自身生成的设备节点进行了mdev -s,这方面可看下busybox解压后的使用说明书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值