--- trunk/mkinitrd-magellan/mkinitrd.in 2010/12/16 01:24:51 1188 +++ trunk/mkinitrd-magellan/mkinitrd.in 2012/04/02 11:40:49 1793 @@ -94,7 +94,7 @@ echo "Looking for deps of module $1" deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \ - function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \ + function modname(filename) { match(filename, /\/([^\/]+)\.k?o.?g?z?:?$/, ret); return ret[1] } \ function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \ /^.*kernel/ { show(); \ orig=modname($1); dep=""; \ @@ -132,6 +132,7 @@ case "${MODULES} " in *"/${modName}.ko "*) return ;; + *"/${modName}.ko.gz "*) return ;; esac if echo ${builtins} | egrep -q '(^| )'${modName}'( |$)' @@ -164,7 +165,7 @@ done fi - for modExt in o.gz o ko + for modExt in o.gz o ko ko.gz do for modDir in /lib/modules/${kernel}/updates /lib/modules/${kernel} do @@ -252,7 +253,7 @@ modalias=$(cat modalias) for driver in $(modprobe --set-version ${kernel} --show-depends ${modalias} 2>/dev/null| awk '{ print gensub(".*/","","g",$2) }') do - findmodule ${driver%%.ko} + findmodule ${driver%%.*} done popd >/dev/null 2>&1 done @@ -753,7 +754,16 @@ add_initrd 'mount -t proc proc /proc' add_initrd 'mount -t sysfs sysfs /sys' -add_initrd 'mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024' +add_initrd "if [[ -z \$(grep '[[:space:]]/dev[[:space:]]' /proc/mounts | cut -d ' ' -f2) ]]" +add_initrd 'then' +add_initrd ' # many video drivers needed exec access' +add_initrd ' fstype=ramfs' +add_initrd ' # tmpfs was suggested by Greg Kroah-Hartman' +add_initrd " [[ \$(grep '[[:space:]]tmpfs' /proc/filesystems | cut -d \$'\\t' -f2) = tmpfs ]] && fstype=tmpfs" +add_initrd ' # mount devtmpfs if supported' +add_initrd " [[ \$(grep '[[:space:]]devtmpfs' /proc/filesystems | cut -d \$'\\t' -f2) = devtmpfs ]] && fstype=devtmpfs" +add_initrd ' mount -t ${fstype} dev /dev -o exec,nosuid,mode=0755,size=10M' +add_initrd 'fi' [[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /' @@ -773,8 +783,8 @@ for MODULE in ${MODULES} do text="" - module=$(echo ${MODULE} | sed "s|.*/||" | sed "s/.k\?o$//") - fullmodule=$(echo ${MODULE} | sed "s|.*/||") + module=$(echo ${MODULE} | sed "s|.*/||" | sed -e "s/.k\?o.\?g\?z\?$//" -e "s/.gz//") + fullmodule=$(echo ${MODULE} | sed -e "s|.*/||" -e "s/.gz//") options=$(sed -n -e "s/^options[ ][ ]*${module}[ ][ ]*//p" ${modprobeconf} 2>/dev/null) @@ -808,6 +818,10 @@ fi done +# respect rootdelay kernel param +add_initrd 'for i in $(cat /proc/cmdline); do case ${i} in rootdelay=*) ROOTDELAY="${i#*=}";; esac; done' +add_initrd 'if [ ! -z "${ROOTDELAY}" ]; then echo "-- Requested a rootdelay of ${ROOTDELAY} seconds ..."; sleep ${ROOTDELAY};fi' + # lvm support if [ -n "${vg_list}" ] then @@ -849,13 +863,16 @@ # get the right initexec add_initrd "INITEXEC=\"${INITEXEC}\"" # support init=* from cmdline -add_initrd 'for i in $(cat /proc/cmdline); do if [[ ${i} = init=* ]]; then INITEXEC=${i/init=}; fi; done' +add_initrd 'for i in $(cat /proc/cmdline); do case ${i} in init=*) INITEXEC="${i#*=}";; esac; done' add_initrd 'echo "-- Mounting sysroot ..."' add_initrd '. /etc/rootdev' add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' add_initrd 'mount /sysroot || ash' +# use devtmpfs if supported +add_initrd "if [ \"\$(grep devtmpfs /proc/filesystems | cut -d$'\t' -f2)\" = \"devtmpfs\" ]; then mount -t devtmpfs dev /sysroot/dev;fi" + # unset hotplug event-manager add_initrd 'echo > /proc/sys/kernel/hotplug' @@ -863,13 +880,13 @@ add_initrd 'echo 3 > /proc/sys/kernel/printk' add_initrd 'BREAK_ENABLED=no' -add_initrd 'for i in $(cat /proc/cmdline); do if [[ ${i} = break ]]; then BREAK_ENABLED=yes; fi; done' -add_initrd 'if [[ ${BREAK_ENABLED} = yes ]]; then echo "-- Break requested, type 'exit' to resume operation ..."; ash; fi' +add_initrd 'for i in $(cat /proc/cmdline); do case ${i} in break) BREAK_ENABLED=yes;; esac; done' +add_initrd 'if [ "${BREAK_ENABLED}" = "yes" ]; then echo "-- Break requested, type 'exit' to resume operation ..."; ash; fi' add_initrd 'echo "-- Switching to real sysroot ..."' -add_initrd 'umount /dev' -add_initrd 'umount /sys' -add_initrd 'umount /proc' +add_initrd 'mount --move /dev /sysroot/dev' +add_initrd 'mount --move /sys /sysroot/sys' +add_initrd 'mount --move /proc /sysroot/proc' [[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot ${INITEXEC} $@ /sysroot/dev/console' if [[ ${IMAGE_TYPE} = loopback ]] @@ -893,6 +910,10 @@ if [ -x /usr/bin/strip ] && [[ ${NOSTRIP} = false ]] then /usr/bin/strip -g ${verbose} ${MODULE} -o ${DEST}/lib/$(basename ${MODULE}) || die + # handle gzip compressed modules right + elif [[ ${MODULE##*.} = gz ]] + then + zcat ${verbose} ${MODULE} > ${DEST}/lib/$(basename ${MODULE} .gz) || die else cp ${verbose} -a ${MODULE} ${DEST}/lib || die fi