hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记
1、接入U盘,看输出打印信息并分析
(1)输出信息
自动创建设备节点
(2)用ls命令查看
这里/dev/sda表示整个U盘,/dev/sda1表示这个U盘的第一个分区。
(3)手动挂载,查看文件,手动卸载(把设备/dev/sda1挂载到目录/mnt目录下 )
2、想自动卸载和挂载
(1)查看mdev(看它除了创建设备节点外,还做什么事情)
查看mdev_main函数
如果有mdev.conf配置文件,根据配置文件做其他事情,没有的话只创建设备节点mknod()函数。通过配置文件让mdev应用程序执行我们的命令。
(2)搜素busybox里面的mdev.txt
为了让mdev能够用起来,要挂载文件系统sys,因为之前创建设备节点时用到文件sys文件系统
(3)配置文件mdev.conf怎么写
下面是其格式
device regex:正则表达式,表示哪一个设备
uid: owner
gid: 组ID
octal permissions:以八进制表示的属性
@:创建设备节点之后执行命令
$:删除设备节点之前执行命令
*: 创建设备节点之后 和 删除设备节点之前 执行命令
command:要执行的命令
(4)mdev会创建设备节点 ,创建这个设备节点属性是怎么样的(可读/可写/可执行),默认的属性是660
(5)修改设备节点的属性
当mdev要创建设备节点的时候,会根据mdev.conf这个配置文件来创建它的属性,我们想自动挂载,可以往这个配置文件写入一些命令。mdev(在busybox里)来分析这个配置文件执行加入的命令。发现设备节点device
regex后(例如有U盘设备插入),以权限octal permissions来创建,并且会执行命令command
3、正则表达式
(1)在电脑上查文件用*.c这个*表示通配符,表示所有的带.c后缀的文件。
(2)为了求精确查找,用正则表达式
(3)写例子理解正则表达式
打开之前写的驱动程序Myleds.c
创建了一个类,在类下面创建了设备,在设备下创建多个设备节点
先看修改前的设备节点的权限 (现在是660,想把它改为777)
想修改这三个设备节点的权限,就要写配置文件mdev.conf
不用正则表达式时修改权限
leds 0:0 777
led1 0:0 777
led2 0:0 777
led3 0:0 777
装载驱动再查看设备节点权限(权限从660变为777)
像上面那样写比较麻烦,用一种规则来匹配上面的四个设备节点(正则表达式)
下面?表示前面的字符s重复0次或者1次,[]表示表示字符123中的某一个。
leds?[123]? 0:0 777
修改mdev.conf,重新装载驱动
添加命令@表示创建设备节点之后执行命令,可以用环境变量$MDEV来表示哪一个设备节点。
leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console
修改mdev.conf,重新装载驱动,执行create /dev/$MDEV这句话
修改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
(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
4、.U盘自动加载
(1)查看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
再插上USB设备
U盘已经挂载上了里面有txt文件
再次拔掉USB设备,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
修改权限
修改后插上U盘,查看挂载
查看设备节点,由于sda没有匹配之前的规则,默认权限还是660
转自:http://blog.csdn.net/qingkongyeyue/article/details/53349521
hotplug_uevent机制_修改mdev配置支持U盘自动挂载学习笔记的更多相关文章
- 二十三、uevnet机制和U盘自动挂载
一.uevent机制 在分析之前,我们首先要知道uevent作用是什么.在此我们先来看一个uevent机制的框架图: 该图片来自:Linux设备模型(3)_Uevent 通过图片我们可以确定ueven ...
- centos samba/squid 配置 samba配置 smbclient mount fstab自动挂载samba curl -xlocalhost:3128 www.qq.com squid配置 3128 DNSPOD 第二十七节课
centos samba/squid 配置 samba配置 smbclient mount fstab自动挂载samba curl -xlocalhost:3128 www.qq.com squ ...
- RHEL7-openldap安装配置三(客户端自动挂载配置)
前两篇文章我们配置好了LDAP服务端和LDAP客户端.这篇文章将讲述从LDAP客户机服务器上挂载NFS服务器上共享的目录. 1.LDAP服务器上NFS共享配置 1.1 NFS服务也可以单独搭建在另外一 ...
- Linux服务——二、配置NFS及autofs自动挂载服务
一.NFS服务配置步骤 NFS的作用:能够使两台虚拟机之间实现文件共享.数据同步 准备:主机名.网络.yum源 Server端: 1.安装nfs-util和rpcbind:(图形化自带) [root@ ...
- 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏
由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...
- 修改Android系统的触摸提示音【学习笔记】
平台信息:内核:Linux version 3.10.0系统:android/android6.0平台:rk3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 本 ...
- ubuntu12.04 U盘自动挂载配置
Ubuntu12.04禁止U盘等设备的自动挂载方法如下: 在图形界面(字符界面无效)内进入系统终端,ctrl+alt+T或者gnome-terminal 禁止自动挂载:$ gsettings seto ...
- 关于实现udev/mdev自动挂载与卸载
在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...
- eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?
对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...
随机推荐
- 简单的cookie盗取
此文需要有一定的javascript\html\php方面的只是作为基础 直接上代码: #用于抓取盗窃来的cookie的php文件,此文件需置于攻击者的服务器上,这里包含了两种写法:Method1和M ...
- dilworth定理+属性排序(木棍加工)
P1233 木棍加工 题目描述 一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的.棍子可以被一台机器一个接一个地加工.机器处理一根棍子之前需要准备时间.准备时间是这样定义的: 第一根棍子的准备时间 ...
- DOM 踩踩踩
1.如果是想给一个DOM元素添加一个伪类,可以转换为 为这个元素添加一个类名,这个类名上面绑定一个伪类. 2.append一个元素,删除掉原来的元素再进行添加.
- ffmpeg+EasyDSS流媒体服务器实现稳定的rtmp推流直播
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74783269 需求 在做EasyDSS开发时,总 ...
- Extjs 5 可选择日期+时间的组件DateTimeField
我们都知道ExtJs有日期组件DateField,但直到ExtJs 5.0版本该日期组件也只能选择日期,不能选择时间(具体到时.分.秒),而实际工作中又常常会有需要日期和时间同时选择的需求,我们只能自 ...
- 程序设计入门-C语言基础知识-翁恺-第五周:函数-详细笔记(五)
目录 第五周:函数 5.1 函数 5-2 使用函数 5.3 课后习题 第五周:函数 5.1 函数 什么是函数? 函数是一块代码,接受零个或多个参数,做一件事情,并返回零个或一个值. 函数声明语法 返回 ...
- 使用dlopen和dlsym来使用C++中的类
http://my.oschina.net/u/1450061/blog/204608
- 2019ICPC南昌邀请赛网络赛 I. Max answer (单调栈+线段树/笛卡尔树)
题目链接 题意:求一个序列的最大的(区间最小值*区间和) 线段树做法:用单调栈求出每个数两边比它大的左右边界,然后用线段树求出每段区间的和sum.最小前缀lsum.最小后缀rsum,枚举每个数a[i] ...
- 每天一个linux命令(性能、优化):【转载】vmstat命令
vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深 ...
- 获得消息的x,y的窗口内坐标(包括边框和titlebar高度
rectWindow = D2D.GetWindowRect(self.hwnd)#窗口大小 rectClient = D2D.GetWindowRect(self.hwnd,True)#客户区大小 ...