udev 自動掛載U盤檔案系統指定目錄

vc66vcc發表於2016-10-24

嵌入式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目錄下的自動掛載。
















相關文章