1. 程式人生 > >Linux下實現U盤、SD卡自動掛載功能 .

Linux下實現U盤、SD卡自動掛載功能 .

在 Linux中我們經常用到U盤、SD卡的掛載問題,每次都手動掛載或解除安裝非常麻煩,我們可以採取以下方法實現自動掛載或解除安裝U盤、SD卡

1、首先在/etc/init.d/rsC中加入以下語句

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

2、在/etc/下簡歷medv.conf的檔案,包含以下內容

sd[a-z][0-9]      0:0 666        @(/etc/hotplug/insert.sh $MDEV $SUBSYSTEM)
sd[a-z]           0:0 666        $(/etc/hotplug/remove.sh $MDEV $SUBSYSTEM)
ub[a-z][0-9]      0:0 666        @(/etc/hotplug/insert.sh $MDEV $SUBSYSTEM)
ub[a-z]           0:0 666        $(/etc/hotplug/remove.sh $MDEV $SUBSYSTEM)
mmcblk[0-9]p[0-9] 0:0 666        @(/etc/hotplug/insert.sh $MDEV $SUBSYSTEM)
mmcblk[0-9]       0:0 666        $(/etc/hotplug/remove.sh $MDEV $SUBSYSTEM)


3、在/etc/下建立以下資料夾hotplug,並在hotplug目錄下建立以下檔案,包含以下內容

insert.sh:

if [ -n "$1" ] ; then
    if [ -b /dev/$1 ]; then

        if [ ! -d /media ]; then
            mkdir -p /media
        fi

        if [ ! -d /media/$1 ]; then
            mkdir -p /media/$1
        fi
             mount /dev/$1 /media/$1
if [ $? -ne 0 ]; then
    rm -rf /media/$1

        fi

    fi
fi

remove.sh:

MOUNTS=$(mount | grep $1 | cut -d' ' -f3)
umount $MOUNTS
rm -rf $MOUNTS

插入U盤、SD等裝置,即可在根目錄的/media目錄下建立相應的資料夾,掛載對用的磁碟檔案

 ////////////////////////////另外一篇相關文章/////////////////////////////////////////////////

 mdev是busybox自帶的一個簡化版的udev

    作用是在系統啟動和熱插拔 或動態載入驅動程式時,自動產生驅動程式所需的節點檔案,在檔案系統中的/dev目錄下的裝置節點都是由mdev建立的。
    mdev掃描/sys/class和/sys/block中所有的類裝置目錄,如果在目錄中含有名為"dev"的檔案,且檔案中包含的是裝置號,則mdev就利用這些資訊為這個裝置在/dev下建立裝置節點

u盤自動掛載功能實現步驟如下:
1、配置核心
a)配置核心支援熱插拔:
#cd linux.2.6.21
#vi .config
CONFIG_KALLSYMS=y
CONFIG_HOTPLUG=y  //確保此項為y
CONFIG_PRINTK=y 
CONFIG_NET=y  //確保此項為y
確保以上兩項均設定為y,否則/proc/sys/kernel/目錄下不會出現huotplug檔案。
b)配置核心支援
#make menuconfig
選擇Device Drivers -->
             USB support -->
                   <*> Support for Host-side USB
                   <*> OHIC HCD support
                   <*> UHCI HCD (most Intel and VIA) support
                   <*> SL811HS HCD support
                   <*> USB Mass Storage support
 
2、配置busybox
#make menuconfig
選擇Linux System Utilities --->
             [*]mdev
             [*]     Support /etc/mdev.conf
             [*]          Support subdirs/symlinks
             [*]               Support regular expressions substitutions when renaming device
             [*]          Support command execution at device addition/removal
             [*]     Support loading of firmwares
3、新增對熱插拔事件響應,實現u盤自動掛載與解除安裝

用法:
1. 執行mdev前要掛載 /sys
mount -t tmpfs mdev /dev
mount -t sysfs sysfs /sys

