這是一個通過mdev規(guī)則實現(xiàn)可移動設(shè)備(U盤,SD卡)自動掛載的例子,它的功能和mini2440文件系統(tǒng)中/sbin/hotplug類似,只是用shell腳本實現(xiàn)。這個腳本來自互聯(lián)網(wǎng),借此希望給各位一些設(shè)備掛載和hotplug的概念,歡迎各位加入討論這個話題。 要使用automount.sh腳本,你需要 1. 在/etc/mdev.conf的最后加入下面兩行。注意,因為mdev在匹配規(guī)則時總是用第一個匹配到的規(guī)則,因此新加入的規(guī)則不會影響原來對于SD卡和U盤的處理,只是增加了對于原來不支持的情況,比如沒有分區(qū)表或超過一個分區(qū)時候的處理
- #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都會自動調(diào)用/sbin/automount.sh腳本。傳入腳本的參數(shù)是環(huán)境變量MDEV的值,根據(jù)busybox源代碼目錄下docs/mdev.txt中的描述,這個環(huán)境變量的值是當前發(fā)生變化的設(shè)備名稱,也就是像"mmcblk0"或者"sda2"這樣的設(shè)備名稱。
2. 在/sbin目錄下添加automount.sh腳本,內(nèi)容如下:
- #from http://clc168./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的了。
這樣,插入不包含分區(qū)表或者多于一個分區(qū)的U盤或者SD卡后,就可以在/media/目錄下找到相應(yīng)的掛載點.
|