mdev自动加载u盘和sd卡

来源:互联网 发布:天猫mac客户端下载 编辑:程序博客网 时间:2024/05/07 19:47
1 用busybox制作根文件系统的时候,要选择支持mdev机制

    Linux System Utilities  --->   
               [*] mdev      
               [*]   Support /etc/mdev.conf
               [*]     Support command execution at device addition/removal

2 内核配置时要支持hotplug

3 在/etc/init.d/rcS中加入以下语句

    mount -t usbfs none /proc/bus/usb/
    mount -t tmpfs mdev /dev
    mount -t sysfs sysfs /sys
    mkdir /dev/pts
    mount -t devpts devpts /dev/pts
    #mdev for /dev
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s

  这些语句的添加在busybox的/doc/mdev.txt中可以找到
 
       执行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 下创建设备节点文件。

4 在/etc/mdev.conf文件中加入以下内容:
  sd[a-z][0-9]      0:0 666        @/etc/mdev/insert_usb.sh
  sd[a-z]             0:0 666        $/etc/mdev/remove_usb.sh

  mmcblk[0-9]      0:0 666        @/etc/mdev/insert_sd.sh
  mmcblk[0-9]       0:0 666        $/etc/mdev/remove_sd.sh
 
  @表示是在插入(创建设备结点)后执行后面的脚本,$表示在拔出(删除设备结点)前执行后面的脚本。

5 在/etc下建立/medv/insert_usb.sh 和/mdev/remove_usb.sh文件

 insert_usb.sh:

  if [ -d /sys/block/*/$MDEV ]  ; then
          mkdir -p /mnt/usb/
          mount -t vfat /dev/$MDEV /mnt/usb/

  fi
 remove_usb.sh:

  umount -l /mnt/usb/
  rm -rf /mnt/usb
  echo "remove your usbdisk safely!"


 并修改文件可执行权限
 chmod +x insert_usb.sh
 chmod +x remove_usb.sh

6 在/etc下建立/medv/insert_sd.sh 和/mdev/remove_sd.sh文件

 insert_sd.sh:

  mkdir -p /mnt/sd/
  mount -t vfat /dev/mmcblk0 /mnt/sd/

 remove_sd.sh:
  sync
  umount -l /mnt/sd/
  rm -rf /mnt/sd
  echo "remove your sd safely!"


 并修改文件可执行权限
 chmod +x insert_sd.sh
 chmod +x remove_sd.sh

7 插入U盘  在目录/mnt/usb下即可看见U盘内容
  插入SD卡 在目录/mnt/sd下即可看见SD卡内容

8 试验测试在卸载SD卡时会发生错误,其他情况均正常使用
  卸载SD卡后目录/mnt/sd仍存在 说明remove_sd.sh没有被执行

  说明,卸载时没有触发条件 

这个问题还没解决,希望看到的童鞋给个指点,谢谢了先

0 0