如何使用busybox精简版本udev程序--mdev动态创建插入的u盘和鼠标等设备

busybox的mdev是一个精简了的udev管理程序,它可以间接的以hotplug方式被内核调用,进而在arm平台上/dev目录下动态创建设备 节点,因为hotplug会被内核发送uevent之前调用,所以如果动态可插拔设备很多,很频繁,那么每次内核都会调用elf格式的用户空间的 hotplug,生成一个独立的hotplug程序来处理,所以hotplug是一个非常笨重的实现方法,但是在我们的arm开发板上,可插拔设备并没有 想象中的频繁
目前还没有必要移植完全版的udev,所以完全可以在不复杂的嵌入式设备上使用mdev来管理动态节点,
方法也很简单,就是在rcS脚本中加入下面一句,将用户空间的应用程序路径传递给内核,
echo /sbin/mdev > /proc/sys/kernel/hotplug
之后kernel会在每次设备出现变动时调用上面一句传递进去的用户空间应用程序/sbin/mdev来处理对应的信息,进而mdev应用程序操作/dev目录下的设备,进行添加或删除,可以参考添加hotplug函数到内核,监控uevent信息 
  mdev的另外一个很有用的地方是,他可以通过proc和sys文件系统来动态整理出注册的设备,进而到/dev/下生成他们对应的节点,
使用该功能之前必须mount上proc和sys文件系统,然后简单的执行下面的一句就弯成了:
  mdev -s

如果需要编译udev,下面是udev的下载地址:http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/udev-145.tar.bz2

1, busybox 添加mdev支持

2, 在/etc/rc.d/rcS中添加

#mount filesystem

/bin/mount -a

#start mdev

#设置系统的hotplug 程序为mdev

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

#扫描并创建节点,这一步可不能少

mdev –s

/etc/fstab的内容如下:

none    /proc   proc    defaults    0       0

none    /tmp    tmpfs defaults 0       0

mdev    /dev    ramfs   defaults 0       0

none    /sys    sysfs   defaults    0       0

none    /dev/pts    devpts    gid=5,mode=620 0 0

执行mdev -s :以‘-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.解决使用mdev时“cannot create /proc/sys/kernel/hotplug :nonexistent directory”错误

确保编译内核时编译如下选项:

CONFIG_PROC_FS=y

CONFIG_PROC_SYSCTL=y

CONFIG_HOTPLUG=y

CONFIG_NET=y

如果CONFIG_HOTPLUG和CONFIG_NET不选或没全选上的话,/proc/sys/kernel下将不会创建 hotplug文件.(参见kernel/sysctl.c)

2.实现内核U盘自动识别:

当U盘热插拔的过程中,会触发/dev/mdev.conf运行(内核配置支持),然后调用etc/hotplug/下的脚本进行相关操作;

/dev/mdev.conf 中编写:  sd[a-z]([0-9]?)  0:0 0660  */etc/mdev/udisk_sh

udisk_sh脚本实现如下:

#!/bin/sh
if [ $ACTION = "add" ]; then
    inset_name=/dev/$MDEV$"1"
    echo $inset_name > /dev/console
    if [ -b $inset_name ]; then
        exit 0
    fi
    echo "usbdisk insert!" > /dev/console  
    mounted=`mount |grep "/dev/$MDEV"`
    # check no duplicate mounting
    echo $mounted
    if [ "$mounted" != "" ];then
        exit 0
    fi
    disk_name="Udisk0"
    for i in `seq 0 4`
    do
        dirname=/mnt/usb/Udisk$i
        if [ ! -d $dirname ];then
            #export $MDEV=$dirname
            mkdir -p $dirname
            mount /dev/$MDEV $dirname
            break
        fi
    done
else
    echo "usbdisk remove!" > /dev/console  
    dirname=`mount |grep "/dev/$MDEV" |awk -F ' ' '{print $3}'`
    echo "Dirname: "$dirname > /dev/console
    umount -f $dirname
    rm -rf $dirname
fi

