Linux下mdev的配置-自动挂载U盘

目录

  • 环境
  • mdev作用
  • 启用buildroot中的mdev
  • mdev配置文件格式
    • 自动挂载U盘
  • 实际测试

环境

芯片:F1C100S
软件:Linux4.15 + buildroot 2019.02.3
目标:插入U盘后自动挂载到文件夹

mdev作用

主要作用就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需要的节点文件
mdev不加参数时就是利用hotplug机制来决定创建什么样的设备文件。
mdev -s程序通过扫描/sys/class和/sys/block中所有的类设备目录,利用这些信息在/dev下创建设备节点。

启用buildroot中的mdev

buildroot中有4种设备节点管理方式,在→ System configuration → /dev management 中可以选择,

  • Static using device table (静态分配,rootfs中有就有,没有的话,启动后也不会动态创建)
  • Dynamic using devtmpfs only (启动过程中动态创建,启动后不会自动创建设备节点)
  • Dynamic using devtmpfs + mdev(启动过程中动态创建,启动后使用mdev管理设备节点)
  • Dynamic using devtmpfs + eudev (启动过程中动态创建,启动后使用eudev管理设备节点)

前两种都能知道怎么回事,而mdev基本是eudev的简化版,因此eudev由于功能更多更复杂,也导致占用比mdev大得多。实测打包后,依旧比mdev大1.4M左右。
Linux下mdev的配置-自动挂载U盘_第1张图片

mdev配置文件格式

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>*:在设备节点创建完和删除前执行

自动挂载U盘

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用来存放匹配到的设备名, MDEVACTION用来存放设备插拔状态其值为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

你可能感兴趣的:(linux)