2.命令核心在增刪裝置時執行/sbin/mdev,使裝置節點會被建立和刪除
echo /sbin/mdev > /proc/sys/kernel/hotplug

3.設定mdev,讓它在系統啟動時建立所有的裝置節點
mdev -s

關於熱插拔:
需要核心中支援hotplug

編寫mdev配置檔案:/etc/mdev.conf
該檔案的作用是:mdev在找到匹配裝置時自動執行自定義命令
格式為:
<device regex> <uid>:<gid> <octal permissions> [<@$*><cmd>]
@ 建立節點後執行的
$ 刪除節點前執行的
* 建立後和刪除前都執行的

如自動掛載U盤和SD卡指令碼:
sd[a-z][0-9]      0:0 0660 @/etc/hotplug/usb/udisk_insert
sd[a-z]              0:0 0660 $/etc/hotplug/usb/udisk_remove
mmcblk[0-9]p[0-9]   0:0 0660 @/etc/hotplug/sd/sd_insert
mmcblk[0-9]             0:0 0660 $/etc/hotplug/sd/sd_remove

當檢測到類似sda1這樣的裝置時,執行/etc/hotplug/usb/裡的指令碼,指令碼的內容就是掛載和解除安裝U盤。

udisk_insert

#!/bin/sh
if[ -p /sys/block/*/$MDEV]; then
        if[ ! -f $MDEV ];then
        mkdir -p /mnt/usb
        mount /dev/$MDEV /mnt/usb
if[ -f /mnt/usb ];then
        echo "mount usbdisk successfully!"
fi
fi

udisk_remove
#!/bin/sh
sync
umount -l /mnt/usb
rm -rf /mnt/usb
echo "remove your usbdisk safely!"

////////////////////////////////////////////////////////////

#mdev.conf sd[a-z]      0:0 0660        @/etc/mdev/udisk_insert                         sd[a-z]      0:0 0660        $/etc/mdev/udisk_remove                         sdb[0-9]  0:6  660 hda[0-9]  0:6  660

Udisk自動掛載指令碼和解除安裝腳分別為:
#!/bin/sh

echo "this is $MDEV"
if [ -d /sys/block/$MDEV ] ; then
echo mount udisk to /mnt/udisk
mkdir -p /mnt/udisk
mount /dev/$MDEV /mnt/udisk -t vfat -o utf8=1
if [ -f /mnt/udisk ];then
echo "mount udisk successfully"
fi
fi

#!/bin/sh

echo remove udisk
umount -t /mnt/udisk
rm -rf /mnt/udisk
echo "remove your udisk safely!"
////////////////////////////////////////////////

1.在使用busybox製作根檔案系統的時候,選擇支援mdev

Linux System Utilities  --->  
           [*] mdev     
           [*]   Support /etc/mdev.conf
           [*]     Support command execution at device addition/removal
2.在檔案系統新增如下內容 Vim /etc/init.d/rcS
        mount -t tmpfs mdev /dev
        mount -t sysfs sysfs /sys
        mkdir /dev/pts
        mount -t devpts devpts /dev/pts
echo /sbin/mdev>/proc/sys/kernel/hotplug
        mdev –s
這些語句的新增在mdev的手冊中可以找到。 3.新增對熱插拔事件的響應,實現U盤和SD卡的自動掛載。 Vim /etc/mdev.conf
        mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
        mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
        sd[a-z] [0-9] 0:0 666 @ /etc/usb/usb_inserting
        sd[a-z] 0:0 666 $ /etc/usb/usb_removing
紅色部分,是一個指令碼,指令碼內容可以根據我們的需要定製,可以實現掛載,解除安裝或其他一些功能。 如下是自動掛載和解除安裝的指令碼: /etc/sd_card_inserting
        #!/bin/sh
        mount -t vfat /dev/mmcblk0p1 /mnt/sd
/etc/sd_card_removing
        #!/bin/sh
        sync
        umount /mnt/sd