介绍现代Linux系统的设备管理
程监听一个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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |