mdev

【mdev存在的理由--设备文件系统】


我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊? 如果要使用这些设备,那不是要一个一个的去手动的创建这些设备的设备文件节点,这给我们使用设备带来了极为的不便(在之前篇幅中讲的各种设备驱动的移植都是这样)。
 
设备文件系统就是给我们解决这一问题的关键,他能够在系统设备初始化时动态的在/dev目录下创建好各种设备的设备文件节点(也就是说,系统启动后/dev目录下就有了各种设备的设备文件,直接就可使用了)。除此之外,他还可以在设备卸载后自动的删除/dev下对应的设备文件节点(这对于一些热插拔设备很有用,插上的时候自动创建,拔掉的时候又自动删除)。还有一个好处就是,在我们编写设备驱动的时候,不必再去为设备指定主设备号,在设备注册时用0来动态的获取可用的主设备号,然后在驱动中来实现创建和销毁设备文件(一般在驱动模块加载和卸载函数中来实现)。 
 
【mdev之我们用它来干啥】
mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。
【mdev之原理】
要想真正用好mdev,适当知道一下原理是必不可少的。现在简单介绍一下mdev的原理:


执行mdev -s
以‘-s’为参数调用位于/sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和
/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev
下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。


热插拔事件:由于启动时运行了命令: echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于
/sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有“dev”的属性文件,如果有就利用这些信息为这个设备在/dev 下创建设备节点文件。
//注释:这黄色的部分查了好多资料都没有解释, 大部分都是一般的COPY,并没有这条语句的意思;


The file has the format: 
这个文件的格式如下: 
<device regex> <uid>:<gid> <octal permissions>         //注释:regex 正则表达式;octal 八进制


For example: 
例如: 
hd[a-z][0-9]* 0:3 660 


The config file parsing stops at the first matching line. If no line is 
这个配置文件在第一个匹配行处停止解析。 如果没有匹配行, 
matched, then the default of 0:0 660 is used. To set your own default, simply 
那么就使用默认的 0:0 660 。 你也可以通过在最后创建如下的全匹配 
create your own total match like so: 
行,来设置你自己的默认设置: 
.* 1:1 777 
 
//主要内容:自己执行自己定义的命令
If you also enable support for executing your own commands, then the file has 
如果你想 mdev 在找到匹配行时可以执行自定义的命令,那么文件格式如下: 
the format: 
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] 
The special characters have the meaning: 
特殊字符的意义如下: 
@ Run after creating the device. 
@ 在创建设备节点后运行命令。 
$ Run before removing the device. 
$ 在删除设备节点前运行命令。 
* Run both after creating and before removing the device. 
* 在创建设备节点后和删除设备节点前都运行命令。 
The command is executed via the system() function (which means you're giving a 
这些命令是通过系统函数(system())执行的(也就是说你在对shell 下命令) 
command to the shell), so make sure you have a shell installed at /bin/sh. 
,所以请确保你已在 /bin/sh 安装了shell。 
For your convenience, the shell env var $MDEV is set to the device name. So if 
为了方便,shell 的环境变量 $MDEV 会被设置成设备名。 例如 
the device 'hdc' was matched, MDEV would be set to "hdc". 
mdev 解析到设备 'hdc' 匹配,MDEV 将会被设置为 "hdc"。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值