#!/bin/ash # Apparently, this is required for proper functionality with busybox 1.1.3 # Check out bug #197730 for more details. . /etc/initrd.defaults usage() { echo 'Usage:' echo ' modprobe moduleprefix' echo echo 'Example:' echo ' modprobe eepro100' echo echo 'Note: Do not pass the suffix to modprobe!' exit 1 } # Pass module name to this function modules_dep_list() { if [ "$#" -lt '1' ] then echo 'modules_dep_list(): Improper usage!' exit 1 fi cat /lib/modules/${KV}/modules.dep | grep /"${1}${KSUFF}:" | cut -d':' -f2 } # Pass module deps list strip_mod_paths() { local x local ret local myret [ "$#" -lt '1' ] && return for x in ${*} do ret=`basename ${x} | cut -d. -f1` myret="${myret} ${ret}" done echo "${myret}" } LOADED_MODULES='' is_module_already_loaded() { local x if [ "$#" != '1' ] then echo 'is_module_already_loaded(): Improper usage!' fi for x in ${LOADED_MODULES} do if [ "${x}" = "${1}" ] then # Yep, module is loaded return 0 fi done return 1 } real_mod_path() { # Find -name is no good since the return status is always zero find "/lib/modules/${KV}" | grep /"${1}${KSUFF}" } modprobe2() { local x local deps local real_path local modlist local ret local echoAppend local echoFlags if [ "$#" -lt '1' ] then usage exit 1 fi real_path=`real_mod_path ${1}` if [ "${real_path}" = '' -o "${real_path}" = ' ' ] then [ "${2}" = '-n' ] && echo -n " -> $1" echo ' module not found.' exit 2 fi modlist=`modules_dep_list ${1}` if [ "${modlist}" != '' -a "${modlist}" != ' ' ] then deps=`strip_mod_paths ${modlist}` else deps='' fi # Make sure we don't do any endless loops! LOADED_MODULES="${LOADED_MODULES} ${1}" for x in ${deps} do if ! is_module_already_loaded ${x} then if [ "${x}" != '' -a "${x}" != ' ' ] then modprobe2 "${x}" -n fi else filler=1 fi done ${INSMOD} ${real_path} > /dev/null 2>&1 ret=$? if [ ${ret} -eq 0 ] then echoAppend=' loaded.' [ "${2}" = '-n' ] && echoFlags='-n' && echoAppend=', ' echo ${echoFlags} "${1}${echoAppend}" fi return $ret } if [ "$#" -lt '1' ] then usage fi [ -f '/modules.cache' ] || touch /modules.cache for x in `cat /modules.cache` do LOADED_MODULES="${LOADED_MODULES} ${x}" done modprobe2 ${1} modprobe_ret=$? [ -f '/modules.cache' ] && rm -f /modules.cache > /dev/null 2>&1 for x in ${LOADED_MODULES} do echo $x >> /modules.cache done exit $modprobe_ret