-------------
MDEV 初级读本
-------------
对于知道如何运用mdev的人来说,这个初级读本似乎是简陋的。但是对于其他人,mdev似乎是一个不可思议的黑匣子,因为我们不知道他是怎么工作的,因此它听起来似乎是令人敬畏的。而我们写的这个初级读本可以供大家参考
-----------
基本用法
-----------
Mdev有两个基本的用法:初始种群和动态更新。这两个用法都需要内核中系统文件系统(sysfs)的支持并将这个系统文件系统挂接到 /sys 目录下。而对于动态更新你还要使能你内核中的热拔插(hotplugging)
下面是一段典型的初始化脚本的代码
[1] mount -t sysfs sysfs /sys
[2] echo /bin/mdev > /proc/sys/kernel/hotplug
[3] mdev -s
当然,一个更完整的设置将要加上下面的代码段一起执行:
[4] mount -t tmpfs mdev /dev
[5] mkdir /dev/pts
[6] mount -t devpts devpts /dev/pts
一个简单的解释如下:
[1]:你需要在执行mdev之前将sysfs类型的系统文件系统挂接到/sys 文件
[2]:当一个设备添加或者删除时,需要告诉内核执行/bin/mdev来创建或者销毁一个设备节点
[3]:然后当系统重启时,遍历/dev下所有创立的设备节点
而对于一个完整的设置,你需要
[4]:确认 /dev 是一个tmpfs类型的文件系统(假如你没有在flash上运行)
[5]:创建/dev/pts的挂接点
[6]:挂接devpts类型的文件系统到/dev/pts挂接点
-------------
MDEV 配置(/etc/mdev.conf)
-------------
当你不认同默认的设置(root/root660)权限时,Mdev有一个可选择的配置文件来控制设备节点的所有权/权限。
这个配置文件有其特有的格式:
<device regex> <uid>:<gid><octal permissions>
例如:
hd[a-z][0-9]*0:3 660
这个配置文件解析在匹配的第一行停止。如果用于匹配的行,那么默认的 0:0 660将被设置。而设置你自己的默认选项,例如简单的设置你所有都匹配为:
.*1:1 777
如果你想执行你自己的命令,那么他的格式为:
<deviceregex> <uid>:<gid> <octal permissions> [<@|$|*><command>]
特殊的参数意义为:
@:创建设备之后执行
$:移除设备之前执行
*:创建设备之后和移除设备之前都执行
而这些命令则通过系统函数执行(这意味着你给shell一个命令),因此要确认你在/bin/sh中已经安装了shell。
为了你的方便,用shell的环境变量(env var)$MDEV来表示设备名字。因此如果设备‘hdc’匹配成功,那么MDEV将被设为“hdc”
----------
FIRMWARE(固件)
----------
一些内核设备驱动在运行时需要请求固件来合理的初始化一个设备。而将所有的固件文件放到/lib/firmware/ 目录下。在运行时,内核将通过sysfs接口调用mdev和固件的文件名,将他们从/lib/firmware/ 目录下加载出来,并加载入内核中。这个准确的文件名在内核中是写死的。所以如果你想知道在用户空间中文件名为什么,你可以看这里。