mdev.txt

来源:互联网 发布:数据备份系统 编辑:程序博客网 时间:2024/04/29 10:07

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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怎么办假的残疾军人证 外地人到北京就业怎么办五险 巴基斯坦留学生护照丢了怎么办 不敢上梯子太丢人怎么办 家人信了全能神怎么办 头皮上长淋巴炎怎么办? 鱼缸里的鱼相互咬怎么办? 火车凌晨4点到站怎么办 金立手机拍不了照怎么办 手术拆线后切口不平怎么办 乳牙透明冠掉了怎么办 配眼镜度数低了怎么办 眼睛高度近视怎么办才能恢复 猎人荒野的呼唤打中一枪后怎么办 凯恩帝数控超程报警怎么办 凯恩帝数控车床x向超程怎么办 别人问你借账号怎么办 微信成夜间模式怎么办 网络电视突然黑屏了怎么办 1adac连接线坏了怎么办 4g的标志没有了怎么办 苹果手机亏电了怎么办 苹果手机亏电了充不进电怎么办 比值审敛法 ρ=1怎么办 比值审敛法中p=1怎么办 电脑被老友重装系统搞坏了怎么办 vivo手机听筒声音小怎么办 小孩调皮幼儿园不收怎么办 小孩听力残疾幼儿园不收怎么办 幼儿园不收外省小孩怎么办 孩子刚上幼儿园哭闹老师怎么办 孕妇糖耐指标高怎么办 貂蝉经常没蓝怎么办 儿童声导抗c型怎么办 酱牛肉不烂怎么办拯救 卤牛肉一切就碎怎么办 牛肉煮的太烂了怎么办 牛肉卤的太烂怎么办 牛肉炖得太软怎么办 牛肉炖的很硬怎么办 牛肉做的有点硬怎么办