芯片:F1C100S
软件:Linux4.15 + buildroot 2019.02.3
目标:插入U盘后自动挂载到文件夹
主要作用就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需要的节点文件
mdev不加参数时就是利用hotplug机制来决定创建什么样的设备文件。
mdev -s程序通过扫描/sys/class和/sys/block中所有的类设备目录,利用这些信息在/dev下创建设备节点。
buildroot中有4种设备节点管理方式,在→ System configuration → /dev management 中可以选择,
前两种都能知道怎么回事,而mdev基本是eudev的简化版,因此eudev由于功能更多更复杂,也导致占用比mdev大得多。实测打包后,依旧比mdev大1.4M左右。
mdev的配置文件为 /etc/mdev.conf。 新版的buildroot 启用mdev时,已经自动配置好启动过程中根据/sys/目录创建/dev/下设备节点,且自动启动mdev。因此这里只说mdev.conf的配置
基本格式
:
:设备名称,支持正则表达式如hd[a-z][0-9]*等
: :用户ID和组ID
:八进制表示的设备属性
执行脚本格式
: [=|>path] [@|$|*]
[=|>path]:这个选项可以更改设备节点的命名和路径,如:
<1> =/driver: 可以将设备节点移动到driver目录下
<2> =newname: 可以讲设备节点改为newname命名
<3> >/driver/newname: 可以在/driver目录下创建一个设备节点的链接,并命名为newname
[@|$|*]:这个选项当设备匹配成功时,执行指令,这个指令可以是自己编写的脚本。前面的符号含义如下:
<1>@:在设备节点创建完执行
<2>$:在设备节点删除前执行
<3>*:在设备节点创建完和删除前执行
mdev当检测到hotplug时,会根据配置文件的配置执行相应的脚本。而当系统检测到U盘插入时,系统会将U盘首先映射到 /dev/sd* (如sda sdb 等)。
我们编写/etc/mdev.conf:
sd[a-z][0-9] 0:0 666 @/etc/mdev/udisk_insert
sd[a-z] 0:0 666 $/etc/mdev/udisk_remove
说明:
@ 表示当检测到hotplug有设备名为sda0~sdz9的设备插入时,执行的脚本。
$ 表示该设备拔出时执行的脚本。
下面编写检测到U盘插入时调用的脚本 /etc/mdev/udisk_insert :
#!/bin/sh
if [ -d /sys/block/*/$MDEV ] ; then
mkdir -p /media/$MDEV
mount -t vfat -o utf8=1 /dev/$MDEV /media/$MDEV
fi
注:$MDEV 是传入的设备名。
先创建准备挂载到的设备文件夹,这里挂载到 /media/<设备名>/,再将设备挂载到该目录。一般U盘使用fat文件系统,因此我们指定挂载的目标文件系统为vfat。
下面编写检测到U盘拔出时调用的脚本 /etc/mdev/udisk_remove:
#!/bin/sh
umount -l /media/$MDEV
rm -rf /media/$MDEV
注: 与插入时相反顺序即可。 先取消挂载,再删除挂载目录。
脚本中除了可以使用 M D E V , 还 可 以 使 用 MDEV,还可以使用 MDEV,还可以使用ACTION,其中 M D E V 用 来 存 放 匹 配 到 的 设 备 名 , MDEV用来存放匹配到的设备名, MDEV用来存放匹配到的设备名,ACTION用来存放设备插拔状态其值为add和remove。
在插入U盘后,在/media/文件夹出现了 /media/sda1/,且 执行ls /media/sda1之后,列出了U盘中的内容。
参考内容:
[1]: https://blog.csdn.net/dragon101788/article/details/8757204
[2]: https://my.oschina.net/u/2990965/blog/777618