mirror of
https://gitdl.cn/https://github.com/chakralinux/core.git
synced 2025-02-11 06:54:37 +08:00
585 lines
25 KiB
Bash
Executable File
585 lines
25 KiB
Bash
Executable File
#! /bin/sh
|
|
# Autodetection script for scanning /sys for hardware
|
|
# for Archlinux by Tobias Powalowski <tpowa@archlinux.org>
|
|
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 ""
|
|
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
|
|
|
|
# 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 reiserfs xfs jfs vfat"
|
|
for i in $FILESYSTEM; do
|
|
[ "$(grep $i /tmp/.blkid)" ] && FS="$FS $i"
|
|
done
|
|
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 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
|
|
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:
|