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.
+ +