从前面的实验我们可以看到,devfs文件系统虽然弥补了很多linux2.4内核之前的不足,但是自身同样存在很多缺陷。在进入linux2.6时代后,devfs文件系统彻底被抛弃,神奇的udev取代了它。udev相对于devfs有以下优点: l udev工作在用户模式中,而devfs很大程度上依靠内核; l devfs所能实现的功能,udev统统能实现; l devfs允许存在一些假的、死的设备节点,而udev则根据系统中硬件设备的状态动态更新设备文件,因而不会产生假死的设备节点。正因为devfs可能会存在这些无用的节点,系统会浪费宝贵的时间来通过modprobe不断的尝试,而在udev中将彻底避免这些问题; l udev通过设备加入或移除时内核所发生的热插拨事件来工作,设备的详细信息会输出到/sys目录,而devfs并没有这一机制; l 当一个不存在的设备节点被打开时,devfs会自动加载相应的驱动,而udev的设计者认为linux应该在发现的时候加载驱动模块,而不是在被访问的时候。 udev是一种工具,它能够根据系统中的硬件设备的状况动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下,使用udev后,在/dev下面只包含系统中真实存在的设备。它于硬件平台无关的,位于用户空间,需要内核sysfs和tmpfs的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间。 在linux2.6内核以后,引入了一个新的文件系统sysfs,它挂载于/sys目录下,跟devfs一样它也是一个虚拟文件系统,也是用来对系统的设备进行管理的,它把实际连接到系统上的设备和总线组织成一个分级的文件,用户空间的程序同样可以利用这些信息以实现和内核的交互,该文件系统是当前系统上实际设备树的一个直观反应,它是通过kobject子系统来建立这个信息的,当一个kobject被创建的时候,对应的文件和目录也就被创建了,位于/sys下的相关目录下,既然每个设备在sysfs中都有唯一对应的目录,那么也就可以被用户空间读写了。 用户空间的工具udev就是利用了sysfs提供的信息来实现所有devfs的功能的,但不同的是udev运行在用户空间中,而devfs却运行在内核空间,而且udev不存在devfs那些先天的缺陷。很显然,sysfs将是未来发展的方向。
|