#! /bin/sh # Autodetection script for scanning /sys for pci stuff # for Archlinux by Tobias Powalowski usage () { echo "$0 [options]" echo "" echo " This is a tool that detects/lists modules that are exported by /sys" echo "" echo " Options:" echo " -load-modules load all detected modules" echo " -show-modules show all detected modules" echo " -show-agp show AGP modules" echo " -show-ide show IDE modules" echo " -show-scsi show SCSI modules" echo " -show-sata show SATA modules" echo " -show-usb show USB modules" echo " -show-fw show FIREWIRE modules" echo " -show-net show NETWORK modules" echo " -show-isdn show ISDN modules" echo " -show-pcmcia show PCMCIA modules" echo " -show-sound show SOUND modules" echo " -show-video show VIDEO modules" echo " -show-other show OTHER modules" echo "" echo " For /etc/mkinitrd.conf use:" echo " -ide show detected HOSTCONTROLLER_IDE" echo " -scsi show detected HOSTCONTROLLER_SCSI" echo " -sata show detected HOSTCONTROLLER_SATA" echo " -usb show detected HOSTCONTROLER_USB" echo "" exit 1 } [ "$1" == "" ] && usage # find pci aliases find /sys/devices/ -name "modalias" | grep pci > /tmp/modules # delete pci devices that are blacklisted for i in "${BLACKLIST[@]}"; do sed -i -e "/$i/d" /tmp/modules done # get the modaliases for i in `cat /tmp/modules`; do cat $i >> /tmp/modprobe done # generate files for the different actions for i in `cat /tmp/modprobe`; do modprobe --show-depends $i >> /tmp/modules-plain 2>/dev/null done sort -u /tmp/modules-plain >> /tmp/modules-sorted sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" /tmp/modules-sorted >> /tmp/moduleslist # starting different actions while [ $# -gt 0 ]; do case $1 in -load-modules) # load all detected pci modules for i in `cat /tmp/modprobe`; do modprobe $i > /dev/null 2>&1 done ;; -show-modules) # show all detected modules echo "AGP modules" echo "-----------------------" grep "agp/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "IDE modules" echo "-----------------------" grep "ide/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "SCSI modules" echo "-----------------------" grep "scsi/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "sata" \ | grep -v "ata_piix" | grep -v "libata" echo "" echo "SATA modules" echo "-----------------------" grep "ata" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "eata" echo "" echo "USB modules" echo "-----------------------" grep "usb/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "FIREWIRE modules" echo "-----------------------" grep "ieee1394/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "NETWORK modules" echo "-----------------------" grep "net/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "ISDN modules" echo "-----------------------" grep "isdn/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "PCMCIA modules" echo "-----------------------" grep "pcmcia/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "SOUND modules" echo "-----------------------" grep "sound/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "VIDEO modules" echo "-----------------------" grep "video/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" echo "OTHER modules" echo "-----------------------" grep -v "agp/" /tmp/modules-sorted | grep -v "ide/" | grep -v "scsi/" | grep -v "sata" \ | grep -v "usb/" | grep -v "ieee1394" | grep -v "net/" | grep -v "pcmcia/" | grep -v "sound/"\ | grep -v "video/" | grep -v "isdn/" | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" || echo "No module found" echo "" ;; -show-agp) #show detected IDE modules echo "AGP modules" echo "-----------------------" grep "agp/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-ide) #show detected IDE modules echo "IDE modules" echo "-----------------------" grep "ide/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-scsi) #show detected SCSI modules echo "SCSI modules" echo "-----------------------" grep "scsi/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "sata" \ | grep -v "ata_piix" | grep -v "libata" echo "" ;; -show-sata) #show detected SATA modules echo "SATA modules" echo "-----------------------" grep "ata" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "eata" echo "" ;; -show-usb) #show detected USB modules echo "USB modules" echo "-----------------------" grep "usb/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-fw) #show detected FIREWIRE modules echo "FIREWIRE modules" echo "-----------------------" grep "ieee1394/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-net) #show detected NETWORK modules echo "NETWORK modules" echo "-----------------------" grep "net/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-isdn) #show detected ISDN modules echo "ISDN modules" echo "-----------------------" grep "isdn/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-pcmcia) #show detected PCMCIA modules echo "PCMCIA modules" echo "-----------------------" grep "pcmcia/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-sound) #show detected SOUND modules echo "SOUND modules" echo "-----------------------" grep "sound/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-video) #show detected VIDEO modules echo "VIDEO modules" echo "-----------------------" grep "video/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -show-other) #show detected OTHER modules echo "OTHER modules" echo "-----------------------" grep -v "agp/" /tmp/modules-sorted | grep -v "ide/" | grep -v "scsi/" | grep -v "sata" \ | grep -v "usb/" | grep -v "ieee1394" | grep -v "net/" | grep -v "pcmcia/" | grep -v "sound/"\ | grep -v "video/" | grep -v "isdn/" | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" echo "" ;; -ide) #show detected IDE modules grep "ide/pci" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" ;; -scsi) #show detected SCSI modules grep "scsi/" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "sata" \ | grep -v "ata_piix" | grep -v "libata" ;; -sata) #show detected SATA modules grep "ata" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" | grep -v "eata" \ | grep -v "libata" ;; -usb) #show detected USB modules grep "usb/host" /tmp/modules-sorted | sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" ;; esac shift done # cleanup rm /tmp/{modules-plain,modules-sorted,moduleslist,modprobe,modules}