diff options
Diffstat (limited to 'abs/core-testing/klibc-udev/load-modules.sh')
-rwxr-xr-x | abs/core-testing/klibc-udev/load-modules.sh | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/abs/core-testing/klibc-udev/load-modules.sh b/abs/core-testing/klibc-udev/load-modules.sh index f0961a7..3d52d6b 100755 --- a/abs/core-testing/klibc-udev/load-modules.sh +++ b/abs/core-testing/klibc-udev/load-modules.sh @@ -4,29 +4,48 @@ # - Aaron Griffin & Tobias Powalowski for Archlinux [ $# -ne 1 ] && exit 1 +MODPROBE="/sbin/modprobe" +RESOLVEALIAS="/bin/resolve-modalias" +USEBLACKLIST="--use-blacklist" +REPLACE="/bin/replace" +MODDEPS="/bin/moddeps" + if [ -f /proc/cmdline ]; then - for cmd in $(cat /proc/cmdline); do - case $cmd in - *=*) eval $cmd ;; - esac - done + for cmd in $(cat /proc/cmdline); do + case $cmd in + disablemodules=*) eval $cmd ;; + load_modules=off) exit ;; + esac + done + #parse cmdline entries of the form "disablemodules=x,y,z" + if [ -n "${disablemodules}" ]; then + BLACKLIST="$(${REPLACE} ${disablemodules} ',')" + fi fi -# get the real names from modaliases -i="$(/bin/moddeps $1)" -# add disablemodules= from commandline to blacklist -k="$(/bin/replace "${disablemodules}" ',')" -j="$(/bin/replace "${k}" '-' '_')" +# sanitize the module names +BLACKLIST="$(${REPLACE} "${BLACKLIST}" '-' '_')" -if [ "${j}" != "" ] ; then - for n in ${i}; do - for o in ${j}; do - if [ "$n" = "$o" ]; then - exit 1 - fi - done - done +if [ -n "${BLACKLIST}" ] ; then + # Try to find all modules for the alias + mods="$($RESOLVEALIAS /lib/modules/$(uname -r)/modules.alias $1)" + # If no modules could be found, try if the alias name is a module name + # In that case, omit the --use-blacklist parameter to imitate normal modprobe behaviour + [ -z "${mods}" ] && $MODPROBE -qni $1 && mods="$1" && USEBLACKLIST="" + [ -z "${mods}" ] && exit + for mod in ${mods}; do + deps="$(${MODDEPS} ${mod})" + [ $? -ne 0 ] && continue + # If the module or any of its dependencies is blacklisted, don't load it + for dep in $deps; do + for blackmod in ${BLACKLIST}; do + [ "${blackmod}" = "${dep}" ] && continue 3 + done + done + $MODPROBE $USEBLACKLIST ${mod} + done +else + $MODPROBE $1 fi -/sbin/modprobe $1 # vim: set et ts=4: |