关于热插拔usb hotplug /proc/sys/kernel mdev udev busybox相关推荐

  1. echo /sbin/mdev > /proc/sys/kernel/hotplug 作用解析

    参见:https://zhidao.baidu.com/question/1606465593857998667.html linux系统对于热插拔事件的产生默认都是调用/sbin/hotplug,该 ...

  2. 解决/proc/sys/kernel/yama/ptrace_scope to 0的问题

    碰到的问题: cnnnot start data collection because the scope of ptrace system call application is limited. ...

  3. gammaray报Error: gdb: Yama security extension is blocking runtime attaching, see /proc/sys/kernel/yam

    gammaray报Error: gdb: Yama security extension is blocking runtime attaching, see /proc/sys/kernel/yam ...

  4. hotplug,automount与mdev的调试

    首先看看/sbin/mdev的帮助 /sbin/mdev --help BusyBox v1.16.1 (2011-08-29 15:29:53 HKT) multi-call binary. Usa ...

  5. /proc/sys目录下各文件参数说明

    一.前言 本文档针对OOP8生产环境,具体优化策略需要根据实际情况进行调整:本文档将在以下几个方面来阐述如何针对RedHat Enterprise Linux进行性能优化. 1)      Linux ...

  6. Android通过cat /sys/kernel/debug/usb/devices获取USB信息

    cat /sys/kernel/debug/usb/devices得到的信息如下 下图是我们产品USB 拓扑图 USB设备通过debugfs导出/sys/kernel/debug/usb/device ...

  7. USB-详解/sys/kernel/debug/usb/devices

    文章目录 1.概述 2.示例 2.1 某项目 2.2 个人开发板 2.3 OHCI.UHCI.EHCI.XHCI 区别联系 3.文件格式 3.1 T:Topology(拓扑结构) 3.2 B:Band ...

  8. /sys/kernel/debug/usb/devices解析

    /sys/kernel/debug/usb/devices解析 https://www.cnblogs.com/hellokitty2/p/9418895.html

  9. 在linux下使用udev获取热插拔(hotplug)事件

    udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等,设备文件通常放在/dev目录下.使用udev后,在/dev目录下就只包含系统中真正存在的设备.udev ...

最新文章

  1. 使用opencv自带的融合函数
  2. kdj超卖_三分钟学会KDJ三大买卖绝技,简单高效,把握最佳买卖点,不懂KDJ的股民值得一看!...
  3. kb-07线段树-12--二分查找区间边界
  4. 新手对于iPhone开发环境等入门问题解答汇总
  5. matlab2012b函数问题,MATLAB版本(2012b 64bit)在尝试调用svmtrain函数时报错
  6. 一文了解sun.misc.Unsafe
  7. linux 查看网站目录权限,解决SELinux对网站目录权限控制的不当的问题
  8. SAP MM模块之批次管理
  9. Python实现简单命令行版《中国象棋》不使用第三方库
  10. (转载) Android RecyclerView 使用完全解析 体验艺术般的控件
  11. 地形地貌编辑软件world mechine介绍
  12. 怎样把计算机网络共享给手机,怎么把电脑网络共享给手机
  13. 20220326 java基础代码题(二)
  14. 免费在线pdf转word
  15. kso经验记录 --- c# 之MD5加密算法
  16. python字符串加双引号是什么意思_python字符串表示什么?
  17. 2021年金属非金属矿山(地下矿山)安全管理人员考试题库及金属非金属矿山(地下矿山)安全管理人员新版试题
  18. 离职之后的五险一金、档案相关手续办理
  19. 引入css样式表的三种方式(全)
  20. php网站模板怎么修改,网站后台模板修改

热门文章

  1. javascript之function1
  2. Javascript--Boolean运算符
  3. python No-ASCII character ,编码错误
  4. windows令牌学习
  5. SQL Union 和 Union All 的区别以及二者的性能问题 - 使用Sqlite演示
  6. GIS地图界面和计算机图形学填充算法
  7. 第一次运行OSG入门程序失败记和搞定的情况
  8. asp.net 访问 access出现 ole_connection.ServerVersion引发了System.InvalidOperationException的解决
  9. 《游戏服务器的架构演进》阅读笔记
  10. 【云计算】使用nsenter进入Docker容器进行调试