diff options
-rw-r--r-- | hooks/filesystems | 30 | ||||
-rw-r--r-- | hooks/usb | 8 | ||||
-rw-r--r-- | init | 5 | ||||
-rw-r--r-- | install/udev | 2 | ||||
-rw-r--r-- | mkinitcpio | 3 |
5 files changed, 40 insertions, 8 deletions
diff --git a/hooks/filesystems b/hooks/filesystems index 55d6725..e6d980d 100644 --- a/hooks/filesystems +++ b/hooks/filesystems @@ -1,13 +1,36 @@ # vim: set ft=sh: run_hook () { + isnumeric () + { + i=0; + while [ $i -lt ${#1} ]; do + case ${1:$i:1} in + [0-9A-Fa-f]) i=$(($i+1)); continue;; + *) return 1;; + esac + done + return 0 + } + msg -n ":: Loading root filesystem module..." if [ "x${rootfstype}" != "x" ]; then FSTYPE="${rootfstype}" else if [ ! -e "${root}" ]; then msg "Attempting to create root device '${root}'" + + if [ "x${rootdelay}" != "x" ]; then + msg -n "Waiting for devices to settle..." + /bin/sleep "${rootdelay}" + msg "done." + export rootdelay=0 + fi + dev_t=$( /bin/parseblock "${root}" ) + if isnumeric "${root}"; then + export root="/dev/root" + fi if [ "x${dev_t}" != "x" ]; then /bin/mknod "${root}" b ${dev_t} >/dev/null 2>&1 else @@ -15,7 +38,12 @@ run_hook () echo "ERROR: Failed to parse block device '${root}'" fi fi - eval $( /bin/fstype < "${root}" ) + + if [ -e "${root}" ]; then + eval $( /bin/fstype < "${root}" ) + else + FSTYPE="unknown" + fi if [ "${FSTYPE}" = "unknown" ]; then echo "ERROR: root fs cannot be detected. Try using the rootfstype= kernel parameter." @@ -1,8 +1,8 @@ # vim: set ft=sh: run_hook () { - #allow 'usbdelay' on the kernel param line - msg -n "waiting for usb to settle..." - /bin/sleep ${usbdelay:-5} - msg "done." + #if we have to root delay, default to 5 seconds + # this will be handled by kinit and/or the + # filesystems hook + export rootdelay=${rootdelay:-5} } @@ -12,6 +12,8 @@ read CMDLINE </proc/cmdline export CMDLINE # Used so hooks can override params to kinit +export root="" +export rootdelay="0" export kinit_params="" echo "/bin/modprobe" > /proc/sys/kernel/modprobe @@ -65,6 +67,7 @@ fi if [ "${break}" = "y" ]; then echo ":: Break requested, type 'exit' to resume operation" + echo " NOTE: klibc contains no 'ls' binary, used 'echo *' instead" PS1="ramfs$ " /bin/sh -i fi @@ -79,4 +82,4 @@ fi msg ":: Initramfs Completed - control passing to kinit" echo "/sbin/modprobe" > /proc/sys/kernel/modprobe -exec /bin/kinit "root=${root}" ${kinit_params} < /dev/console > /dev/console +exec /bin/kinit "root=${root}" "rootdelay=${rootdelay}" ${kinit_params} < /dev/console > /dev/null 2>&1 diff --git a/install/udev b/install/udev index a6a75ea..d2c877b 100644 --- a/install/udev +++ b/install/udev @@ -4,7 +4,7 @@ install () { MODULES="" BINARIES="" - FILES=" /etc/udev/udev.conf /lib/udev/modalias_ieee1394" + FILES=" /etc/udev/udev.conf" SCRIPT="udev" add_file /lib/initcpio/udev/udevd /sbin/udevd add_file /lib/initcpio/udev/udevtrigger /sbin/udevtrigger @@ -138,12 +138,13 @@ done if [ "${HAS_MODULES}" == "y" ]; then echo ":: Generating module dependancies" - [ -e /tmp${MODULEDIR}/ ] && rm -r /tmp${MODULEDIR}/ + [ -e /tmp${MODULEDIR}/ ] && rm -rf /tmp${MODULEDIR}/ cp --parents $(grep "file /lib/modules" ${FILELIST} | awk '{print $2}') /tmp/ depmod -b /tmp ${KERNELVERSION} add_file /tmp${MODULEDIR}/modules.dep ${MODULEDIR}/modules.dep add_file /tmp${MODULEDIR}/modules.alias ${MODULEDIR}/modules.alias add_file /tmp${MODULEDIR}/modules.symbols ${MODULEDIR}/modules.symbols + rm -rf /tmp${MODULEDIR}/ fi if [ "x$GENIMG" != "x" ]; then |