summaryrefslogtreecommitdiff
path: root/packages/nslu2-binary-only/unslung-rootfs/linuxrc
diff options
context:
space:
mode:
Diffstat (limited to 'packages/nslu2-binary-only/unslung-rootfs/linuxrc')
-rwxr-xr-xpackages/nslu2-binary-only/unslung-rootfs/linuxrc134
1 files changed, 36 insertions, 98 deletions
diff --git a/packages/nslu2-binary-only/unslung-rootfs/linuxrc b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
index af694bc68d..d8a0e5d06c 100755
--- a/packages/nslu2-binary-only/unslung-rootfs/linuxrc
+++ b/packages/nslu2-binary-only/unslung-rootfs/linuxrc
@@ -4,101 +4,46 @@
# **** UNLESS YOU REALLY KNOW *EXACTLY* WHAT YOU ARE DOING. ****
-# Determine the desired rootfs based on user flag files.
-
-if [ -f /.sda1root ] ; then
- /bin/echo "Preferred root device is /dev/sda1 (disk 1)"
- mounted=/mnt
- prefroot=sda1
-elif [ -f /.sda2root ] ; then
- /bin/echo "Preferred root device is /dev/sda2 (disk 1)"
- mounted=/mnt
- prefroot=sda2
-elif [ -f /.sdb1root ] ; then
- /bin/echo "Preferred root device is /dev/sdb1 (disk 2)"
- mounted=/mnt
- prefroot=sdb1
-elif [ -f /.sdb2root ] ; then
- /bin/echo "Preferred root device is /dev/sdb2 (disk 2)"
- mounted=/mnt
- prefroot=sdb2
-elif [ -f /.nfsroot ] ; then
- /bin/echo "Preferred root device is NFS"
- mounted=/mnt
- prefroot=nfsroot
-else
- /bin/echo "Preferred root device is jffs2"
- mounted=
- prefroot=jffs2
-fi
-
-
-# Perform prepatory tasks, and determine whether the desired rootfs is viable.
+# Perform prepatory tasks, and determine whether an alternate rootfs is viable.
/bin/mount -t proc proc /proc
-if [ $prefroot = "sda1" -o $prefroot = "sda2" -o $prefroot = "sdb1" -o $prefroot = "sdb2" ] ; then
- /bin/echo "Sleeping while waiting for disk..."
- cnt=20
- while [ $cnt -gt 0 ] ; do
- echo -ne "\r$cnt "
- sleep 1
- [ $prefroot = "sda1" ] && [ -f /proc/hd_conn ] && cnt=0
- [ $prefroot = "sda2" ] && [ -f /proc/hd_conn ] && cnt=0
- [ $prefroot = "sdb1" ] && [ -f /proc/hd2_conn ] && cnt=0
- [ $prefroot = "sdb2" ] && [ -f /proc/hd2_conn ] && cnt=0
- cnt=`expr $cnt - 1`
- done
- echo
- /bin/mount -rt ext3 /dev/$prefroot /mnt
- if [ -L /mnt/sbin/init -o -x /mnt/sbin/init -o \
- -L /mnt/bin/init -o -x /mnt/bin/init ] ; then
- /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
- else
- /bin/umount /mnt
- /bin/echo "Can't find valid rootfs on /dev/$prefroot, using jffs2 ..."
- mounted=
- prefroot=jffs2
+echo "1" > /proc/sys/kernel/panic
+
+/bin/echo "Sleeping while waiting for disk..."
+cnt=20
+while [ $cnt -gt 0 ] ; do
+ echo -ne "\r$cnt "
+ sleep 1
+ [ -e /.sda1root -a -f /proc/hdd_sda ] && cnt=0
+ [ -e /.sdb1root -a -f /proc/hdd_sdb ] && cnt=0
+ cnt=`expr $cnt - 1`
+done
+echo
+
+sleep 5
+
+mounted=
+
+for prefroot in sda1 sdb1 ; do
+ if [ -z "$mounted" -a -e /.${prefroot}root ] ; then
+ if /bin/mount -rt ext3 /dev/$prefroot /mnt ; then
+ if [ -e /mnt/.${prefroot}root -a -x /mnt/bin/init ] ; then
+ /bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
+ mounted=/mnt
+ else
+ /bin/umount /mnt
+ /bin/echo "Can't find valid rootfs on /dev/$prefroot ..."
+ fi
fi
-fi
-
-if [ $prefroot = "nfsroot" ] ; then
-
- sysconflen=`/bin/dd if=/dev/mtd1 bs=4 count=1 2>/dev/null | /usr/bin/hexdump -n 6 -e '"%02d"'`
- ipaddr=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep ip_addr | sed -e s/ip_addr=//`
- netmask=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep netmask | sed -e s/netmask=//`
- gateway=`/bin/dd if=/dev/mtd1 bs=1 count=$sysconflen skip=4 2>/dev/null | grep gateway | sed -e s/gateway=//`
-
- /sbin/insmod ixp400
- /sbin/insmod ixp425_eth
- /sbin/ifconfig ixp0 up $ipaddr netmask $netmask
- /sbin/route add default gw $gateway
-
- /sbin/ifconfig lo up 127.0.0.1
+ fi
+done
- # The nfsrootloc and nfsrootopts vars can be overridden here.
- . /.nfsroot
-
- /bin/mount $nfsrootopts $nfsrootloc /mnt
-
- if [ -L /mnt/sbin/init -o -x /mnt/sbin/init -o \
- -L /mnt/bin/init -o -x /mnt/bin/init ] ; then
- /bin/echo "Root filesystem will be mounted from an NFS root ..."
- mounted=/mnt
- else
- /bin/umount /mnt
- /bin/echo "Can't find valid NFS rootfs, using jffs2 ..."
- mounted=
- prefroot=jffs2
- fi
-fi
-
-if [ $prefroot = "jffs2" ] ; then
- /bin/echo "Root filesystem will be mounted from /dev/mtdblock4 ..."
- mounted=
+if [ -z "$mounted" ] ; then
+ /bin/echo "Can't find valid rootfs, using ramdisk ..."
+ mounted=
fi
-
/bin/umount /proc
# Pivot to the desired rootfs and run the initial executable.
@@ -107,17 +52,10 @@ if [ -n "$mounted" ] ; then
cd $mounted
- if [ -x ./sbin/init -o -L ./sbin/init ] ; then
- runboot=/sbin/init
- elif [ -x ./bin/init -o -L ./bin/init ] ; then
- runboot=/bin/init
- else
- runboot=/bin/sh
- fi
-
+ /bin/echo "Pivoting to external rootfs ..."
/sbin/pivot_root . initrd
- exec /usr/sbin/chroot . $runboot < /dev/console 1> /dev/console 2> /dev/console
+ exec /usr/sbin/chroot . /bin/init < /dev/console 1> /dev/console 2> /dev/console
else
@@ -125,7 +63,7 @@ else
fi
-/bin/echo "Can't chroot to $prefroot, using jffs2 ..."
+/bin/echo "Can't pivot to external rootfs, using ramdisk ..."
exec /bin/init
# Last-resort fall-back - this should never be reached.