diff options
Diffstat (limited to 'package/base-files/brcm-2.6')
| -rwxr-xr-x | package/base-files/brcm-2.6/bin/firstboot | 90 | ||||
| -rwxr-xr-x | package/base-files/brcm-2.6/etc/preinit | 11 | ||||
| -rwxr-xr-x | package/base-files/brcm-2.6/sbin/mount_root | 38 | 
3 files changed, 139 insertions, 0 deletions
| diff --git a/package/base-files/brcm-2.6/bin/firstboot b/package/base-files/brcm-2.6/bin/firstboot new file mode 100755 index 000000000..28189780b --- /dev/null +++ b/package/base-files/brcm-2.6/bin/firstboot @@ -0,0 +1,90 @@ +#!/bin/sh +# $Id$ + +rom=$(awk '/squashfs/ {print $2}' /proc/mounts) +jffs=$(awk '/jffs2/ {print $2}' /proc/mounts) + +dupe() { # <new_root> <old_root> +	cd $1 +	echo -n "creating directories... " +	{ +		cd $2  +		find . -xdev -type d +		echo "./dev ./jffs ./mnt ./proc ./tmp ./sys" +		# xdev skips mounted directories +		cd $1  +	} | xargs mkdir -p +	echo "done" + +	echo -n "setting up symlinks... " +	for file in $(cd $2; find . -xdev -type f;); do +		case "$file" in +		./rom/note) ;; #nothing +		./etc/config*|\ +		./etc/resolv.conf|\ +		./usr/lib/ipkg/info) cp -af $2/$file $file;; +		*) ln -sf /rom/${file#./*} $file;; +		esac +	done +	for file in $(cd $2; find . -xdev -type l;); do +		cp -af $2/${file#./*} $file +	done +	echo "done" +} + +pivot() { # <new_root> <old_root> +	mount -o move /proc $1/proc && \ +	pivot_root $1 $1$2 && { +		mount -o move $2/dev /dev +		mount -o move $2/tmp /tmp +		mount -o move $2/sys /sys +		return 0 +	} +} + +mountdp() { # <device> <mount_point> <ignored> <fs> +        dev=$1; mnt=$2; shift 2; opt=$* +	mount $dev $mnt $opt +	dupe $mnt $rom +	pivot $mnt /rom +} + +ramoverlay() { +	mkdir -p /tmp/root +	mountdp /tmp/root /mnt -o bind +} + +[ "${0##*/}" = "firstboot" ] && { +	[ -z "$rom" ] && { +		echo "You do not have a squashfs partition; aborting" +		echo "(firstboot cannot be run on jffs2 based firmwares)" +		exit 1 +	} + +	[ "$1" = "switch2jffs" ] && { +		mtd erase OpenWrt +		mount -o remount,ro none / # try to avoid fs changing while copying +		mount -o bind / /mnt +		mount /dev/mtdblock/4 /rom/jffs -t jffs2 +		echo -n "copying files ... " +		cp -a /mnt/* /rom/jffs +		umount /mnt +		echo "done" +		pivot /rom /mnt +		mount -o move /mnt /tmp/root +		pivot /jffs /rom +		jffs2root --clean +		exit 0 +	} + +	# script run manually +	[ \! -z "$jffs" ] && { +		echo "firstboot has already been run" +		echo "jffs2 partition is mounted, only resetting files" +		dupe $jffs $rom +		exit 0 +	} + +	mtd erase OpenWrt +	mountdp /dev/mtdblock/4 /jffs -t jffs2 +} diff --git a/package/base-files/brcm-2.6/etc/preinit b/package/base-files/brcm-2.6/etc/preinit new file mode 100755 index 000000000..5b676ca3a --- /dev/null +++ b/package/base-files/brcm-2.6/etc/preinit @@ -0,0 +1,11 @@ +#!/bin/sh +export PATH=/bin:/sbin:/usr/bin:/usr/sbin +mount none /proc -t proc + +[ -f /etc/preinit.arch ] && . /etc/preinit.arch +[ -z "$FAILSAFE" ] || { +	echo /bin/true > /proc/sys/kernel/hotplug +	telnetd -l /bin/login <> /dev/null 2>&1 +} +mount_root ${FAILSAFE:+failsafe} +exec /sbin/init diff --git a/package/base-files/brcm-2.6/sbin/mount_root b/package/base-files/brcm-2.6/sbin/mount_root new file mode 100755 index 000000000..88a836c80 --- /dev/null +++ b/package/base-files/brcm-2.6/sbin/mount_root @@ -0,0 +1,38 @@ +#!/bin/sh +is_dirty() { +	grep Broadcom /proc/cpuinfo >&- || return 1 +	OFFSET="$(($(hexdump -v /dev/mtdblock/1 -s 20 -n 2 -e '"%d"')-1))" +	return $(hexdump -v /dev/mtdblock/1 -s $OFFSET -n 1 -e '"%d"') +} + +size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo) +mount none /tmp -t tmpfs -o size=$size + +if [ "$1" != "failsafe" ]; then  +	mtd unlock linux +	mount | grep jffs2 >&- +	if [ $? = 0 ] ; then +		if [ $(cat /proc/mtd | wc -l) = 6 ]; then +			mtd erase OpenWrt +			jffs2root --move +		else +			mount -o remount,rw /dev/root / +		fi +	else +		. /bin/firstboot +		is_dirty  +		[ $? != 0 ] && { +			echo "switching to jffs2" +			mount /dev/mtdblock/4 /jffs -t jffs2 +			pivot /jffs /rom +		} || { +			echo "jffs2 unusable; using ramdisk" +			ramoverlay +		} +	fi +fi + +mount none /tmp -t tmpfs -o remount,nosuid,nodev,mode=1777 +mkdir -p /dev/pts +mount none /dev/pts -t devpts +mount -t sysfs none /sys 2>&- | 
