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盘自动挂载学习笔记的更多相关文章

  1. 二十三、uevnet机制和U盘自动挂载

    一.uevent机制 在分析之前,我们首先要知道uevent作用是什么.在此我们先来看一个uevent机制的框架图: 该图片来自:Linux设备模型(3)_Uevent 通过图片我们可以确定ueven ...

  2. 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 ...

  3. RHEL7-openldap安装配置三(客户端自动挂载配置)

    前两篇文章我们配置好了LDAP服务端和LDAP客户端.这篇文章将讲述从LDAP客户机服务器上挂载NFS服务器上共享的目录. 1.LDAP服务器上NFS共享配置 1.1 NFS服务也可以单独搭建在另外一 ...

  4. Linux服务——二、配置NFS及autofs自动挂载服务

    一.NFS服务配置步骤 NFS的作用:能够使两台虚拟机之间实现文件共享.数据同步 准备:主机名.网络.yum源 Server端: 1.安装nfs-util和rpcbind:(图形化自带) [root@ ...

  5. 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  6. 修改Android系统的触摸提示音【学习笔记】

    平台信息:内核:Linux version 3.10.0系统:android/android6.0平台:rk3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 本 ...

  7. ubuntu12.04 U盘自动挂载配置

    Ubuntu12.04禁止U盘等设备的自动挂载方法如下: 在图形界面(字符界面无效)内进入系统终端,ctrl+alt+T或者gnome-terminal 禁止自动挂载:$ gsettings seto ...

  8. 关于实现udev/mdev自动挂载与卸载

    在网上有很多关于讲mdev的自动挂载基本上都是一个版本,经过测试自动挂载确实可行,但是关于自动卸载mdev似乎不能很好的支持,经过修改已经可以做到与udev的效果相似.不能在挂载的目录中进行热插拔,否 ...

  9. eclipse代码自动提示设置、如何配置eclipse的代码自动提示功能(同时解决自动补全变量名的问题)?

    对于编程人员来说,要记住大量的类名或类方法的名字,着实不是一件容易的事情.如果要IDE能够自动补全代码,那将为我们编程人员带来很大帮助. eclipse代码里面的代码提示功能默认是关闭的,只有输入“. ...

随机推荐

  1. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  2. 【dlbook】实践方法论

    [性能度量] 使用什么误差度量? 目标性能大致为多少? [默认的基准模型] 首先尝试分段线性单元,ReLU以及扩展. SGD一般是合理的选择,选加入动量的版本,衰减方法不一. 批标准化在优化出现问题时 ...

  3. Flexible 弹性盒子模型之CSS order 属性

    实例 设置弹性盒对象元素的顺序: div#myRedDIV {order:2;} div#myBlueDIV {order:4;} div#myGreenDIV {order:3;} div#myPi ...

  4. Spring核心概念(一)

    1.解决JavaEE的轻量级框架. 2.环境搭建 第一步:导入spring的jar包 第二步:导入配置文件(一般写在resource下面) 第三步:创建一个类(bean) 第四步:在主配置文件中注入这 ...

  5. CUDA Samples: Streams' usage

    以下CUDA sample是分别用C++和CUDA实现的流的使用code,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第十章,各个文件内容如 ...

  6. MDN搜索结果自动跳转中文地址

    MDN社区(即Mozilla开发者社区)具有很多高质量中英文文档.它是我开发时遇到概念模糊的地方经常访问的网站.因为默认搜索一些代码,优先显示的都是英文.但是恰恰这些显示的英文文档是有中文的.每次都是 ...

  7. Shell 批量搜索关键词并保存结果到文件中(数组、循环)

    #!/bin/bash keywords=("不需要" "不用谢谢" "xxx" "xxx") for var in $ ...

  8. laravel 修改重置密码模板

    Laravel里我们可以使用php artisan make:auth来生成一套默认的登陆注册重置邮箱的Authentication System,但是如何修改系统发送给用户的重置密码邮件的样式和内容 ...

  9. 单独编译某个pas文件

    默认的询问.提示.警告框都是英文,找到Vcl.consts.pas改了下,重新编译,放到安装目录下,替换原有的即可. 1. 使用dcc32.exe编译指定的pas文件,dcc32.exe所在目录见下图 ...

  10. #Eclipse web工程 部署 三种方式 3

    Eclipse web工程 部署 三种方式 3.热部署 在Eclipse中,实现 修改一个.java文件或者.jsp文件甚至是配置文件,不需要重启WEB服务器的前提下让修改生效,实现tomcat自动加 ...