不能在U盘目录下拔掉U盘的一种解决方法

来源:互联网 发布:js 开关标记 编辑:程序博客网 时间:2024/06/10 16:52

首先摆出参考文档出处:http://www.360doc.com/content/12/1122/17/6828497_249574471.shtml

节取如下部分,线内为我复制过来的:

/***************************************************************************************************************************************************************************************/在ARM嵌入式Linux下,要让U盘自动挂载,可以用到mdev方式实现(mdev是busybox中的一个udev管理程序的一个精简版,它可以实现设备节点的自动创建和设备的自动挂载),下面是实现的步骤:

     1、确认Busybox做的根文件系统如下选项有选中:
        Linux System Utilities  --->   

             [*] mdev      
             [*]   Support /etc/mdev.conf
             [*]     Support command execution at device addition/removal

        2、由于是利用到Linux内核的hotplug功能,要确定CONFIG_HOTPLUG=y。
        3、修改根文件系统里面的etc/init.d/rcS文件,添加如下内容:
              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
        echo "***************Starting mdev.........[OK]"
     4、添加对热插拔事件的相应,支持U盘自动挂载:
        修改根文件系统中的etc/mdev.conf文件,内容如下:
        sd[a-z][0-9]      0:0 666        @/etc/mdev/udisk_insert                        
        sd[a-z]           0:0 666        $/etc/mdev/udisk_remove
        注:@表示是在插入(创建设备结点)后执行后面的脚本,$表示在拔出(删除设备结点)前执行后面的             脚本。
     5、添加对应的脚本文件:
        根文件系统中的etc/mdev/udisk_insert文件内容:
        #!/bin/sh
        if [ -d /sys/block/*/$MDEV ] ; then
         mkdir -p /media/$MDEV
         mount /dev/$MDEV /media/$MDEV -t vfat -o utf8=1
        fi
        根文件系统中的etc/mdev/udisk_remove文件内容:
        #!/bin/sh
        umount -l /media/$MDEV
        rm -rf /media/$MDEV

/***************************************************************************************************************************************************************************************/

首先,我测试的结果是这个卸载过程有问题,经过验证:

在插入和拔出时的脚本中,MEDV值是不一样的,如插入U盘(sda设备时),udisk_insert脚本内的MDEV为sda1,然在udisk_remove脚本内的MDEV值为sda.所以要字符转化下。

 

关于拔掉U盘自动删除相应目录,也可以成功,但不能在sda*目录,也就是不能在U盘目录被占用时(打开),拔掉U盘。

这时容易出错(原因是U盘正在使用中),这样的结果是下次插入U盘时,又创建了新的sda*目录。这样显示得解决

于是,查找了很多资料(由于我是用了双USB口),后来也只是用了一种方法:

即:找到与U盘相关的所有进程,将其全部杀死!

 

后来,整理成如下:希望可以与别人交流共享(加载格式等未变化,主要是修改了udisk_remove)

cat mdev/udisk_remove


#!/bin/sh

        YANG="${MDEV:0:3}1"                                                           //为了实现两个脚本中MDEV值不一样
                 CHAO=`fuser -m /mnt/udisk/$YANG`                         //获取与要拔出的设备所有相关的进程号
                 kill -9 `fuser -m /mnt/udisk/$YANG`                            //将与其相关的全部进程删除
                 echo "KILL $CHAO "   >  /dev/ttyS0                              //调试输出
        /bin/umount       /mnt/udisk/$YANG  || true                          //然后再卸载

        /bin/rmdir        /mnt/udisk/$YANG                                         //删除相应文件夹
        str3=`pwd`                                                                               //调试用

echo $str3          > /dev/ttyS0                                                         //调试输出
echo "usb removde $str2  $YANG   $MDEV  $ACTION"    > /dev/ttyS0           //调试输出

 

 

 

 

 

原创粉丝点击