From f7bb0255446fd92c6fb186456c988fca3d077f35 Mon Sep 17 00:00:00 2001 From: fake Date: Sun, 9 Jul 2006 18:07:54 +0000 Subject: [PATCH] fake: rockinitrd: use modprobe, add *all* dependant modules to initrd. [2006070919334787680] (https://www.rocklinux.net/submaster) git-svn-id: http://www.rocklinux.org/svn/rock-linux/trunk@7720 c5f82cb5-29bc-0310-9cd0-bff59a50e3bc --- package/base/rockinitrd/initrd_essential.txt | 2 +- package/base/rockinitrd/mkinitrd.sh | 42 ++++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/package/base/rockinitrd/initrd_essential.txt b/package/base/rockinitrd/initrd_essential.txt index 014ad7c2c..557a59d83 100644 --- a/package/base/rockinitrd/initrd_essential.txt +++ b/package/base/rockinitrd/initrd_essential.txt @@ -4,7 +4,7 @@ /bin/ls /bin/ls /sbin/pivot_root /sbin/pivot_root /sbin/insmod /sbin/insmod -/sbin/insmod.old /sbin/insmod.old +/sbin/modprobe /sbin/modprobe /bin/mount /bin/mount /bin/umount /bin/umount /usr/bin/chroot /usr/bin/chroot diff --git a/package/base/rockinitrd/mkinitrd.sh b/package/base/rockinitrd/mkinitrd.sh index d0be58e32..4dcc80154 100644 --- a/package/base/rockinitrd/mkinitrd.sh +++ b/package/base/rockinitrd/mkinitrd.sh @@ -69,20 +69,38 @@ case ${initrdfs} in ;; esac +get_module_dependencies() { + module="${1}" + deps=`/sbin/modinfo -F depends ${module} 2>/dev/null | tr ',' ' '` + if [ -n "${deps}" ] ; then + for dep in ${deps} ; do + echo "`get_module_dependencies ${dep}`" + done + fi + echo "${module}"; +} + add_module_to_initrd() { - module="${1}" + # adds a module and all it's dependencies to the initrd + module_name="${1}" parameter="${2}" - module=${module/.ko/} # just in case, shouldn't be - module="`find ${rootdir}/lib/modules/${kernel} -name "${module}.o" -o -name "${module}.ko"`" - [ -f "${targetdir}/${module}" ] && return # skip dupes - echo "Adding ${module}." - mkdir -p ${targetdir}/${module%/*} - cp ${module} ${targetdir}/${module} - echo "/sbin/insmod ${module} ${parameter}" >> ${targetdir}/etc/conf/kernel + module_name=${module_name/.ko/} # just in case, shouldn't be + + for dependant_module in `get_module_dependencies ${module_name} | sort | uniq` ; do + module="`find ${rootdir}/lib/modules/${kernel} -name "${dependant_module}.o" -o -name "${dependant_module}.ko"`" + [ -f "${targetdir}/${module}" ] && return # skip dupes + echo "Adding ${module}." + mkdir -p ${targetdir}/${module%/*} + cp ${module} ${targetdir}/${module} + done + + echo "/sbin/modprobe ${module_name} ${parameter}" >> ${targetdir}/etc/conf/kernel } echo "Creating ${initrd_img} ..." mkdir -p ${targetdir}/etc/conf +mkdir -p ${targetdir}/lib/modules/${kernel} +cp ${rootdir}/lib/modules/${kernel}/modules.dep ${targetdir}/lib/modules/${kernel} if [ "${empty}" = 0 ] ; then grep '^modprobe ' ${rootdir}/etc/conf/kernel | grep -v 'no-initrd' | \ sed 's,[ ]#.*,,' | \ @@ -93,14 +111,6 @@ if [ "${empty}" = 0 ] ; then echo "$0: Please either adjust /etc/conf/kernel or the configuration for the kernel V${kernel}" >&2 continue fi - modinfo ${module} 2> /dev/null | grep ^depends: | \ - while read a b; do - [ -z "${b}" ] && continue - b="${b//,/ }" - for module in ${b} ; do - add_module_to_initrd "${module}" - done - done add_module_to_initrd "${b}" "${c}" done fi