new module adding routine

This commit is contained in:
Tobias Powalowski 2023-10-25 11:23:03 +02:00
parent 628040687c
commit 20491cf8ac
2 changed files with 40 additions and 25 deletions

View file

@ -84,7 +84,16 @@ for i in "${_HOOKS[@]}"; do
done
_install_files
_install_libs
_install_mods "${!_MOD_PATH[@]}"
_MOD_DEPS="$(modinfo -F depends $_MOD_PATH 2>/dev/null | sed -e 's#,# #g' | tr " " "\n" | sort -u) $(modinfo -F softdep $_MOD_PATH 2>/dev/null | sed -e 's#.*: # #g' | tr " " "\n" | sort -u)"
_DEP_COUNT=0
while true; do
_MOD_DEPS="$(echo $_MOD_DEPS $(modinfo -F depends $_MOD_DEPS 2>/dev/null | sed -e 's#,# #g' | tr " " "\n" | sort -u) | tr " " "\n" | sort -u )"
_MOD_DEPS="$(echo $_MOD_DEPS $(modinfo -F softdep $_MOD_DEPS 2>/dev/null | sed -e 's#.*: # #g' | tr " " "\n" | sort -u) | tr " " "\n" | sort -u)"
_DEP_COUNT2="$(echo "$_MOD_DEPS" | wc -w)"
[[ "${_DEP_COUNT}" == "${_DEP_COUNT2}" ]] && break
_DEP_COUNT="${_DEP_COUNT2}"
done
_install_mods $(modinfo -F filename $_MOD_PATH $_MOD_DEPS 2>/dev/null | grep -v builtin | sed -e 's#^/##g' -e 's# /# #g')
ldconfig -r "${_ROOTFS}" &>"${_NO_LOG}" || exit 1
# remove /var/cache/ldconfig/aux-cache for reproducibility
rm -f -- "${_ROOTFS}/var/cache/ldconfig/aux-cache"

View file

@ -84,7 +84,7 @@ _filter_mods() {
[[ "${_MOD_INPUT}" =~ $f ]] && continue 2
done
_MOD_INPUT="${_MOD_INPUT##*/}" _MOD_INPUT="${_MOD_INPUT%.ko*}"
printf '%s\n' "${_MOD_INPUT//-/_}"
printf '%s\n' "${_MOD_INPUT}"
done < <(find "${_MODULE_DIR}" -name '*.ko*' -print0 2>"${_NO_LOG}" | grep -EZz "$@")
(( _COUNT ))
}
@ -102,33 +102,39 @@ _mod() {
# Add a kernel module to the rootfs. Dependencies will be
# discovered and added.
# $1: module name
_CHECK="" _MOD="" _SOFT=() _DEPS=() _FIELD="" _VALUE="" _FW=()
_CHECK="${1%.ko*}" _CHECK="${_CHECK//-/_}"
_CHECK="" _MOD="" _SOFT=() _DEPS=() _FIELD="" _VALUE=""
_CHECK="${1%.ko*}"
# skip expensive stuff if this module has already been added
(( _INCLUDED_MODS["${_CHECK}"] == 1 )) && return
while IFS=':= ' read -r -d '' _FIELD _VALUE; do
case "${_FIELD}" in
filename) # Only add modules with filenames that look like paths (e.g.
#echo $_CHECK
#return
#echo $_MOD_PATH | grep -q $_CHECK && return
_MOD_PATH+="$_CHECK "
#echo $_MOD_PATH | sort -u
#echo $_CHECK
#while IFS=':= ' read -r -d '' _FIELD _VALUE; do
# case "${_FIELD}" in
# filename) # Only add modules with filenames that look like paths (e.g.
# it might be reported as "(builtin)"). We'll defer actually
# checking whether or not the file exists -- any errors can be
# handled during module install time.
if [[ "${_VALUE}" == /* ]]; then
_MOD="${_VALUE##*/}" _MOD="${_MOD%.ko*}"
_MOD_PATH[".${_VALUE}"]=1
_INCLUDED_MODS["${_MOD//-/_}"]=1
fi
;;
depends) IFS=',' read -r -a _DEPS <<< "${_VALUE}"
_map _mod "${_DEPS[@]}"
;;
softdep) read -ra _SOFT <<<"${_VALUE}"
for i in "${_SOFT[@]}"; do
[[ ${i} == *: ]] && continue
_mod "${i}"
done
;;
esac
done < <(modinfo -k "${_KERNELVERSION}" -0 "${_CHECK}" 2>"${_NO_LOG}")
#if [[ "${_VALUE}" == /* ]]; then
#_MOD="${_VALUE##*/}" _MOD="${_MOD%.ko*}"
#echo $_VALUE
# _MOD_PATH+="${_VALUE} "
#_INCLUDED_MODS["${_MOD//-/_}"]=1
#fi
# ;;
# depends) IFS=',' read -r -a _DEPS <<< "${_VALUE}"
# _map _mod "${_DEPS[@]}"
# ;;
# softdep) read -ra _SOFT <<<"${_VALUE}"
# for i in "${_SOFT[@]}"; do
# [[ ${i} == *: ]] && continue
# _mod "${i}"
# done
# ;;
# esac
#done < <(modinfo -k "${_KERNELVERSION}" -0 "${_CHECK}" 2>"${_NO_LOG}")
}
_full_dir() {