1、捕捉U盘事件
进入/etc/udev/rules.d
目录下,创建一个usb自动挂载的规则文件10-usb.rules
写入以下内容
vim 10-usb.rules
###########---USB---################
#----------------------------------#
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb_udev.sh usb %k"
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb_udev.sh usb %k", OPTIONS="last_rule"
##########---CF card---#############
#----------------------------------#
KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb_udev.sh cf %k"
KERNEL=="hd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb_udev.sh cf %k", OPTIONS="last_rule"
###########---SSD---################
#----------------------------------#
KERNEL=="sata[a-z]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb_udev.sh ssd %k"
KERNEL=="sata[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb_udev.sh ssd %k", OPTIONS="last_rule"
挂载SD卡,也可以一起写到上面文件中,但是在系统在内存卡中运行时,一直会把EMMC挂上去
#########-----SD------##############
#----------------------------------#
KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/udev/rules.d/usb_udev.sh sd %k"
KERNEL=="mmcblk[0-9]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/udev/rules.d/usb_udev.sh sd %k", OPTIONS="last_rule"
2、编写脚本执行文件
规则文件写好后,在/etc/udev/rules.d
下编写脚本文件usb_udev.sh
vim usb_udev.sh
#!/bin/bash
MNT_PATH=/mnt/ #挂载移动设备的目录
DEV_PRE=$1 #参数1:挂载点的前缀
DEV_NAME=$2 #参数2:设备在/dev下的名字
if [ $ACTION == "add" ]; then
/bin/mkdir -p $MNT_PATH$DEV_PRE-$DEV_NAME
/bin/mount /dev/$DEV_NAME $MNT_PATH$DEV_PRE-$DEV_NAME #这里可根据 which mount 来产看自己的mount在什么位置,这里一定要注意
if [[ $? -ne 0 ]]; then
/bin/rmdir $MNT_PATH$DEV_PRE-$DEV_NAME
fi
if [ $ACTION == "remove" ]; then
if [[ -e $MNT_PATH$DEV_PRE-$DEV_NAME ]] ; then
/bin/umount $MNT_PATH$DEV_PRE-$DEV_NAME
/bin/rmdir $MNT_PATH$DEV_PRE-$DEV_NAME
fi
fi
exit 0
给予可执行权限
chmod +x usb_udev.sh
重启系统
reboot
3、调试
如果发现挂载没有成功,需要获取相应的信息
udevadm test -a add /sys/class/block/sataa1
sataa1
根据自己设备的实际情况填写