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