module_is_host_only() {
local _mod=$1
- local _modenc a i
+ local _modenc a i _k _s _v _aliases
_mod=${_mod##*/}
_mod=${_mod%.ko}
_modenc=${_mod//-/_}
# this covers the case, where a new module is introduced
# or a module was renamed
# or a module changed from builtin to a module
+
if [[ -d /lib/modules/$kernel_current ]]; then
# if the modinfo can be parsed, but the module
# is not loaded, then we can safely return 1
modinfo -F filename "$_mod" &>/dev/null && return 1
fi
- # Finally check all modalias, if we install for a kernel
- # different from the current one
- for a in $(modinfo -k $kernel -F alias $_mod 2>/dev/null); do
+ _aliases=$(modinfo -k $kernel -F alias $_mod 2>/dev/null)
+
+ # if the module has no aliases, install it
+ [[ $_aliases ]] || return 0
+
+ # finally check all modalias
+ for a in $_aliases; do
for i in "${!host_modalias[@]}"; do
[[ $i == $a ]] && return 0
done
done
+
fi
return 1
rm -f -- "$initdir/.modalias"
+ while read _k _s _v; do
+ [ "$_k" != "name" -a "$_k" != "driver" ] && continue
+ host_modalias["$_v"]=1
+ done </proc/crypto
+
# check /proc/modules
declare -A host_modules
while read m rest; do
_found=0
while read _k _s _v; do
[ "$_k" != "name" -a "$_k" != "driver" ] && continue
- [ "$_k" = "driver" ] && _v=$(str_replace "$_v" "_" "-")
[ "$_v" != "$_module" ] && continue
_found=1
break