如何找出哪个内核模块(通过输入 lsmod 查看)正在为 /dev 中的特定设备提供服务?
换句话说,假设我有一个设备 /dev/mouse0,我想找出安装了哪个内核模块来为该设备提供服务。我该怎么做?
另一种看待这个问题的方式是,一些已加载的内核模块将自己与 /dev 中的设备关联。如何找出模块“附加”到哪个设备?
答案1
/sys
如果您使用的是 2.6 内核,通常可以通过深入挖掘找到这些信息。
例如
$ ls -la /dev/input/mouse1
crw-r----- 1 root root 13, 33 2010-03-08 15:56 /dev/input/mouse1
$ ls -la /sys/class/input/mouse1/device/driver
lrwxrwxrwx 1 root root 0 2010-05-12 23:33 /sys/class/input/mouse1/device/driver -> ../../../../../../bus/usb/drivers/usbhid
因此,本例中的驱动程序是usbhid
。可能有更好/更简洁的方法来做到这一点,但我发现深入研究 sysfs 通常可以完成这项工作。
答案2
不确定这是否有助于找到模块(虽然应该如此),但您可以使用它lsof
来查看正在访问特定设备文件的内容。lsof /dev/mouse0
例如,虽然您可以使用 lsof 的命令行选项做更多事情
更多使用示例lsof
http://wikis.sun.com/pages/viewpage.action?pageId=49906332