blob: 3ae0b2541230fddc486fbe81429da918f5bd6058 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/sh
# **** DO NOT EVEN THINK OF EDITING OR REMOVING THIS FILE ****
# **** UNLESS YOU REALLY KNOW *EXACTLY* WHAT YOU ARE DOING. ****
# Determine the desired rootfs based on user flag files.
if [ -f /.ramdisk ] ; then
/bin/echo "Preferred root device is /dev/ram0 (maintenence)"
mounted=/mnt/tmpmnt
prefroot=maintenence
elif [ -f /.sda1root ] ; then
/bin/echo "Preferred root device is /dev/sda1 (disk 1)"
mounted=/mnt/tmpmnt
prefroot=sda1
elif [ -f /.sda2root ] ; then
/bin/echo "Preferred root device is /dev/sda2 (disk 1)"
mounted=/mnt/tmpmnt
prefroot=sda2
elif [ -f /.sdb1root ] ; then
/bin/echo "Preferred root device is /dev/sdb1 (disk 2)"
mounted=/mnt/tmpmnt
prefroot=sdb1
elif [ -f /.sdb2root ] ; then
/bin/echo "Preferred root device is /dev/sdb2 (disk 2)"
mounted=/mnt/tmpmnt
prefroot=sdb2
elif [ -f /.nfsroot ] ; then
/bin/echo "Preferred root device is NFS"
mounted=/mnt/tmpmnt
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.
/bin/mount -t proc proc /proc
if [ $prefroot = "sda1" -o $prefroot = "sda2" -o $prefroot = "sdb1" -o $prefroot = "sdb2" ] ; then
/bin/echo "Sleeping 10sec while waiting for disk..."
sleep 10
/bin/mount -rt ext3 /dev/$prefroot /mnt/tmpmnt
if [ -L /mnt/tmpmnt/sbin/init -o -x /mnt/tmpmnt/sbin/init -o \
-L /mnt/tmpmnt/bin/init -o -x /mnt/tmpmnt/bin/init ] ; then
/bin/echo "Root filesystem will be mounted from /dev/$prefroot ..."
else
/bin/umount /mnt/tmpmnt
/bin/echo "Can't find valid rootfs on /dev/$prefroot, using jffs2 ..."
mounted=
prefroot=jffs2
fi
fi
if [ $prefroot = "maintenence" ] ; then
/bin/dd if=/dev/zero of=/dev/ram0 bs=1k count=12k 2>/dev/null
/usr/bin/mke2fs -m 0 /dev/ram0 12288
/bin/mount -t ext2 /dev/ram0 /mnt/tmpmnt
( /usr/bin/find . -print0 -mount | /usr/bin/cpio -p -0 -d -m -u /mnt/tmpmnt )
/bin/rm -f /mnt/tmpmnt/linuxrc
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
# The nfsrootloc and nfsrootopts vars can be overridden here.
. /.nfsroot
/bin/mount $nfsrootopts $nfsrootloc /mnt/tmpmnt
if [ -L /mnt/tmpmnt/sbin/init -o -x /mnt/tmpmnt/sbin/init -o \
-L /mnt/tmpmnt/bin/init -o -x /mnt/tmpmnt/bin/init ] ; then
/bin/echo "Root filesystem will be mounted from an NFS root ..."
mounted=/mnt/tmpmnt
else
/bin/umount /mnt/tmpmnt
/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=
fi
/bin/umount /proc
# Pivot to the desired rootfs and run the initial executable.
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
/sbin/pivot_root . initrd
exec /usr/sbin/chroot . $runboot < /dev/console 1> /dev/console 2> /dev/console
else
exec /bin/init
fi
/bin/echo "Can't chroot to $prefroot, using jffs2 ..."
exec /bin/init
# Last-resort fall-back - this should never be reached.
/bin/sh
|