How do I find out which kernel module (as seen by typing lsmod) is servicing a particular device in /dev ?

In other words, say I have a device, /dev/mouse0 and I want to find out which kernel module is installed to service that device. How do I do that?

Another way to look at this is, some loaded kernel modules associate themselves with a device in /dev. How does one find out which device(s) a module is "attached" to?

link|improve this question
feedback

2 Answers

up vote 3 down vote accepted

You can usually find this information by digging through /sys if you're on a 2.6 kernel.

e.g.

$ 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

So the driver in this case is usbhid. There might be a better/neater way of doing this but I find digging in sysfs usually gets the job done.

link|improve this answer
feedback

not sure if this will help finding the module (though it should) but you can use lsof to see what is accessing the particular device file. lsof /dev/mouse0 for example, though you can do more with the commandline options to lsof

more examples of how to use lsof http://wikis.sun.com/pages/viewpage.action?pageId=49906332

link|improve this answer
lsof won't show you the name of the module. lsof only shows which userspace programs have the device node open. – James May 12 '10 at 22:37
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.