You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
genkernel_fork/generic/modprobe

161 lines
2.5 KiB

#!/bin/ash
#KV=`uname -r`
#KMAJOR=`echo ${KV} | cut -d. -f1`
#KMINOR=`echo ${KV} | cut -d. -f2`
#INSMOD="insmod.static"
#if [ "${KMINOR}" -gt "4" ]
#then
# KEXT=".ko"
#else
# KEXT=".o"
#fi
. /etc/initrd.defaults
usage()
{
echo "modprobe gentoo script v1.0"
echo "Usage:"
echo " modprobe moduleprefix"
echo ""
echo "Ex:"
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 [ "$#" != "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 doesn't work like we expect, let's add a grep to it
find /lib/modules | grep "${1}${KSUFF}"
}
modprobe2()
{
local x
local deps
local real_path
local modlist
local ret
if [ "$#" != "1" ]
then
echo "modprobe(): improper usage"
exit 1
fi
real_path=`real_mod_path ${1}`
if [ "${real_path}" = "" -o "${real_path}" = " " ]
then
echo "no such module found"
exit 1
fi
modlist=`modules_dep_list ${1}`
if [ "${modlist}" != "" -a "${modlist}" != " " ]
then
deps=`strip_mod_paths ${modlist}`
else
deps=""
fi
# echo "$1 -- DEPS='${deps}'"
# 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
# echo "loading dep: ${x}"
modprobe2 "${x}"
fi
else
filler=1
# echo "skipping ${x}, module already loaded by us"
fi
done
# echo "running insmod on '${real_path}'"
${INSMOD} ${real_path} > /dev/null 2>&1
ret=$?
if [ "$ret" -eq "0" ]
then
echo "module ${real_path} loaded"
fi
return $ret
}
if [ "$#" != "1" ]
then
usage
fi
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