在对待设备文件这块, Linux 改变了几次策略。在 Linux 早期,设备文件仅仅是
是一些带有适当的属性 集的普通文件,它由 mknod命令创建,文件存放在 /dev
目录下。后来,采用了 devfs, 一个基于内核的动态设备文件系统,他首次出现
在 2.3.46 内核中。Mandrake,Gentoo 等 Linux 分发版本采用了这种方式。 devfs
创建的设备文件是动态的。但是 devfs 有一些严重的限制,从 2.6.13 版本后移
走了。目前取代他的便是文本要提到的 udev--一个用户空间程序。
目前很多的 Linux 分发版本采纳了 udev 的方式,因为它在 Linux 设备访问,特
别是那些对设备有极端需求的站点 (比如需要控制上千个硬盘) 和热插拔设备(比
如 USB摄像头和 MP3播放器)上解决了几个问题。下面我我们来看看如何管理
udev 设备。
实 际上,对于那些为磁盘,终端设备等准备的标准配置文件而言,你不需要修
改什么。但是,你需要了解 udev 配置来使用新的或者外来设备,如果不修改配
置,这 些设备可能无法访问,或者说 Linux 可能会采用不恰当的名字,属组或
权限来创建这些设备文件。 你可能也想知道如何修改 RS-232 串口,音频设备等
文件 的属组或者权限。这点在实际的 Linux 实施中是会遇到的。
为什么使用 udev
在此之前的设备文件管理方法(静态文件和 devfs )有几个缺点:
* 不确定的设备映射。 特别是那些动态设备, 比如 USB设备,设备文件到实际设
备的映射并不可靠和确定。 举一个例子: 如果你有两个 USB打印机。 一个可能称
为 /dev/usb/lp0, 另外一个便是 /dev/usb/lp1 。但是到底哪个是哪个并不清楚,
lp0,lp1 和实际的设备没有一一对应的关系, 因为他 可能因为发现设备的顺序,
打印机本身关闭等原因而导致这种映射并不确定。 理想的方式应该是: 两个打印
机应该采用基于他们的序列号或者其他标识信息的唯一设 备文件来映射。但是
静态文件和 devfs 都无法做到这点。
* 没有足够的主 / 辅设备号。 我们知道, 每一个设备文件是有两个 8 位的数字: 一
个是主设备号 ,另外一个是辅设备号来分配的。这两个 8 位的数字加上设备类
型(块设备或者字符设备)来唯一标识一个设备。不幸的是,关联这些身边的的
数字并不足够。
*/dev 目录下文件太多。一个系统采用静态设备文件关联的方式,那么这个目录
下的文件必然是足够多。 而同时你又不知道在你的系统上到底有那些设备文件是
激活的。
* 命名不够灵活。尽管 devfs 解决了以前的一些问题,但是它自身又带来了一些
问题。其中一个就是命名不够灵活; 你别想非常简单的就能修改设备文件的名字。
缺省的 devfs 命令机制本身也很奇怪,他需要修改大量的配置文件和程序。
* 内核内存使用, devfs 特有的另外一个问题是, 作为内核驱动模块, devfs 需要
评论0
最新资源