udev是Linux内核的设备管理器,主要功能是管理/dev目录下的设备节点,同时也是用来接替热拔插的功能。
Linux内核使用udev机制创建设备节点,udev 完全在用户态 (userspace) 工作,利用设备加入或移除时内核所发送的hotplug 事件 (event) 来工作。关于设备的详细信息是由内核输出 (export) 到位于 /sys 的 sysfs 文件系统的。
挂载U盘设备后,系统会生成sda和sda1设备,将sda1设备挂载都mnt目录,再将文件复制到mnt目录,当卸载U盘设备时,umount挂载的设备目录即可。本文的主要内容是在在Linux的/etc/udev目录下新建有关挂载U盘和卸载U盘的规则,实现挂载U盘后能够根据规则中的脚本进行相关的操作。
1、修改配置文件udev.conf
# see udev.conf(5) for details
#
# udevd is started in the initramfs, so when this file is modified the
# initramfs should be rebuilt.
udev_log="info"
~
2、新建规则
新建的规则文件保存在/etc/udev/rules.d中。
2.1、11-add-usb.rules,添加挂载U盘的规则。
ACTION!="add",GOTO="farsight"
KERNEL=="sda[1-9]",RUN+="/sbin/sda_mount.sh %k"
LABEL="farsight"
2.2、11-remove-usb.rules,卸载U盘的规则。
ACTION!="remove",GOTO="farsight"
SUBSYSTEM!="block",GOTO="farsight"
KERNEL=="sda[1-9]",RUN+="/sbin/umount-usb.sh"
LABEL="farsight"
3、新建相关操作的脚本文件
3.1、sda-mount.sh,该脚本用于挂载sda1分区至系统的mnt目录,并将mnt目录中的内容cp至所需的文件夹中。
#!/bin/sh
sudo mount /dev/sda1 /mnt;
sudo cp -rf /picture/camera /mnt;
/works/s430 /works/picture/uflash.bmp;
sync
3.2、umount-usb.sh,该脚本用于卸载mnt目录。
#!/bin/sh
sync
umount /mnt/