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. L147 Low Cost Study Has High Impact Results For Premature Babies

    No one knows exactly why some babies are born prematurely(早产), but some of the smallest premature ba ...

  2. 转:android Support 兼容包详解

    本文转自stormzhang的ANDROID SUPPORT兼容包详解 背景 来自于知乎上邀请回答的一个问题Android中AppCompat和Holo的一个问题?, 看来很多人还是对这些兼容包搞不清 ...

  3. 深度学习(六十七)metal forge深度学习库使用

    1.设置输入: let input = Input() 或者 let input = Input(width: 100, height: 100, channels: 3) 2.创建网络: let o ...

  4. python常用模块之random模块

    python常用模块之random模块 在程序中很多会用到随机字符,比如登陆网站的随机验证码,通过random模块可以很容易生成随机字符串 1.random.randrange():返回1-10之间的 ...

  5. Objective C - 1 - 实现一个MessageBox.Show

    @interface K3ViewController : UIViewController<UIAlertViewDelegate> @end #import "K3ViewC ...

  6. 博通BCM53101M以太网交换芯片原理解析

    Quality of Service 服务质量 BCM53101M的QoS为每个端口提供6个内部队列以支持6种不同的流量类别(traffic class, TC).在流量拥塞的情况下,可通过拥塞管理, ...

  7. Android学习笔记之Android Studio添加新的Activity

    1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...

  8. 使用Percona Xtrabackup创建MySQL slave库

    一.使用Percona Xtrabackup创建MySQL slave库 MySQL Server 版本: Server version: 5.7.10-log MySQL Community Ser ...

  9. python 除法

  10. 每天一个linux命令(文件操作):【转载】find命令之exec

    find是我们很常用的一个Linux命令,但是我们一般查找出来的并不仅仅是看看而已,还会有进一步的操作,这个时候exec的作用就显现出来了. exec解释: -exec  参数后面跟的是command ...