udev 自动挂载U盘文件系统指定目录

2019-07-13 03:34发布

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