mdev.txt

MDEV 文档翻译

译者:mingliang.lu

日期:2015-06-10

其他说明:翻译busybox-1.23.2(stable)版本中的mdev.txt  译者水平有限,理解上难免有错误,供自己学习笔记使用


-------------
 MDEV入门指南
-------------
对于那些各知道如何使用mdev的人,这个指南似乎有点烂。
但对于那些个不知道的人,mdev是那般充满神秘的黑盒子,但仅靠这些似乎又
不能完全教会如何使用它,因此,它就是个简介。

-----------
 基本用法
-----------
Mdev有两个主要的用途:
初始化对象和动态更新,不仅仅需要内核支持sysfs文件系统还要求你它(sysfs)被挂载到了/sys文件夹下。
对于动态更新的功能,你也需要在内核编译时候支持它才行。

步骤一:下面是一个比较典型的小代码嵌在初始化脚本中的
[0] mount -t proc proc /proc
[1] mount -t sysfs sysfs /sys
[2] echo /sbin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s

步骤二:与此同时,如果上面的四步中不选择支持proc文件系统(译者注:默认内核都支持的,就看你挂载不挂载罢了,上面的几步就该改写成下面的,但最终实现的功能与上面四步是一样的)
Alternatively, without procfs the above becomes:
[1] mount -t sysfs sysfs /sys
[2] sysctl -w kernel.hotplug=/sbin/mdev
[3] mdev -s

步骤一和步骤二是等价的!!!!只是一个使用proc文件系统,一个没有使用proc文件系统,我推荐使用第一种。

当然,在前面的几个步骤之前,下面的这几步([4]~[6])必须要执行确保让mdev的初始化配置更加的全面
[4] mount -t tmpfs -o size=64k,mode=0755 tmpfs /dev
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts

接下来对上面的几个步骤做一个简单的说明
[1]:你要在执行mdev之前,先确保/sys文件已经挂载了sysfs文件系统
[2]:通知内核去运行/sbin/mdev程序,以用来确保当一个设备在插入或者拔出之后,相应的设备节点可以被创建或者销毁
[3]:在系统启动阶段所有的设备节点都在/dev下面被创建

对上面的全面性初始化设置,你应该确保
[4]:/dev下面是一个tmpfs文件系统(假设你不是把程序在flash上运行的)
[5]:然后你要创建/dev/pts这个文件挂载点,
[6]:最终你要在/dev/pts下挂载devpts文件系统上去

-------------
 MDEV Config   (/etc/mdev.conf)
-------------
MDEV 如果你的系统中有设备节点的权限超过了默认的值(660)的,那么你或许需要一个config文件来配置它们(指权限掩码超过660的哪些设备)
文件的格式按照下面所示:
The file has the format:
 [-][envmatch]<device regex> <uid>:<gid> <permissions>
or
 [envmatch]@<maj[,min1[-min2]]> <uid>:<gid> <permissions>
or
 $envvar=<regex>  <uid>:<gid> <permissions>

For example:
 hd[a-z][0-9]* 0:3 660
 
配置文件的语法以第一个分界线为边界.如果没有边界线被匹配,默认将使用
0:0 660。简单的默认属性设置可以像下面这样:
 .* 1:1 777
你可以重命名/移动设备节点通过使用接下来的这个选项.
 <正则表达式> <用户组ID>:<所属组ID> <权限掩码> [=path]
如果你想把设备节点放到一个子目录中去,请确保你的路径后有个/ 如果你向重命名这个设备节点,就直接放名字就行,比如说
 hda 0:3 660 =drives/
This will move "hda" into the drives/
在drives后面有个/,也就是说是把hda放到了drives文件夹下面了
 hdb 0:3 660 =cdrom
This will rename "hdb" to "cdrom".
在cdrom后面没有个/,也就是说是把hdb进行了重命名
同样,你也可以使用>path来实现文件的重命名/移动 文件,但它也会在/dev/DEVNAME下创建一个符号链接为这些重名了/移动的设备

你也可以使用“!”来不产生设备节点
 tty[a-z]. 0:0 660 !
 pty[a-z]. 0:0 660 !
(这样做后,在上电后的系统下不会产生任何的ttya~ttyz,以及ptya~pttyz)

如果你想自己的命令得到确切的执行,那么你得按照下面的文件格式编写命令
 <正则表达式> <用户组ID>:<所属组ID> <权限掩码> [重命名/移动/禁止启动] [@|$|* <cmd>]
 <device regex> <uid>:<gid> <permissions> [=path] [@|$|*<command>]
    or
 <device regex> <uid>:<gid> <permissions> [>path] [@|$|*<command>]
    or
 <device regex> <uid>:<gid> <permissions> [!] [@|$|*<command>]
下面就@|$|* 做一个解释说明
 @:再创建这个设备后运行后面的<command>
 $:在移除这个设备前运行后面的<command>
 *:在创造后和移除前都要执行后面的<command>
至于所执行的命令都是通过系统调用system()函数来实现的(它的意思就像你在给shell输出个命令一样),
因此,你得确保你有个shell在系统中默认/bin/sh. 你应该知道内核的热插拔是使用的标准的输入、输出、错误是定向
到/dev/null里的.
 为了方便,shell的环境变量$MDEV是用来设置设备名称的.因此如果设备"hdc"与之相配,MDEV将会设置成hdc

----------
 固件
----------
有一些内核设备驱动为了更好的初始化一个设备常常需要在运行的时候去请求一个固件,
你需要把这些固件文件放在/lib/firmware/文件目录下。在运行期间,内核将会根据固件名称
从/lib/firmware/下调用出来,并且通过sysfs接口把它们加载到内核中.文件的名称在内核中是独一无二的
,因此如果你不知道怎么样在用户空间去命名,那么你应该去看看相关文件.

------------
 关于序列
------------
内核并不是个热插拔的机制.它只会在每一个成功的热插拔调用后增加SEQNUM环境变量的值.
正常情况下,mdev并不关心.它会重新整理热插拔事件,那些各典型的设备节点有时候却不会如期被创建.

然而,如果找到/dev/mdev.seq文件,mdev将会用SEQNUM与它进行想比较,它将会尝试或许达到2s等他们进行匹配。
如果匹配成功(甚至行尾的'\n'符号也一样)或者2s全用光,mdev将会继续像往常一样的运行,然后它(mdev)会重写
/dev/mdev.seq把SEQNUM+1

注意:这将会使mdev的调用保持同步的机制

如果你想用这种特点,你要在设置mdev之前使用“echo > /dev/mdev.seq”命令设置它成为热插拔处理函数.这个命令会在文件中写入'\n'
NB:mdev视/dev/mdev.seq包含单一的'\n'字符为一种特殊的情况.注意:这种情况不会使得你的热插拔时间拖延到2秒之久。
 
 


 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值