一、方法一
由于我調(diào)試的系統(tǒng)是基于LSDK的,所以沒法直接使用openwrt中的hotplug完成此功能。所以使用了以下的方法。
我實現(xiàn)的方法很簡單,主要是周期讀取文件/proc/partitions文件,當(dāng)有u盤插入時,該文件中就會有u盤的信息:“sdb1、sdb2”等, 當(dāng)系統(tǒng)檢測到這些信息時,就執(zhí)行命令mount,將u盤掛載到文件系統(tǒng)中。 可以在應(yīng)用程序中開一個線程來周期讀取文件/proc/partition
我實現(xiàn)的方法很簡單,主要是周期讀取文件/proc/partitions文件,當(dāng)有u盤插入時,該文件中就會有u盤的信息:“sdb1、sdb2”等,
當(dāng)系統(tǒng)檢測到這些信息時,就執(zhí)行命令mount,將u盤掛載到文件系統(tǒng)中。
可以在應(yīng)用程序中開一個線程來周期讀取文件/proc/partitions文件,實習(xí)文件的自動掛載。
這只是簡單的u盤自動掛載,還可以使用hotplug實現(xiàn)U盤的自動掛載。
二、方法二
下面是在網(wǎng)上看到的使用mdev的方法:
在ARM嵌入式Linux下,要讓U盤自動掛載,可以用到mdev方式實現(xiàn)(mdev是busybox中的一個udev管理程序的一個精簡版,它可以實現(xiàn)設(shè)備節(jié)點的自動創(chuàng)建和設(shè)備的自動掛載),下面是實現(xiàn)的步驟:
1、確認Busybox做的根文件系統(tǒng)如下選項有選中:
Linux System Utilities —>
[*] mdev
[*] Support /etc/mdev.conf
[*] Support command execution at device addition/removal
2、由于是利用到Linux內(nèi)核的hotplug功能,要確定CONFIG_HOTPLUG=y。
3、修改根文件系統(tǒng)里面的etc/init.d/rcS文件,添加如下內(nèi)容:
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、添加對熱插拔事件的相應(yīng),支持U盤自動掛載:
修改根文件系統(tǒng)中的etc/mdev.conf文件,內(nèi)容如下:
sd[a-z][0-9] 0:0 666 @/etc/mdev/udisk_insert
sd[a-z] 0:0 666 $/etc/mdev/udisk_remove
注:@表示是在插入(創(chuàng)建設(shè)備結(jié)點)后執(zhí)行后面的腳本,$表示在拔出(刪除設(shè)備結(jié)點)前執(zhí)行后面的 腳本。
5、添加對應(yīng)的腳本文件:
根文件系統(tǒng)中的etc/mdev/udisk_insert文件內(nèi)容:
#!/bin/sh
if [ -d /sys/block/*/$MDEV ] ; then
mkdir -p /media/$MDEV
mount /dev/MDEV/media/MDEV -t vfat -o utf8=1
fi
根文件系統(tǒng)中的etc/mdev/udisk_remove文件內(nèi)容:
#!/bin/sh
umount -l /media/$MDEV
rm -rf /media/$MDEV
至此,就可以實現(xiàn)自動的插拔掛載