hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

时间:2021-07-16 10:54:42

1、接入U盘,看输出打印信息并分析

(1)输出信息

自动创建设备节点

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(2)用ls命令查看

这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区。

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(3)手动挂载,查看文件,手动卸载(把设备/dev/sda1挂载到目录/mnt目录下 )

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

2、想自动卸载和挂载

(1)查看mdev(看它除了创建设备节点外,还做什么事情)

查看mdev_main函数

如果有mdev.conf配置文件,根据配置文件做其他事情,没有的话只创建设备节点mknod()函数。通过配置文件让mdev应用程序执行我们的命令。

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(2)搜素busybox里面的mdev.txt

为了让mdev能够用起来,要挂载文件系统sys,因为之前创建设备节点时用到文件sys文件系统

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(3)配置文件mdev.conf怎么写

下面是其格式

device regex:正则表达式,表示哪一个设备

uid: owner

gid: 组ID

octal permissions:以八进制表示的属性

@:创建设备节点之后执行命令

$:删除设备节点之前执行命令

*: 创建设备节点之后 和 删除设备节点之前 执行命令

command:要执行的命令

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(4)mdev会创建设备节点 ,创建这个设备节点属性是怎么样的(可读/可写/可执行),默认的属性是660

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(5)修改设备节点的属性

当mdev要创建设备节点的时候,会根据mdev.conf这个配置文件来创建它的属性,我们想自动挂载,可以往这个配置文件写入一些命令。mdev(在busybox里)来分析这个配置文件执行加入的命令。发现设备节点device
regex后(例如有U盘设备插入),以权限octal permissions来创建,并且会执行命令command

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

3、正则表达式

(1)在电脑上查文件用*.c这个*表示通配符,表示所有的带.c后缀的文件。

(2)为了求精确查找,用正则表达式

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(3)写例子理解正则表达式

打开之前写的驱动程序Myleds.c

创建了一个类,在类下面创建了设备,在设备下创建多个设备节点

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

先看修改前的设备节点的权限 (现在是660,想把它改为777)

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

想修改这三个设备节点的权限,就要写配置文件mdev.conf

不用正则表达式时修改权限

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

leds 0:0 777

led1 0:0 777

led2 0:0 777

led3 0:0 777

装载驱动再查看设备节点权限(权限从660变为777)

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

像上面那样写比较麻烦,用一种规则来匹配上面的四个设备节点(正则表达式)

下面?表示前面的字符s重复0次或者1次,[]表示表示字符123中的某一个。

leds?[123]? 0:0 777

修改mdev.conf,重新装载驱动

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

添加命令@表示创建设备节点之后执行命令,可以用环境变量$MDEV来表示哪一个设备节点。

leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console

修改mdev.conf,重新装载驱动,执行create /dev/$MDEV这句话

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

修改mdev.conf,在装载驱动时执行create语句。在卸载驱动时,执行remove语句

leds?[123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(4)把上面的命令写入一个脚本(add_remove_led.sh)

在mdev.conf里写入下面内容

leds?[123]? 0:0 777 * /bin/add_remove_led.sh

写add_remove_led.sh脚本

#!/bin/sh

if [ $ACTION = "add" ]; 

then 

echo create /dev/$MDEV > /dev/console; 

else 

echo remove /dev/$MDEV > /dev/console; 

fi

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记



4、.U盘自动加载

(1)查看U盘的设备节点

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

修改mdev.conf内容里面的正则表达式

这里+表示执行一次或更多次。如果mdev发现设备节点吻合sda[1-9],会创建设备节点属性,并执行后续的命令。

sda[1-9]+ 0:0 777 * if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi

查看已加载的文件系统,拔掉USB

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

再插上USB设备

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

U盘已经挂载上了里面有txt文件

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

再次拔掉USB设备,U盘没有挂载

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

(2)在mdev.conf里加入脚本文件add_remove_udisk.sh

sda[1-9]+ 0:0 777 * /bin/add_remove_udisk.sh



脚本文件如下(通过环境变量识别)

add_remove_udisk.sh(#!/bin/sh表示是一个shell程序)

#!/bin/sh

if [ $ACTION = "add" ]; 

then 

mount /dev/$MDEV /mnt; 

else 

umount /mnt; 

fi

修改权限

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

修改后插上U盘,查看挂载

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

查看设备节点,由于sda没有匹配之前的规则,默认权限还是660

hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记

转自:http://blog.csdn.net/qingkongyeyue/article/details/53349521