#! /bin/sh # Autodetection script for scanning /sys for hardware # 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 " --kernel_version= use kernel version (no autodetect)" echo " --ide-legacy use old ide modules instead of pata" echo " --load-modules load all detected modules" echo " --unload-modules unload all detected modules" echo " --show-modules show all detected modules" echo " --show-modules-order shows load order of detected modules" echo " --show-agp show AGP modules" echo " --show-acpi show ACPI modules" echo " --show-ide show IDE modules" echo " --show-pata show PATA 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-input show INPUT modules" echo " --show-irda show IRDA modules" echo " --show-isdn show ISDN modules" echo " --show-pcmcia show PCMCIA modules" echo " --show-sound show SOUND modules" echo " --show-staging show STAGING modules" echo " --show-video show VIDEO modules" echo " --show-other show OTHER modules" echo "" echo " For /etc/mkinitcpio.conf use:" echo " --filesystem add filesystems to MODULES=" echo " --hostcontroller show MODULES= for all hostcontrollers" echo " --vmware add BusLogic to MODULES for vmware" echo " --ati-kms add ati kernel mode setting" echo " --intel-kms add intel kernel mode setting" echo " --nvidia-kms add nvidia kernel mode setting" echo "" echo " --rootdevice= autodetected advanced features of rootdevice" echo " --hooks-dir= use this directory for HOOKS check" echo " --advanced show autodetected advanced HOOKS" echo " --hooks show HOOKS=" echo " --dmraid add dmraid to HOOKS=" echo " --keymap add keymap to HOOKS=" echo " --usb add usb to HOOKS=" echo " --usbinput add usbinput to HOOKS=" echo " --fw add fw to HOOKS=" echo " --pcmcia add pcmcia to HOOKS=" echo " --nfs add net to HOOKS=" echo " --btrfs add btrfs to HOOKS=" echo "" echo " For /etc/rc.conf use:" echo " --net show network MODULES" echo " --sound show sound MODULES" echo " --usbhost show usb hostcontroller MODULES" echo " --modules show all detected MODULES" echo "" exit 1 } [ "$1" = "" ] && usage [ "$1" = "--help" ] && usage [ "$1" = "-h" ] && usage # setting kernel version case $1 in --kernel_version=*) KERNEL_VERSION="$(echo $1 | awk -F= '{print $2;}')" ;; --rootdevice=*) ROOTDEVICE="$(echo $1 | awk -F= '{print $2;}')" ;; esac if [ "$KERNEL_VERSION" = "" ]; then KERNEL_VERSION="$(uname -r)" fi # IDE/PATA switch [ "$(echo $* | grep '\-ide-legacy')" ] && IDE_LEGACY=1 # uvesafb switch [ "$(echo $* | grep '\-uvesafb')" ] && UVESAFB=1 # dmraid switch [ "$(echo $* | grep '\-dmraid')" ] && DMRAID=1 # keymap switch [ "$(echo $* | grep '\-keymap')" ] && KEYMAP=1 # usb switch [ "$(echo $* | grep '\-usb ')" ] && USB=1 # usbinput switch [ "$(echo $* | grep '\-usbinput')" ] && USBINPUT=1 # fw switch [ "$(echo $* | grep '\-fw')" ] && FW=1 # pcmcia switch [ "$(echo $* | grep '\-pcmcia')" ] && PCMCIA=1 # nfs switch [ "$(echo $* | grep '\-nfs')" ] && NFS=1 # nfs switch [ "$(echo $* | grep '\-btrfs')" ] && BTRFS=1 # vmware switch [ "$(echo $* | grep '\-vmware')" ] && VMWARE=1 # vmware switch [ "$(echo $* | grep '\-hooks')" ] && HOOKS=1 ADVANCED="" # root device check if ! [ "$ROOTDEVICE" = "" ]; then # check device mapper devices if [ "$(echo "$ROOTDEVICE" | grep "/dev/mapper")" ]; then # check if encryption is used if [ "$(cryptsetup status $ROOTDEVICE 2>/dev/null)" ]; then ADVANCED="encrypt" # check on lvm realdevice="$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')" if [ "$(lvs $realdevice 2>/dev/null)" ]; then ADVANCED="lvm2 encrypt" vg="$(echo $(lvs -o vg_name --noheading $realdevice))" # check on raid [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ] && ADVANCED="mdadm lvm2 encrypt" fi # check on raid if [ "$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/md" | sed -e 's#.*\ ##g')" ]; then ADVANCED="mdadm encrypt" realdevice="$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/md" | sed -e 's#.*\ ##g')" # check on lvm [ "$(mdadm --detail $realdevice | grep "/dev/dm-")" ] && ADVANCED="lvm2 mdadm encrypt" fi fi # check if lvm is used if [ "$(lvs $ROOTDEVICE 2>/dev/null)" ]; then ADVANCED="lvm2" vg="$(echo $(lvs -o vg_name --noheading $ROOTDEVICE))" # check on encrypt if [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/dm-")" ]; then ADVANCED="encrypt lvm2" # check on raid [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ] && ADVANCED="mdadm encrypt lvm2" for i in "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/dm-")"; do realdevice="$(echo $i | cut -d ' ' -f1)" #getsymlink="$(readlink $realdevice)" #correctdevice="$(echo $getsymlink | sed -e 's#\.\.#/dev#g')" [ "$(cryptsetup status $realdevice 2>/dev/null | grep "device:.*/dev/md")" ] && ADVANCED="mdadm encrypt lvm2" done fi # check on raid if [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ]; then ADVANCED="mdadm lvm2" #check on encrypt [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/dm-")" ] && ADVANCED="encrypt mdadm lvm2" for i in "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")"; do realdevice="$(echo $i | cut -d ' ' -f1)" [ "$(mdadm --detail $realdevice | grep "/dev/dm-")" ] && ADVANCED="encrypt mdadm lvm2" done fi fi fi # check md device if [ "$(echo "$ROOTDEVICE" | grep "/dev/md")" ]; then ADVANCED="mdadm" # raid partitions or raid? if [ "$(echo "$ROOTDEVICE" | grep "/dev/md*p")" ]; then realdevice="$(echo $ROOTDEVICE | sed -e 's#p.*##g' -e 's#/dev/##g')" if ! [ "$(find /sys/block/$realdevice/slaves/ -name 'dm*' 2>/dev/null)" = "" ]; then SET_LVM="" SET_ENCRYPT="" for k in $(find /sys/block/$realdevice/slaves/ -name 'dm*' 2>/dev/null); do [ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && SET_LVM="1" [ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && SET_ENCRYPT="1" # check on lvm [ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="lvm2 mdadm" # check on encrypt [ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="encrypt mdadm" # check encrypted volume device realdevice="$(cryptsetup status $(cat $k/dm/name) 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')" [ "$(lvs $realdevice 2>/dev/null)" ] && ADVANCED="lvm2 encrypt mdadm" vg="$(echo $(lvs -o vg_name --noheading /dev/mapper/$(cat $k/dm/name) 2>/dev/null))" [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/dm-")" ] && ADVANCED="encrypt lvm2 mdadm" done [ "$SET_LVM" = "1" -a "$SET_ENCRYPT" = "1" ] && ADVANCED="lvm2 encrypt mdadm" fi else realdevice="$(echo $ROOTDEVICE | sed -e 's#/dev/##g')" if ! [ "$(find /sys/block/$realdevice/slaves/ -name 'dm*' 2>/dev/null)" = "" ]; then SET_LVM="" SET_ENCRYPT="" for k in $(find /sys/block/$realdevice/slaves/ -name 'dm*' 2>/dev/null); do [ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && SET_LVM="1" [ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && SET_ENCRYPT="1" # check on lvm [ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="lvm2 mdadm" # check on encrypt [ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="encrypt mdadm" # check encrypted volume device realdevice="$(cryptsetup status $(cat $k/dm/name) 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')" [ "$(lvs $realdevice 2>/dev/null)" ] && ADVANCED="lvm2 encrypt mdadm" vg="$(echo $(lvs -o vg_name --noheading /dev/mapper/$(cat $k/dm/name) 2>/dev/null))" [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/dm-")" ] && ADVANCED="encrypt lvm2 mdadm" done [ "$SET_LVM" = "1" -a "$SET_ENCRYPT" = "1" ] && ADVANCED="lvm2 encrypt mdadm" fi fi fi fi # checking /sys if ! [ -d /sys/ ]; then echo "/sys/ is not present -- mount /sys first" >&2 exit 1 fi : >/tmp/modules-plain : >/tmp/modules-stripped : >/tmp/modules-sorted : >/tmp/moduleslist : >/tmp/.blkid # generate blkid /sbin/blkid -c /dev/null -s TYPE > /tmp/.blkid # find pci aliases aliases=$(find /sys/ -noleaf -name modalias -exec cat {} +) # check for empty aliases if [ "$aliases" = "" ]; then echo "hwdetect aborted -- you need a kernel >= 2.6.12" >&2 exit 1 fi # generate files for the different actions modprobe -i -a --set-version=$KERNEL_VERSION --show-depends $aliases >> /tmp/modules-plain 2>/dev/null # fix ide cdrom detection on proliant 1600 if [ "$(echo $aliases | grep 'pci:v00000E11d00000001sv00000000sd00000000bc06sc02i00')" ]; then modprobe -i --set-version=$KERNEL_VERSION --show-depends ide-generic >> /tmp/modules-plain 2>/dev/null fi # find PNP devices like parports, soundcards etc. # (workaround for rtc, pcspkr, irtty-sir and analog are included) if [ "$(find /sys/devices -noleaf -name 'id' | grep /pnp)" ]; then for i in $(find /sys/devices -noleaf -name "id" | grep /pnp); do devid=$(cat $i | grep PNP) [ "$devid" ] || continue modprobe -i --set-version=$KERNEL_VERSION --show-depends pnp:d${devid} >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0800" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends pcspkr >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_proc >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_sysfs >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0b00" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends rtc_dev >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0510" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNP0511" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends irtty-sir >> /tmp/modules-plain 2>/dev/null [ "$devid" = "PNPb02f" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends analog >> /tmp/modules-plain 2>/dev/null # load ppp-generic if serial ports are detected for modems [ "$devid" = "PNP0501" ] && modprobe -i --set-version=$KERNEL_VERSION --show-depends ppp-generic >> /tmp/modules-plain 2>/dev/null done fi # SCSI disks/cdroms/tapes/generic devices if [ "$(find /sys/devices -noleaf -name 'type')" ]; then for i in $(cat $(find /sys/devices -noleaf -name "type")); do case $i in (4|5) modprobe -i --set-version=$KERNEL_VERSION --show-depends sr_mod >> /tmp/modules-plain 2>/dev/null ;; esac case $i in (2|3|6|8|9) modprobe -i --set-version=$KERNEL_VERSION --show-depends sg >> /tmp/modules-plain 2>/dev/null ;; esac case $i in (0|7|14) modprobe -i --set-version=$KERNEL_VERSION --show-depends sd_mod >> /tmp/modules-plain 2>/dev/null ;; esac case $i in (1) modprobe -i --set-version=$KERNEL_VERSION --show-depends st >> /tmp/modules-plain 2>/dev/null ;; esac done fi # add Buslogic for vmware if [ "$VMWARE" = "1" ]; then modprobe -i --set-version=$KERNEL_VERSION --show-depends BusLogic >> /tmp/modules-plain 2>/dev/null fi # Parport modules if [ "$(grep 'parport' /tmp/modules-plain)" ]; then modprobe -i --set-version=$KERNEL_VERSION --show-depends lp >> /tmp/modules-plain 2>/dev/null modprobe -i --set-version=$KERNEL_VERSION --show-depends ppdev >> /tmp/modules-plain 2>/dev/null fi # Sound OSS compat modules if [ "$(grep 'snd-pcm' /tmp/modules-plain)" ]; then modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-pcm-oss >> /tmp/modules-plain 2>/dev/null fi if [ "$(grep 'snd-seq' /tmp/modules-plain)" ]; then modprobe -i --set-version=$KERNEL_VERSION --show-depends snd-seq-oss >> /tmp/modules-plain 2>/dev/null fi sort -u /tmp/modules-plain >> /tmp/modules-stripped # OTHER modules loading first for speed up! grep -v "ide/" /tmp/modules-stripped | grep -v "scsi/" | grep -v "fusion/" | grep -v "block/sx8" | grep -v "message/fusion" | \ grep -v "block/cciss" | grep -v "block/cpqarray" | grep -v "block/DAC960" | grep -v "block/virtio" | grep -v "ata/" | \ grep -v "net/" | grep -v "pcmcia/" | grep -v "usb/" | \ grep -v "firewire" | grep -v "ieee1394/" | grep -v "usbhid/" | grep -v "staging/" | grep -v "wireless/" | grep -v "virtio_pci" >> /tmp/modules-sorted # load virtio first! grep "virtio_pci" /tmp/modules-stripped >> /tmp/modules-sorted # make a correct order for the modules, internal devices have priority! # only use old ide modules if boot parameter 'ide-legacy' is given if [ "$IDE_LEGACY" = "1" ]; then grep "ide/" /tmp/modules-stripped | grep -v "ide-pci-generic" >> /tmp/modules-sorted else grep "ata/pata" /tmp/modules-stripped | grep -v "pata_acpi" >> /tmp/modules-sorted fi grep "scsi/" /tmp/modules-stripped | grep -v "sd_mod" | grep -v "sr_mod" | grep -v "/sg.ko" | grep -v "/st.ko" >> /tmp/modules-sorted grep "block/" /tmp/modules-stripped | grep -v "virtio_blk" | grep -v "sx8" | grep -v "nbd" | grep -v "pktcdvd" | grep -v "floppy" >> /tmp/modules-sorted grep "fusion/" /tmp/modules-stripped >> /tmp/modules-sorted grep "ata/" /tmp/modules-stripped| grep -v "pata" | grep -v "ata_generic" | grep -v "libata" >> /tmp/modules-sorted grep "block/" /tmp/modules-stripped | grep "sx8" >> /tmp/modules-sorted grep "net/" /tmp/modules-stripped | grep -v "wireless/" | grep -v "usb/" >> /tmp/modules-sorted grep "wireless/" /tmp/modules-stripped >> /tmp/modules-sorted grep "staging/" /tmp/modules-stripped >> /tmp/modules-sorted grep "pcmcia/" /tmp/modules-stripped >> /tmp/modules-sorted # speed up usb module loading grep "usb-storage" /tmp/modules-stripped >> /tmp/modules-sorted grep "usblp" /tmp/modules-stripped >> /tmp/modules-sorted grep "usbhid" /tmp/modules-stripped >> /tmp/modules-sorted grep "usb/" /tmp/modules-stripped | grep -v "usb-storage" | grep -v "usbhid" | grep -v "usblp" >> /tmp/modules-sorted grep "firewire/" /tmp/modules-stripped >> /tmp/modules-sorted grep "ieee1394/" /tmp/modules-stripped >> /tmp/modules-sorted # add scsi and virtio device modules at the end grep "virtio_blk" /tmp/modules-stripped >> /tmp/modules-sorted grep "sd_mod" /tmp/modules-stripped >> /tmp/modules-sorted grep "sr_mod" /tmp/modules-stripped >> /tmp/modules-sorted grep "/st.ko" /tmp/modules-stripped >> /tmp/modules-sorted grep "/sg.ko" /tmp/modules-stripped >> /tmp/modules-sorted sed -ne "s#^insmod.*/\(.*\)\.ko.*#\1#p" /tmp/modules-sorted >> /tmp/moduleslist listmods() { key=$1 ; shift ex= while [ "$1" ]; do [ "$ex" ] && ex="$ex|$1" || ex="$1" shift done for ln in $(grep "$key" /tmp/modules-sorted | sed 's|^insmod ||g'); do if [ "$ex" ]; then echo $ln | egrep -v "$ex" | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p" else echo $ln | sed -ne "s#^/.*/\(.*\)\.ko.*#\1#p" fi done } showlist() { cat=$1 ; shift [ $# -gt 0 ] || return echo -n "$cat: " for i in $*; do echo -n "$i "; done echo "" } showlist2() { cat=$1 ; shift [ $# -gt 0 ] || return echo -n "$cat=" for i in $*; do echo -n "$i "; done echo "" } showlist3() { cat=$1 ; shift [ $# -gt 0 ] || return for i in $*; do echo -n "$i "; done echo "" } # starting different actions while [ $# -gt 0 ]; do case $1 in -hooks-dir=*|--hooks-dir=*) HOOKS_DIR="$(echo $1 | awk -F= '{print $2;}')" ;; --load-modules) # load all detected pci modules for i in $(cat /tmp/moduleslist); do if [ -e /lib/udev/load-modules.sh ]; then /lib/udev/load-modules.sh $i > /dev/null 2>&1 else modprobe $i > /dev/null 2>&1 fi done ;; --unload-modules) # load all detected pci modules for i in $(cat /tmp/moduleslist); do modprobe -r $i > /dev/null 2>&1 done ;; --show-modules) showlist "AGP " $(listmods agp/) showlist "ACPI " $(listmods acpi/) showlist "IDE " $(listmods ide/ ide-) showlist "PATA " $(listmods ata/pata pata_acpi) $(listmods ata/ata_piix) showlist "SCSI " $(listmods virtio/virtio_pci) $(listmods scsi/) $(listmods message/fusion/) $(listmods drivers/block/ nbd pktcdvd sx8 floppy) showlist "SATA " $(listmods ata/ pata ata_generic) $(listmods drivers/block/sx8) showlist "USB " $(listmods usb/ usb/input) showlist "FW " $(listmods firewire/) $(listmods ieee1394/) showlist "NET " $(listmods net/ irda/) showlist "INPUT " $(listmods input/ pcspkr) $(listmods hid/) showlist "IRDA " $(listmods irda/) showlist "ISDN " $(listmods isdn/) showlist "PCMCIA " $(listmods pcmcia/) showlist "SOUND " $(listmods pcspkr) $(listmods sound/) showlist "STAGING" $(listmods staging/) showlist "VIDEO " $(listmods video/) showlist "OTHER " $(listmods modules/ agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 block/virtio virtio/virtio_pci ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/ staging/) ;; --show-modules-order) showlist "MODULES ORDER" $(listmods modules/) ;; --show-agp) showlist "AGP " $(listmods agp/) ;; --show-acpi) showlist "ACPI " $(listmods acpi/) ;; --show-ide) showlist "IDE " $(listmods ide/ ide-) ;; --show-pata) showlist "PATA " $(listmods ata/pata pata_acpi) $(listmods ata/ata_piix) ;; --show-scsi) showlist "SCSI " $(listmods virtio/virtio_pci) $(listmods scsi/) $(listmods message/fusion/) $(listmods drivers/block/ nbd pktcdvd sx8 floppy) ;; --show-sata) showlist "SATA " $(listmods ata/ pata ata_generic) $(listmods drivers/block/sx8) ;; --show-usb) showlist "USB " $(listmods usb/ usb/input) ;; --show-fw) showlist "FW " $(listmods firewire/) $(listmods ieee1394/) ;; --show-net) showlist "NET " $(listmods net/ irda/) ;; --show-input) showlist "INPUT " $(listmods input/ pcspkr) $(listmods hid/) ;; --show-irda) showlist "IRDA " $(listmods irda/) ;; --show-isdn) showlist "ISDN " $(listmods isdn/) ;; --show-pcmcia) showlist "PCMCIA " $(listmods pcmcia/) ;; --show-sound) showlist "SOUND " $(listmods pcspkr) $(listmods sound/) ;; --show-staging) showlist "STAGING" $(listmods staging/) ;; --show-video) showlist "VIDEO " $(listmods video/) ;; --show-other) showlist "OTHER " $(listmods .ko agp/ acpi/ ide/ scsi/ message/fusion block/sx8 block/cciss block/cpqarray block/DAC960 block/virtio virtio/virtio_pci ata/ usb/ ieee1394 net/ isdn/ input/ irda/ pcmcia/ sound/ video/ firewire/ hid/ staging/) ;; --filesystem) FILESYSTEM="ext2 ext3 ext4 nilfs2 btrfs reiserfs xfs jfs vfat" for i in $FILESYSTEM; do [ "$(grep $i /tmp/.blkid)" ] && FS="$FS $i" done [ "$(echo $FS | grep btrfs)" ] && FS="$FS crc32c" MODULES_INITRAMFS="$MODULES_INITRAMFS $FS" showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --hostcontroller)HOSTCONTROLLER="$(listmods virtio/virtio_pci) $(listmods ide/ ide-) $(listmods ata/pata pata_acpi) $(listmods scsi/ /sg.ko /st.ko scsi_mod sr_mod sd_mod) $(listmods message/fusion/) $(listmods drivers/block/ virtio_blk nbd pktcdvd sx8 floppy) $(listmods ata/ pata ata_generic) $(listmods drivers/block/sx8) $(listmods ehci-hcd) $(listmods uhci-hcd) $(listmods ohci-hcd) $(listmods virtio_blk)" MODULES_INITRAMFS="$MODULES_INITRAMFS $HOSTCONTROLLER" showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --ati-kms) KMS="radeon" MODULES_INITRAMFS="$KMS $MODULES_INITRAMFS" showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --intel-kms) KMS="i915" MODULES_INITRAMFS="$KMS $MODULES_INITRAMFS" showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --nvidia-kms) KMS="nouveau" MODULES_INITRAMFS="$KMS $MODULES_INITRAMFS" showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --uvesafb) FB="uvesafb" MODULES_INITRAMFS="$FB $MODULES_INITRAMFS" ! [ "$HOOKS" = "1" ] && showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --fbmodule) FB="" for i in $(cat /etc/modprobe.d/framebuffer_blacklist.conf); do i=$(echo $i | sed -e 's/blacklist //g') # check if already in FB array, to avoid double entries if [ "$(cat /proc/modules | grep ^$i)" ]; then ! [ "$(grep -w $FB)" ] && FB="$i" fi done MODULES_INITRAMFS="$FB $MODULES_INITRAMFS " ! [ "$HOOKS" = "1" ] && showlist2 "MODULES" \"$MODULES_INITRAMFS\" | sed -e 's/(\ /(/g' -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --net) if [ "$(showlist2 "MODULES" \($(listmods drivers/net/ irda ppp_generic slhc) $(listmods drivers/usb/net/) $(listmods drivers/staging/) \) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' | grep '8139cp')" ] ; then if [ "$(dmesg | grep 'use 8139too')" ]; then MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc) $(listmods drivers/usb/net/) $(listmods drivers/staging/)" MODULES_EXPORTED="$(echo $MODULES_EXPORTED | sed -e 's/8139cp//g')" BLACKLIST_UDEV="!8139cp" for i in $MODULES_EXPORTED; do BLACKLIST_UDEV="$BLACKLIST_UDEV !$i" done showlist2 "MODULES" \($BLACKLIST_UDEV $MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' else MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc) $(listmods drivers/usb/net/) $(listmods drivers/staging/)" MODULES_EXPORTED="$(echo $MODULES_EXPORTED | sed -e 's/8139too//g')" BLACKLIST_UDEV="!8139too" for i in $MODULES_EXPORTED; do BLACKLIST_UDEV="$BLACKLIST_UDEV !$i" done showlist2 "MODULES" \($BLACKLIST_UDEV $MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' fi else MODULES_EXPORTED="$MODULES_EXPORTED $(listmods drivers/net/ irda ppp_generic slhc) $(listmods drivers/usb/net/) $(listmods drivers/staging/)" BLACKLIST_UDEV="" for i in $MODULES_EXPORTED; do BLACKLIST_UDEV="$BLACKLIST_UDEV !$i" done showlist2 "MODULES" \($BLACKLIST_UDEV $MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' fi ;; --sound) MODULES_EXPORTED="$MODULES_EXPORTED $(listmods pcspkr) $(listmods sound/)" BLACKLIST_UDEV="" for i in $MODULES_EXPORTED; do BLACKLIST_UDEV="$BLACKLIST_UDEV !$i" done showlist2 "MODULES" \($BLACKLIST_UDEV $MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' ;; --usbhost) MODULES_EXPORTED="$MODULES_EXPORTED $(listmods ehci-hcd) $(listmods uhci-hcd) $(listmods ohci-hcd)" BLACKLIST_UDEV="" for i in $MODULES_EXPORTED; do BLACKLIST_UDEV="$BLACKLIST_UDEV !$i" done showlist2 "MODULES" \($BLACKLIST_UDEV $MODULES_EXPORTED\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' ;; --modules) showlist2 "MODULES" \($(listmods modules/)\) | sed -e 's/(\ /(/g' -e 's/\ )/)/g' -e 's/\ \ /\ /g' ;; --hooks) if [ "$HOOKS_DIR" = "" ]; then HOOKS_DIR="/lib/initcpio/install" fi START_HOOKS="base v86d udev keymap autodetect ide pata scsi sata usb fw pcmcia net dmraid usbinput $ADVANCED btrfs filesystems" # remove the ones that don't exist on the system for i in ${START_HOOKS}; do if ! [ -e "${HOOKS_DIR}/$i" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/${i}\ //g") fi done # ide/pata check if [ "${IDE_LEGACY}" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/pata//g") else START_HOOKS=$(echo $START_HOOKS | sed -e "s/ide//g") fi if ! [ "$USBINPUT" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/usbinput//g") fi if ! [ "$KEYMAP" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/keymap//g") fi if ! [ "$UVESAFB" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/v86d//g") fi if ! [ "$DMRAID" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/dmraid//g") fi if ! [ "$USB" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/usb\ //g") fi if ! [ "$FW" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/fw//g") fi if ! [ "$PCMCIA" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/pcmcia//g") fi if ! [ "$NFS" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/net//g") fi if ! [ "$BTRFS" = "1" ]; then START_HOOKS=$(echo $START_HOOKS | sed -e "s/btrfs//g") fi echo "HOOKS=\"$START_HOOKS\"" | sed -e 's/"\ /"/g' -e 's/\ "/"/g' -e 's/\ \ /\ /g' ;; --advanced) ADVANCED_ARCHBOOT="" for i in $ADVANCED; do ADVANCED_ARCHBOOT="$ADVANCED_ARCHBOOT $(echo arch_$i)" done echo "$ADVANCED_ARCHBOOT" ;; esac shift done # cleanup rm /tmp/modules-plain rm /tmp/modules-sorted rm /tmp/modules-stripped rm /tmp/moduleslist # vim: set ts=2 sw=2 noet: