资源描述:
《跟我一起写udev规则》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、跟我一起写udev规则udev面向2.6以上的linux内核在用户空间提供动态的/dev下固定设备命名方案.之前的/dev实现:devfs现在已被废弃,udev成为继任者.udevvsdevfs是一个敏感的谈话内容,在进行比较之前你应该读一下这个文档(http://kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs).几年间你为之使用udev规则的设备发生改变了,如同规则自身的弹性一样.在现代系统中udev为系统外的类型设备提供了固定的命
2、名方法,避免了为这些设备提供定制规则.但是一些用户仍然需要额外的定制级别.本文档假设你已经安装了udev并使用缺省配置运行ok.这通常通过你的linux发行版做到的.语义:devfs,sysfs,nodes等在典型的基于linux的系统中,/dev目录用来存储文件一样的设备节点,它们指向系统中特定的设备.每一个节点指向系统的一部分(一个设备),可能存在也可能不存在.用户空间应用程序可以使用这些设备节点跟系统硬件打交道,例如,X服务器"监听"/dev/input/mice来根据用户的鼠标移动来移动可
3、视鼠标指针.原来的/dev目录仅仅在设备可能在系统中出现时产生,因此/dev目录一般非常大.随之而来的devfs提供了一种易于管理的途径(注意它仅仅在硬件插入到系统中时产生/dev)以及其他功能,但系统会出现无法容易修复的问题.udev是一种新的管理/dev目录的方法,它的设计清除了以前的/dev实现的一些问题并提供了鲁棒的路径向后兼容.为了创建并命名系统中相应的/dev设备结点,udev需要依赖于根据用户提供的规则从sysfs中得到的匹配信息.本文着重规则书写的过程,udev相关的任务由用户自己
4、完成.sysfs是2.6内核中一个新的文件系统,它由内核管理,并导出当前系统中插入的设备基本信息.udev可使用这些信息创建对应的硬件设备结点.sysfs挂载在/sys下而且是可浏览的.你可能很希望在使用udev之前刺探下存储在那儿的有关文件.本文中我将交替使用/sys和sysfs术语.为什么?udev规则具有弹性非常强大,这里是一些你使用规则可以达到的结果:1.重命名设备节点的缺省名字为其他名字2.通过创建符号链接到缺省设备节点来提供一个可选的固定的设备节点名字3.基于程序的输出命名设备节点4.
5、改变设备节点的权限和所有权5.但设备节点被创建或删除时(通常是添加设备或拔出设备时)执行一个脚本6.重命名网络接口当存在的特定设备没有设备节点时,这不是书写规则的工作范围.即使没有匹配的规则,udev也会利用内核提供的缺省名字来创建设备节点.拥有固定命名设备节点有很多好处.假设你有两个USB存储设备:一个数码相机,一个是USB闪存盘.这些设备通过被赋予/dev/sda和/dev/sdb设备节点,准确的赋值取决于它们连接到系统的顺序.这可能为一些用户造成麻烦,如果每个设备每次都可以固定命名,比如/d
6、ev/camera和/dev/flashdisk,用户就会获益.内置固定命名方法udev为系统外的一些设备类型提供了固定命名,这是一个很有用的特征,在某些情况下意味着你不用书写任何规则.udev为存储设备在/dev/disk目录下提供了系统外命名方法.要查看它为你的存储硬件创建的固定命名,你可以使用下列命名:#ls-lR/dev/disk所有存储类型都可以这么用.例如udev为我的根分区创建了固定命名链接:/dev/disk/by-id/scsi-SATA_ST3120827AS_4MS1NDXZ
7、-part3.但我插入我的USB闪存盘udev就会创建另外一个固定命名节点:/dev/disk/by-id/usb-Prolific_Technology_Inc._USB_Mass_Storage_Device-part1.规则书写规则文件和语义为决定如何命名设备以及执行什么另外动作,udev会读取一系列规则文件.这些文件保存在/etc/udev/rules.d目录下并且都必须有.rules后缀名.缺省udev规则存储在/etc/udev/rules.d/50-udev.rules里面.你可能发
8、现整个文件很有意思,它包含了少量例子,一些缺省规则提供了devfs风格的/dev布局,但是你不应该直接在这个文件里面书写规则./etc/udev/rules.d/下面的文件通过lexical顺序解析,在某些情况下规则的解析顺序很重要.通常来说你希望你的规则可以在缺省规则之前解析,所以我建议你创建一个文件/etc/udev/rules.d/10-local.rules并把自己的所有规则写到这里面去.在一个规则文件中,以"#"开头的行被认为是注释.每一个非空的行都是一条规则.规则不能跨