使用Devfs来管理设备文件虽然解决了真实设备不存在设备文件却存在的情况,但仍然存在一些问题:
1.仍然无法清楚的区分同类设备
2.Devfs需要管理大量的设备文件名数据库,开销巨大
为了解决这两个问题,在linux2.6引入sysfs文件系统的基础之上,使用Udev来管理创建设备文件,Udev基本上分为几个子模块:namedev、libsys、udev。基本工作流程为:hotplug调用libsys来扫描sysfs文件系统来获取所有的设备信息,然后根据Udev为的命令规则来创建对应的设备文件。由于有了sysfs文件系统的支持,根据rule创建出来的设备文件就可以确定是唯一的设备,不会出现无法区分同类设备的情况,如:
有两个USB设备,在使用devfs的情况下,有可能第一个设备对应的设备文件是/dev/sda,第二个设备对应的设备文件对应的是/dev/sdb,这样上层想操作具体的设备时,根本不知道哪个设备文件是哪个设备(可能通过查看日志来确认);但如果使用udev来完成,由于sysfs当中有详细的设备信息,假如第一个设备的ID为5,第二个设备的ID为6,udev在自己的规则中规定,ID为5的设备对应的设备文件为/dev/sda,ID为6的设备对应的设备文件为/dev/sdb,这样由于中间有了一份信息交互手段(sysfs),就不会出现无法命中设备的情况。
实际上这种设备信息来决定设备文件的方式,可以由驱动开发者来完成,如驱动开发者将设备ID为5的设备未见固定为/dev/sda,咋看情况其实是一样的,但是试想如果需要增添一个设备,就必须重新删除添加驱动模块,但如果在用户空间使用Udev来完成,将一定程度上将设备驱动写的与具体的ID无关,这样sysfs当中能够检查到新的设备,只需要在udev当中配置规则就能创建新的设备文件。
阅读(1346) | 评论(0) | 转发(0) |