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