快速业务通道

介绍现代Linux系统的设备管理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-25
程监听一个netlink套接字,这个套接字是内核用来与用户空间的应用程序进行通信的.当一个设备被加入或移出系统时,内核可能会 通过这个netlink套接字发送一大堆的数据.Udev守护进程截取所有这些数据并完成剩下的工作,也就是创建设备节点,加载模块,等等.

  内核设备事件管理

  启动初始化时, /dev目录使用tmpfs挂载.

  然后, Udev拷贝/lib/udev/devices 的静态设备节点到 /dev 目录.

  Udev守护进程开始运行,为所有连接到系统的设备收集来自内核的uevents.

  Udev守护进程解析uevent数据,并且对/etc/udev/rules.d中指定的规则进行匹配.

  根据指定的规则为设备创建设备节点和符号链接.

  Udev守护进程读取/etc/udev/rules.d/*.rules 中的规则并且保存到内存里面.

  Udev接收接收inotify事件,如果某个规则发生了改变,读取这些改变并更新内存副本.

  设备驱动程序加载

  Udev使用modalias方法来加载设备驱动程序. 位于/lib/modules/`uname -r`/modules.alias 的modalias文件用于协助Udev加载设备驱动. modalias文件由depmod命令创建,包括了设备驱动的别名.

  让我们检查一个Linux设备驱动加载的例子:

  我使用一个C程序来从netlink套接字收集数据,并且使用它们来创建设备节点以及加载模块.

  [root@arch ~]# ./a.outadd@/devices/pci0000:00/0000:00:02.1/usb1/1-4ACTION=addDEVPATH=/devices/pci0000:00/0000:00:02.1/usb1/1-4SUBSYSTEM=usbMAJOR=189MINOR=1DEVTYPE=usb_deviceDEVICE=/proc/bus/usb/001/002PRODUCT=1058/1010/105TYPE=0/0/0BUSNUM=001DEVNUM=002SEQNUM=1163add@/devices/pci0000:00/0000:00:02.1/usb1/1-4/1-4:1.0ACTION=addDEVPATH=/devices/pci0000:00/0000:00:02.1/usb1/1-4/1-4:1.0SUBSYSTEM=usbDEVTYPE=usb_interfaceDEVICE=/proc/bus/usb/001/002PRODUCT=1058/1010/105 …………………………………………你可以看到它提供了很多关于这个设备的信息.这其中包括了用来告诉Udev加载某个特定模块的modalias变量.

  modalias数据看起来像这样:

  MODALIAS=pci:v000010ECd00008169sv00001385sd0000311Abc02sc00i00The modalias data contains all the information required to find the corresponding device driver :

  pci :- 这是一个PCI设备 v :- 设备的厂商ID. 在这里就是 000010EC ( 即 10EC )d :- 设备的设备ID. 在这里就是 00008169 ( 即 8169 )sv 和 sd 是厂商和设备的子系统版本号. 依据ID查找一个PCI设备的厂商/产品的最好地方是 http://www.pcidatabase.com.

  Udev使用modalias数据来从/lib/modules/`uname -r`/modules.alias 查找正确的设备驱动.

  $ grep -i 10EC /lib/modules/`uname -r`/modules.alias | grep -i 8169alias pci:v000010ECd00008129sv*sd*bc*sc*i* r8169alias pci:v000010ECd00008169sv*sd*bc*sc*i* r8169你可以看到适合这个设备的模块是r8169. 让我们获取关于这个驱动程序的更多的信息.

  $ /sbin/modinfo r8169filename: /lib/modules/2.6.18-53.el5/kernel/drivers/net/r8169.koversion: 2.2LK-NAPIlicense: GPLdescription: RealTek RTL-8169 Gigabit Ethernet driverauthor: Realtek and the Linux r8169 crew srcversion: D5EDA4980B92CA2CF677B62alias: pci:v00001737d00001032sv*sd00000024bc*sc*i*alias: pci:v000016ECd00000116sv*sd*bc*sc*i*alias: pci:v00001186d00004300sv*sd*bc*sc*i*alias: pci:v000010ECd00008129sv*sd*bc*sc*i*alias: pci:v000010ECd00008169sv*sd*bc*sc*i*depends:vermagic: 2.6.18-53.el5 SMP mod_unload 686 REGPARM 4KSTACKS gcc-4.1parm: media:force phy operation. Dep

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号