udev 自動掛載U盤檔案系統指定目錄
阿新 • • 發佈:2018-12-31
嵌入式linux檔案系統中自動掛載U盤內的檔案系統
在海思嵌入式linux檔案系統中存在udev目錄及下屬檔案
/etc/udev # pwd
/etc/udev
/etc/udev # ls
disk-hotplug.sh rules.d usbdev-hotplug.sh
firmware.sh udev.conf
在rules.d 資料夾下有udev載入的規則檔案,其中11-usb-hotplug.rules 為U盤掛在檔案系統的規則檔案
/etc/udev/rules.d # pwd /etc/udev/rules.d /etc/udev/rules.d # ls 11-usb-hotplug.rules 50-firmware.rules 54-gphoto.rules 60-pcmcia.rules 75-cd-aliases-generator.rules.optional 75-persistent-net-generator.rules.optional 90-hal.rules 97-bluetooth-serial.rules 99-fuse.rules device-mapper.rules /etc/udev/rules.d #
檢視11-usb-hotplug.rules 中配置指令碼
#
# Create By Czy
#
KERNEL=="sd*", SUBSYSTEM=="block", RUN+="/etc/udev/disk-hotplug.sh"
KERNEL=="usbdev*", SUBSYSTEM=="usb_device", RUN+="/etc/udev/usbdev-hotplug.sh"
~
在我的系統中核心將U盤列舉為sda裝置,所以需要修改相應的udev/disk-hotplug.sh檔案
掛在檔案系統時,設想為如果有/dev/sda?的裝置插入,就預設掛載到/tmp/sda?相應目錄下:
U盤掛載修改內容:
1.vi udev/disk-hotplug.sh修改add_disk ()指令碼函式
ORG_NAME = /dev/sd[a-z] 或者 /dev/sda[a-z][0-9] 需要過濾sd[a-z]型別及/dev/字串字首 執行mount動作
如果/tmp/sd[a-z][0-9]目錄不存在需要,需要建立此掛載目錄
################################################################################ # new_name orgin_name add_disk () { local NEW_NAME=$1 local ORG_NAME=$2 if [ -e ${ORG_NAME} ]; then cd /dev/; ln -sf ${ORG_NAME} ${NEW_NAME}; cd - if echo ${ORG_NAME} | grep sd[a-z][0-9];then if [ ! -d /tmp/${ORG_NAME##*/} ];then mkdir -p /tmp/${ORG_NAME##*/} fi mount -t vfat ${ORG_NAME} /tmp/${ORG_NAME##*/} fi echo "${NEW_NAME} -> ${ORG_NAME}" > ${CONSOLE} fi } ################################################################################
U盤檔案系統解除安裝
1.修改hotplug_usb ()函式中removecase 新增"${DEVNAME}" 引數以方便解除安裝掛載目錄
case "${ACTION}" in
"add" )
add_disk "${NEW_NAME}" "${DEVNAME}"
;;
"remove" )
remove_disk "${NEW_NAME}" "${DEVNAME}"
;;
* )
echo "ACTION:${ACTION}" > ${CONSOLE}
2.修改remov_disk指令碼函式新增解除安裝動作程式碼
################################################################################
# new_name
remove_disk ()
{
local NEW_NAME=$1
local ORG_NAME=$2
if [ -L /dev/${NEW_NAME} ]; then
if echo ${ORG_NAME} | grep sd[a-z][0-9];then
if [ -d /tmp/${ORG_NAME##*/} ];then
umount /tmp/${ORG_NAME##*/}
rm /tmp/${ORG_NAME##*/} -rf
fi
fi
echo ${ORG_NAME} > ${CONSOLE}
rm -f /dev/${NEW_NAME}
fi
}
################################################################################
完成U盤檔案系統的在/tmp目錄下的自動掛載。