In the discover-data package in Debian, there is a script to report useful information about the running hardware for use when people report missing information. One part of this script that I find very useful when debugging hardware problems, is the part mapping loaded kernel module to the PCI device it claims. It allow me to quickly see if the kernel module I expect is driving the hardware I am struggling with. To see the output, make sure discover-data is installed and run /usr/share/bug/discover-data 3>&1. The relevant output on one of my machines like this:
loaded modules: 10de:03eb i2c_nforce2 10de:03f1 ohci_hcd 10de:03f2 ehci_hcd 10de:03f0 snd_hda_intel 10de:03ec pata_amd 10de:03f6 sata_nv 1022:1103 k8temp 109e:036e bttv 109e:0878 snd_bt87x 11ab:4364 sky2
The code in question look like this, slightly modified for readability and to drop the output to file descriptor 3:
if [ -d /sys/bus/pci/devices/ ] ; then echo loaded pci modules: ( cd /sys/bus/pci/devices/ for address in * ; do if [ -d "$address/driver/module" ] ; then module=`cd $address/driver/module ; pwd -P | xargs basename` if grep -q "^$module " /proc/modules ; then address=$(echo $address |sed s/0000://) id=`lspci -n -s $address | tail -n 1 | awk '{print $3}'` echo "$id $module" fi fi done ) echo fi
Similar code could be used to extract USB device module mappings:
if [ -d /sys/bus/usb/devices/ ] ; then echo loaded usb modules: ( cd /sys/bus/usb/devices/ for address in * ; do if [ -d "$address/driver/module" ] ; then module=`cd $address/driver/module ; pwd -P | xargs basename` if grep -q "^$module " /proc/modules ; then address=$(echo $address |sed s/0000://) id=$(lsusb -s $address | tail -n 1 | awk '{print $6}') if [ "$id" ] ; then echo "$id $module" fi fi fi done ) echo fi
This might perhaps be something to include in other tools as well.