Sign up ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

If my target has one device connected and many drivers for that device loaded, how can I understand what device is using which driver?

share|improve this question

migrated from Jun 28 '12 at 8:37

This question came from our site for professional and enthusiast programmers.

3 Answers 3

up vote 19 down vote accepted

Just use /sys.

Example. I want to find the driver for my Ethernet card:

$ sudo lspci
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
$ find /sys | grep drivers.*02:00

That is r8169.

First I need to find coordinates of the device using lspci; then I find driver that is used for the devices with these coordinates.

share|improve this answer
lspci -v does it by itself. – poige Jul 1 '12 at 4:50
lspci -nk will show you attached drivers. In general the sysfs is the right place to search for. – Andy Shevchenko Nov 18 at 20:03

You can use the lsmod command to get the status of loaded modules / devices drivers in the Linux Kernel.

For a specific device, you can use dmesg |grep <device-name> to get the details too.

share|improve this answer
Thanks. But if i loaded two drivers for a device with same major no and different minor no ,and if only one driver is being used for the device ,how can I find which driver is used for that device? – Deepu Jun 27 '12 at 6:34
perhaps this SO question can help you further. – gkris Jun 27 '12 at 6:49

Here's a little script I wrote:

for f in /sys/class/net/*; do
    dev=$(basename $f)
    driver=$(readlink $f/device/driver/module)
    if [ $driver ]; then
        driver=$(basename $driver)
    addr=$(cat $f/address)
    operstate=$(cat $f/operstate)
    printf "%10s [%s]: %10s (%s)\n" "$dev" "$addr" "$driver" "$operstate"

Sample output:

$ ~/ 
      eth0 [52:54:00:aa:bb:cc]: virtio_net (up)
      eth1 [52:54:00:dd:ee:ff]: virtio_net (up)
      eth2 [52:54:00:99:88:77]: virtio_net (up)
        lo [00:00:00:00:00:00]:            (unknown)
share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.