这是一个通过mdev规则实现可移动设备(U盘,SD卡)自动挂载的例子,它的功能和mini2440文件系统中/sbin/hotplug类似,只是用shell脚本实现。这个脚本来自互联网,借此希望给各位一些设备挂载和hotplug的概念,欢迎各位加入讨论这个话题。
要使用automount.sh脚本,你需要
1. 在/etc/mdev.conf的最后加入下面两行。注意,因为mdev在匹配规则时总是用第一个匹配到的规则,因此新加入的规则不会影响原来对于SD卡和U盘的处理,只是增加了对于原来不支持的情况,比如没有分区表或超过一个分区时候的处理
- #automount
- mmcblk[0-9]* 0:0 0600 */sbin/automount.sh $MDEV
- sd[a-z][0-9]* 0:0 0600 */sbin/automount.sh $MDEV
可以看到,当SD卡或U盘插入/拔出时,mdev都会自动调用/sbin/automount.sh脚本。传入脚本的参数是环境变量MDEV的值,根据busybox源代码目录下docs/mdev.txt中的描述,这个环境变量的值是当前发生变化的设备名称,也就是像"mmcblk0"或者"sda2"这样的设备名称。
2. 在/sbin目录下添加automount.sh脚本,内容如下:
- #from http://clc168.blogspot.com/2008/04/arm-embedded-linuxautomount.html
- #! /bin/sh
- if [ "$1" == "" ]; then
- echo "parameter is none" > /tmp/error.txt
- exit 1
- fi
- mounted=`mount | grep $1 | wc -l`
-
- # mounted, assume we umount
- if [ $mounted -ge 1 ]; then
- echo "R/media/$1" >> /tmp/usbmnt.log
- echo "R/media/$1" > /tmp/fifo.1
-
- if ! umount "/media/$1"; then
- exit 1
- fi
-
- if ! rmdir "/media/$1"; then
- exit 1
- fi
- # not mounted, lets mount under /media
- else
- if ! mkdir -p "/media/$1"; then
- exit 1
- fi
-
- if ! mount "/dev/$1" "/media/$1" 2>> /tmp/error.txt ; then
- # failed to mount, clean up mountpoint
- if ! rmdir "/media/$1"; then
- exit 1
- fi
- exit 1
- fi
-
- echo "A/media/$1" >> /tmp/usbmnt.log
- echo "A/media/$1" > /tmp/fifo.1
-
- fi
-
- exit 0
这个脚本非常简单,基本上可以是self explanation的了。
这样,插入不包含分区表或者多于一个分区的U盘或者SD卡后,就可以在/media/目录下找到相应的挂载点.
阅读(668) | 评论(0) | 转发(0) |