From 20491cf8acca9c67d709c2e7e3a0796b5d9ef4d9 Mon Sep 17 00:00:00 2001 From: Tobias Powalowski Date: Wed, 25 Oct 2023 11:23:03 +0200 Subject: [PATCH] new module adding routine --- usr/bin/archboot-cpio.sh | 11 ++++++- usr/lib/archboot/cpio/cpio.sh | 54 +++++++++++++++++++---------------- 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/usr/bin/archboot-cpio.sh b/usr/bin/archboot-cpio.sh index 039ed808b..854db2b3f 100755 --- a/usr/bin/archboot-cpio.sh +++ b/usr/bin/archboot-cpio.sh @@ -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" diff --git a/usr/lib/archboot/cpio/cpio.sh b/usr/lib/archboot/cpio/cpio.sh index 834e63791..08e59a0f6 100644 --- a/usr/lib/archboot/cpio/cpio.sh +++ b/usr/lib/archboot/cpio/cpio.sh @@ -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() {