嵌入式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目录下的自动挂载。