1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2025-04-21 12:27:27 +03:00

unified preinit environment

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@7173 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
mbm
2007-05-10 14:37:47 +00:00
parent c5eea72dc5
commit de0bb1d6c4
14 changed files with 49 additions and 343 deletions

View File

@@ -1,128 +0,0 @@
#!/bin/sh
# $Id$
. /etc/functions.sh
partname="rootfs_data"
mtdpart="$(find_mtd_part $partname)"
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"
# 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*|\
./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/jffs /jffs 2>&-
return 0
}
}
fopivot() { # <rw_root> <ro_root> <dupe?>
root=$1
{
mount -t mini_fo -o base=/,sto=$1 $1 /mnt 2>&- && root=/mnt
} || {
[ "$3" = "1" ] && {
mount | grep "on $1 type" 2>&- 1>&- || mount -o bind $1 $1
dupe $1 $rom
}
}
pivot $root $2
}
ramoverlay() {
mkdir -p /tmp/root
fopivot /tmp/root /rom 1
}
# invoked as an executable
[ "${0##*/}" = "firstboot" ] && {
[ -z "$mtdpart" ] && {
echo "MTD partition not found."
exit 1
}
[ -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 "$partname"
# try to avoid fs changing while copying
mount -o remount,ro none / 2>&-
# copy ramoverlay to jffs2
mount "$mtdpart" /rom/jffs -t jffs2
echo -n "copying files ... "
cp -a /tmp/root/* /rom/jffs 2>&-
echo "done"
# switch back to squashfs (temporarily)
# and park the ramdisk ontop of /tmp/root
pivot /rom /mnt
mount -o move /mnt /tmp/root
# /jffs is the overlay
# /rom is the readonly
fopivot /jffs /rom
# try to get rid of /tmp/root
# this will almost always fail
umount /tmp/root 2>&-
# fs is clean
jffs2root --clean
exit 0
}
# script run manually
[ \! -z "$jffs" ] && {
echo "firstboot has already been run"
echo "jffs2 partition is mounted, only resetting files"
grep mini_fo /proc/filesystems >&-
[ $? != 0 ] && {
dupe $jffs $rom
exit 0
} || {
rm -rf $jffs/* 2>&-
mount -o remount $jffs / 2>&-
exit 0
}
}
mtd erase "$partname"
mount "$mtdpart" /jffs -t jffs2
fopivot /jffs /rom 1
}

View File

@@ -1,15 +0,0 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=95
boot() {
[ -d /tmp/root ] && {
lock /tmp/.switch2jffs
firstboot switch2jffs
lock -u /tmp/.switch2jffs
}
# set leds to normal state
. /etc/diag.sh
set_state done
}

View File

@@ -1,11 +1,12 @@
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
. /etc/functions.sh
. /etc/diag.sh
failsafe_ip() {
ifconfig $ifname 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
}
failsafe() {
lock /tmp/.failsafe
failsafe_ip
echo "0 1 2 3 4 5u*" > /proc/switch/eth0/vlan/0/ports
@@ -23,10 +24,8 @@ failsafe() {
ash --login
}
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
mount none /proc -t proc
size=$(awk '/Mem:/ {l=5242880;print((s=$2/2)<l)?$2-l:s}' /proc/meminfo)
mount none /tmp -t tmpfs -o size=$size
if grep devfs /proc/filesystems > /dev/null; then
mount none /dev -t devfs
M0=/dev/pty/m0
@@ -66,7 +65,7 @@ case "$(cat /proc/diag/model)" in
"ASUS (unknown, BCM4702)") ifname=eth1;;
esac
ifconfig $ifname 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
failsafe_ip
insmod switch-core
insmod switch-robo || insmod switch-adm || rmmod switch-core
@@ -83,14 +82,6 @@ insmod switch-robo || insmod switch-adm || rmmod switch-core
} || netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
sleep 2
eval ${FAILSAFE:+failsafe}
lock -w /tmp/.failsafe
set_state preinit
echo "$HOTPLUG" > /proc/sys/kernel/hotplug
ifconfig $ifname 0.0.0.0 down
mount_root
exec /sbin/init

View File

@@ -1,29 +0,0 @@
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org
. /etc/functions.sh
is_dirty() {
mtdpart="$(find_mtd_part linux)"
grep Broadcom /proc/cpuinfo >&- || return 1
OFFSET="$(($(hexdump -v $mtdpart -s 20 -n 2 -e '"%d"')-1))"
return $(hexdump -v $mtdpart -s $OFFSET -n 1 -e '"%d"')
}
if [ "$1" != "failsafe" ]; then
mtd unlock linux
mount | grep jffs2 >&-
if [ $? = 0 ] ; then
mount -o remount,rw /dev/root /
else
. /bin/firstboot
is_dirty
[ $? != 0 ] && {
echo "switching to jffs2"
mount $(find_mtd_part rootfs_data) /jffs -t jffs2
fopivot /jffs /rom
} || {
echo "jffs2 not ready yet; using ramdisk"
ramoverlay
}
fi
fi