summaryrefslogtreecommitdiffstats
path: root/package/base-files/default/sbin/mount_root
blob: c8edaaa2fa1e913812b9fcc30a07c85473257dbd (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
#!/bin/sh
. /etc/nvram.sh
is_clean() {
	OFFSET="$((0x$(dd if=/dev/mtdblock/1 bs=1 skip=$((0x14)) count=2 2>&- | hexdump | grep 0000000 | cut -d ' ' -f 2) - 1))"
	dd if=/dev/mtdblock/1 bs=1 skip=$OFFSET count=1 2>&- | hexdump -v | grep ' 0000' > /dev/null && return 255 || return 0
}

if [ "$1" != "failsafe" ]; then 
	mount | grep jffs2 >&-
	if [ $? = 0 ] ; then
		if [ $(cat /proc/mtd | wc -l) = 6 ]; then
			echo 5 > /proc/sys/diag
			mtd unlock linux
			mtd erase OpenWrt
			jffs2root --move
		else
			mtd unlock rootfs
			mount -o remount,rw /dev/root /
		fi
	else
		if [ -z "$(nvram get no_root_swap)" ]; then
			is_clean || {
				mtd erase OpenWrt
				jffs2root --clean
			}
			mtd unlock OpenWrt
			mount -t jffs2 /dev/mtdblock/4 /jffs
			pivot_root /jffs /jffs/rom
			mount none /proc -t proc
			mount none /dev -t devfs
			umount /rom/proc rom/dev >&-
		fi
	fi
fi
mount none /tmp -t tmpfs -o nosuid,nodev,mode=1777,size=50%
mkdir -p /dev/pts
mount none /dev/pts -t devpts