aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorDoug Barton <dougb@FreeBSD.org>2011-07-10 23:47:03 +0000
committerDoug Barton <dougb@FreeBSD.org>2011-07-10 23:47:03 +0000
commitc2d900ef50216a20996c2fee9c6962f4d494d545 (patch)
treea7a059daccfcbc53f50a94cb814178fbc157e4f5 /etc
parent2e32165ce065a92776512e4b7a9e09d86afebd34 (diff)
downloadsrc-c2d900ef50216a20996c2fee9c6962f4d494d545.tar.gz
src-c2d900ef50216a20996c2fee9c6962f4d494d545.zip
Make sure we load kernel modules from the same path as the running kernel
Notes
Notes: svn path=/head/; revision=223917
Diffstat (limited to 'etc')
-rwxr-xr-xetc/rc.d/kld17
1 files changed, 15 insertions, 2 deletions
diff --git a/etc/rc.d/kld b/etc/rc.d/kld
index 946ec6951ce1..cd2fbab9c41e 100755
--- a/etc/rc.d/kld
+++ b/etc/rc.d/kld
@@ -41,11 +41,24 @@ kld_start()
{
[ -n "$kld_list" ] || return
- local _kld
+ local _kernel_path _module_path _kld _path
+
+ _kernel_path=`$SYSCTL_N kern.bootfile`
+ _kernel_path="${_kernel_path%/*}"
+
+ _module_path=`$SYSCTL_N kern.module_path`
+ _module_path="${_module_path#*\;}"
+ _module_path="$_kernel_path `ltr $_module_path \; ' '`"
echo 'Loading kernel modules:'
for _kld in $kld_list ; do
- load_kld -e ${_kld}.ko $_kld
+ for _path in $_module_path ; do
+ if [ -x "${_path}/${_kld}.ko" ]; then
+ load_kld -e ${_kld}.ko ${_path}/${_kld}.ko
+ continue 2
+ fi
+ done
+ warn "${_kld}.ko not found in $_module_path"
done
}