summaryrefslogtreecommitdiffstats
path: root/hooks/filesystems
diff options
context:
space:
mode:
Diffstat (limited to 'hooks/filesystems')
-rw-r--r--hooks/filesystems30
1 files changed, 29 insertions, 1 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."