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

93 lines
2.0 KiB
Bash

#!/bin/sh -e
### BEGIN INIT INFO
# Provides: kmod
# Required-Start:
# Required-Stop:
# Should-Start: checkroot
# Should-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Load the modules listed in /etc/modules.
# Description: Load the modules listed in /etc/modules.
### END INIT INFO
# Silently exit if the kernel does not support modules.
[ -f /proc/modules ] || exit 0
[ -x /sbin/modprobe ] || exit 0
[ -f /etc/default/rcS ] && . /etc/default/rcS
. /lib/lsb/init-functions
PATH='/sbin:/bin'
case "$1" in
start)
;;
stop|restart|reload|force-reload)
log_warning_msg "Action '$1' is meaningless for this init script"
exit 0
;;
*)
log_success_msg "Usage: $0 start"
exit 1
esac
load_module() {
local module args
module="$1"
args="$2"
if [ "$VERBOSE" != no ]; then
log_action_msg "Loading kernel module $module"
modprobe $module $args || true
else
modprobe $module $args > /dev/null 2>&1 || true
fi
}
modules_files() {
local modules_load_dirs='/etc/modules-load.d /run/modules-load.d /usr/local/lib/modules-load.d /usr/lib/modules-load.d /lib/modules-load.d'
local processed=' '
local add_etc_modules=true
for dir in $modules_load_dirs; do
[ -d $dir ] || continue
for file in $(run-parts --list --regex='\.conf$' $dir 2> /dev/null || true); do
local base=${file##*/}
if echo -n "$processed" | grep -qF " $base "; then
continue
fi
if [ "$add_etc_modules" -a -L $file \
-a "$(readlink -f $file)" = /etc/modules ]; then
add_etc_modules=
fi
processed="$processed$base "
echo $file
done
done
if [ "$add_etc_modules" ]; then
echo /etc/modules
fi
}
if [ "$VERBOSE" = no ]; then
log_action_begin_msg 'Loading kernel modules'
fi
files=$(modules_files)
if [ "$files" ] ; then
grep -h '^[^#]' $files |
while read module args; do
[ "$module" ] || continue
load_module "$module" "$args"
done
fi
if [ "$VERBOSE" = no ]; then
log_action_end_msg 0
fi