add preinit modularization work by Daniel Dickinson (cshore)
SVN-Revision: 19331
This commit is contained in:
parent
35170c4892
commit
56bc02a305
79 changed files with 1449 additions and 438 deletions
|
@ -1,5 +1,6 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2007-2010 OpenWrt.org
|
# Copyright (C) 2007-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
|
@ -298,6 +299,22 @@ define Package/ldconfig/config
|
||||||
endef
|
endef
|
||||||
|
|
||||||
|
|
||||||
|
define ImageConfigOptions
|
||||||
|
mkdir -p $(1)/lib/preinit
|
||||||
|
echo 'pi_suppress_stderr="$(CONFIG_TARGET_PREINIT_SUPPRESS_STDERR)"' >$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'fs_failsafe_wait_timeout=$(if $(CONFIG_TARGET_PREINIT_TIMEOUT),$(CONFIG_TARGET_PREINIT_TIMEOUT),2)' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_init_path=$(if $(CONFIG_TARGET_INIT_PATH),$(CONFIG_TARGET_INIT_PATH),"/bin:/sbin:/usr/bin:/usr/sbin")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_init_env=$(if $(CONFIG_TARGET_INIT_ENV),$(CONFIG_TARGET_INIT_ENV),"")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_init_cmd=$(if $(CONFIG_TARGET_INIT_CMD),$(CONFIG_TARGET_INIT_CMD),"/sbin/init")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_init_suppress_stderr="$(CONFIG_TARGET_INIT_SUPPRESS_STDERR)"' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_ifname=$(if $(CONFIG_TARGET_PREINIT_IFNAME),$(CONFIG_TARGET_PREINIT_IFNAME),"")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_ip=$(if $(CONFIG_TARGET_PREINIT_IP),$(CONFIG_TARGET_PREINIT_IP),"192.168.1.1")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_netmask=$(if $(CONFIG_TARGET_PREINIT_NETMASK),$(CONFIG_TARGET_PREINIT_NETMASK),"255.255.255.0")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_broadcast=$(if $(CONFIG_TARGET_PREINIT_BROADCAST),$(CONFIG_TARGET_PREINIT_BROADCAST),"")' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_preinit_net_messages="$(CONFIG_TARGET_PREINIT_SHOW_NETMSG)"' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
echo 'pi_preinit_no_failsafe_netmsg="$(CONFIG_TARGET_SUPPRESS_FAILSAFE_NETMSG)"' >>$(1)/lib/preinit/00_preinit.conf
|
||||||
|
endef
|
||||||
|
|
||||||
define Build/Prepare
|
define Build/Prepare
|
||||||
mkdir -p $(PKG_BUILD_DIR)
|
mkdir -p $(PKG_BUILD_DIR)
|
||||||
endef
|
endef
|
||||||
|
@ -362,6 +379,7 @@ define Package/base-files/install
|
||||||
ln -sf /tmp $(1)/var
|
ln -sf /tmp $(1)/var
|
||||||
mkdir -p $(1)/etc
|
mkdir -p $(1)/etc
|
||||||
ln -sf /tmp/resolv.conf /tmp/fstab /tmp/TZ $(1)/etc/
|
ln -sf /tmp/resolv.conf /tmp/fstab /tmp/TZ $(1)/etc/
|
||||||
|
$(call ImageConfigOptions,$(1))
|
||||||
$(call Package/base-files/install-target,$(1))
|
$(call Package/base-files/install-target,$(1))
|
||||||
for conffile in $(1)/etc/config/*; do \
|
for conffile in $(1)/etc/config/*; do \
|
||||||
if [ -f "$$$$conffile" ]; then \
|
if [ -f "$$$$conffile" ]; then \
|
||||||
|
|
|
@ -1,98 +1,45 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
. /etc/diag.sh
|
. /etc/diag.sh
|
||||||
|
|
||||||
failsafe_ip() {
|
preinit_essential_hook=
|
||||||
ifconfig $ifname 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
|
preinit_main_hook=
|
||||||
}
|
failsafe_hook=
|
||||||
|
initramfs_hook=
|
||||||
|
preinit_mount_root=
|
||||||
|
|
||||||
failsafe() {
|
pi_ifname=
|
||||||
set_state failsafe
|
pi_ip=192.168.1.1
|
||||||
[ -n "$ifname" ] && grep "$ifname" /proc/net/dev >/dev/null && {
|
pi_broadcast=192.168.1.255
|
||||||
failsafe_ip
|
pi_netmask=255.255.255.0
|
||||||
netmsg 192.168.1.255 "Entering Failsafe!"
|
|
||||||
telnetd -l /bin/login.sh <> /dev/null 2>&1
|
|
||||||
}
|
|
||||||
lock /tmp/.failsafe
|
|
||||||
ash --login
|
|
||||||
}
|
|
||||||
|
|
||||||
mount proc /proc -t proc
|
fs_failsafe_ifname=
|
||||||
mount sysfs /sys -t sysfs
|
fs_failsafe_ip=192.168.1.1
|
||||||
|
fs_failsafe_broadcast=192.168.1.255
|
||||||
|
fs_failsafe_netmask=255.255.255.0
|
||||||
|
|
||||||
size=$(awk '/MemTotal:/ {l=5242880;mt=($2*1024);print((s=mt/2)<l)&&(mt>l)?mt-l:s}' /proc/meminfo)
|
fs_failsafe_wait_timeout=2
|
||||||
mount tmpfs /tmp -t tmpfs -o size=$size,nosuid,nodev,mode=1777
|
|
||||||
|
|
||||||
if grep devfs /proc/filesystems > /dev/null; then
|
pi_suppress_stderr="y"
|
||||||
mount devfs /dev -t devfs
|
pi_init_suppress_stderr="y"
|
||||||
M0=/dev/pty/m0
|
pi_init_path="/bin:/sbin:/usr/bin:/usr/sbin"
|
||||||
M1=/dev/pty/m1
|
pi_init_cmd="/sbin/init"
|
||||||
HOTPLUG=/sbin/hotplug-call
|
|
||||||
|
|
||||||
elif [ -x /sbin/hotplug2 ]; then
|
. /lib/functions/boot.sh
|
||||||
mount -t tmpfs tmpfs /dev -o size=512K
|
|
||||||
mknod /dev/console c 5 1
|
|
||||||
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --no-persistent --set-coldplug-cmd /sbin/udevtrigger
|
|
||||||
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --persistent &
|
|
||||||
M0=/dev/ptmx
|
|
||||||
M1=/dev/ptmx
|
|
||||||
HOTPLUG=
|
|
||||||
|
|
||||||
elif [ -x /sbin/udevd ]; then
|
|
||||||
mount -n -t tmpfs -o mode=0755 udev /dev
|
|
||||||
[ -d /lib/udev/devices ] && cp -af /lib/udev/devices/* /dev/
|
|
||||||
[ -c /dev/console ] || mknod -m 0600 /dev/console c 5 1
|
|
||||||
[ -c /dev/null ] || mknod -m 0666 /dev/null c 1 3
|
|
||||||
/sbin/udevd --daemon --resolve-names=never
|
|
||||||
/sbin/udevadm trigger
|
|
||||||
/sbin/udevadm settle
|
|
||||||
M0=/dev/pty/ptmx
|
|
||||||
M1=/dev/pty/ptmx
|
|
||||||
HOTPLUG=
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -d /dev/pts ] || mkdir -p /dev/pts
|
for pi_source_file in /lib/preinit/*; do
|
||||||
[ -d /dev/shm ] || mkdir -p /dev/shm
|
. $pi_source_file
|
||||||
mount devpts /dev/pts -t devpts
|
done
|
||||||
|
|
||||||
# the shell really doesn't like having stdin/out closed
|
boot_run_hook preinit_essential
|
||||||
# that's why we use /dev/pty/m0 and m1 as replacement
|
|
||||||
# for /dev/console if there's no serial console available
|
|
||||||
dd if=/dev/console of=/dev/null bs=1 count=0 >/dev/null 2>/dev/null && {
|
|
||||||
M0=/dev/console
|
|
||||||
M1=/dev/console
|
|
||||||
}
|
|
||||||
|
|
||||||
exec <$M0 >$M1 2>&0
|
pi_mount_skip_next=false
|
||||||
|
pi_jffs2_mount_success=false
|
||||||
|
pi_failsafe_net_message=false
|
||||||
|
|
||||||
echo "- preinit -"
|
boot_run_hook preinit_main
|
||||||
set_state preinit
|
|
||||||
echo "Press CTRL-C for failsafe"
|
|
||||||
trap 'FAILSAFE=true' INT
|
|
||||||
trap 'FAILSAFE=true' USR1
|
|
||||||
if [ -e /etc/preinit.arch ]; then
|
|
||||||
. /etc/preinit.arch
|
|
||||||
else
|
|
||||||
sleep 2
|
|
||||||
fi
|
|
||||||
echo "$HOTPLUG" > /proc/sys/kernel/hotplug
|
|
||||||
export FAILSAFE
|
|
||||||
eval ${FAILSAFE:+failsafe}
|
|
||||||
lock -w /tmp/.failsafe
|
|
||||||
|
|
||||||
if [ -z "$INITRAMFS" ]; then
|
|
||||||
mount_root
|
|
||||||
[ -f /sysupgrade.tgz ] && {
|
|
||||||
echo "- config restore -"
|
|
||||||
cd /
|
|
||||||
mv sysupgrade.tgz /tmp
|
|
||||||
tar xzf /tmp/sysupgrade.tgz
|
|
||||||
rm -f /tmp/sysupgrade.tgz
|
|
||||||
sync
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "- init -"
|
|
||||||
|
|
||||||
exec /sbin/init
|
|
||||||
fi
|
|
||||||
|
|
10
package/base-files/files/lib/firstboot/05_firstboot_skip
Normal file
10
package/base-files/files/lib/firstboot/05_firstboot_skip
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
check_skip() {
|
||||||
|
if [ "$firsboot_skip_next" = "true" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
46
package/base-files/files/lib/firstboot/10_determine_parts
Normal file
46
package/base-files/files/lib/firstboot/10_determine_parts
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set_mtd_part() {
|
||||||
|
partname="rootfs_data"
|
||||||
|
mtdpart="$(find_mtd_part $partname)"
|
||||||
|
}
|
||||||
|
|
||||||
|
set_rom_part() {
|
||||||
|
rom=$(awk '/squashfs/ {print $2}' /proc/mounts)
|
||||||
|
}
|
||||||
|
|
||||||
|
set_jffs_part() {
|
||||||
|
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts)
|
||||||
|
}
|
||||||
|
|
||||||
|
determine_mtd_part() {
|
||||||
|
set_mtd_part
|
||||||
|
if [ -z "$mtdpart" ]; then
|
||||||
|
echo "MTD partition not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
determine_rom_part() {
|
||||||
|
check_skip || {
|
||||||
|
set_rom_part
|
||||||
|
if [ -z "$rom" ]; then
|
||||||
|
echo "You do not have a squashfs partition; aborting"
|
||||||
|
echo "(firstboot cannot be run on jffs2 based firmwares)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
determine_jffs2_part() {
|
||||||
|
check_skip || {
|
||||||
|
set_jffs_part
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs determine_mtd_part
|
||||||
|
boot_hook_add jffs2reset determine_mtd_part
|
||||||
|
boot_hook_add switch2jffs determine_rom_part
|
||||||
|
boot_hook_add jffs2reset determine_rom_part
|
||||||
|
boot_hook_add switch2jffs determine_jffs2_part
|
||||||
|
boot_hook_add jffs2reset determine_jffs2_part
|
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
no_fo_clear_overlay() {
|
||||||
|
# switch back to squashfs temporarily
|
||||||
|
pivot /rom /mnt
|
||||||
|
|
||||||
|
# get rid of the old overlay
|
||||||
|
umount -l /mnt
|
||||||
|
|
||||||
|
# another umount to get rid of the bind from /tmp/root
|
||||||
|
umount -l /mnt
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add no_fo no_fo_clear_overlay
|
12
package/base-files/files/lib/firstboot/10_reset_has_mini_fo
Normal file
12
package/base-files/files/lib/firstboot/10_reset_has_mini_fo
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
reset_check_for_mini_fo() {
|
||||||
|
if grep -q mini_fo /proc/filesystems; then
|
||||||
|
reset_has_fo=true
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add jffs2reset reset_check_for_mini_fo
|
13
package/base-files/files/lib/firstboot/20_has_mini_fo
Normal file
13
package/base-files/files/lib/firstboot/20_has_mini_fo
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
check_for_mini_fo() {
|
||||||
|
if ! grep -q mini_fo /proc/filesystems; then
|
||||||
|
boot_run_hook no_fo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs check_for_mini_fo
|
15
package/base-files/files/lib/firstboot/20_no_fo_mount_jffs
Normal file
15
package/base-files/files/lib/firstboot/20_no_fo_mount_jffs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
no_fo_mount_jffs() {
|
||||||
|
# initialize jffs2
|
||||||
|
mount "$mtdpart" /jffs -t jffs2 || exit
|
||||||
|
|
||||||
|
# workaround to ensure that union can attach properly
|
||||||
|
sync
|
||||||
|
ls /jffs >/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add no_fo no_fo_mount_jffs
|
14
package/base-files/files/lib/firstboot/20_reset_clear_jffs
Normal file
14
package/base-files/files/lib/firstboot/20_reset_clear_jffs
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
reset_clear_jffs() {
|
||||||
|
[ "$reset_has_fo" = "true" ] && {
|
||||||
|
rm -rf $jffs/* 2>&-
|
||||||
|
mount -o remount $jffs / 2>&-
|
||||||
|
exit 0
|
||||||
|
} || reset_has_fo=false
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add jffs2reset reset_clear_jffs
|
10
package/base-files/files/lib/firstboot/30_is_rootfs_mounted
Normal file
10
package/base-files/files/lib/firstboot/30_is_rootfs_mounted
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
skip_if_rootfs_mounted() {
|
||||||
|
mount "$mtdpart" /rom/jffs -t jffs2 || exit
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs skip_if_rootfs_mounted
|
11
package/base-files/files/lib/firstboot/30_no_fo_pivot
Normal file
11
package/base-files/files/lib/firstboot/30_no_fo_pivot
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
no_fo_pivot() {
|
||||||
|
# switch to the new (empty) jffs2
|
||||||
|
fopivot /jffs /rom 1
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add no_fo no_fo_pivot
|
13
package/base-files/files/lib/firstboot/30_reset_copy_rom
Normal file
13
package/base-files/files/lib/firstboot/30_reset_copy_rom
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
reset_copy_rom() {
|
||||||
|
[ "$reset_has_fo" != "true" ] && {
|
||||||
|
dupe $jffs $rom
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add jffs2reset reset_copy_rom
|
15
package/base-files/files/lib/firstboot/40_copy_ramoverlay
Normal file
15
package/base-files/files/lib/firstboot/40_copy_ramoverlay
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
copy_ramoverlay() {
|
||||||
|
# try to avoid fs changing while copying
|
||||||
|
mount -o remount,ro none / 2>&-
|
||||||
|
# copy ramoverlay to jffs2
|
||||||
|
echo -n "copying files ... "
|
||||||
|
cp -a /tmp/root/* /rom/jffs 2>&-
|
||||||
|
echo "done"
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs copy_ramoverlay
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
no_fo_copy_ramoverlay() {
|
||||||
|
# copy ramoverlay to jffs2, must be done after switching
|
||||||
|
# to the new rootfs to avoid creating opaque directories
|
||||||
|
echo -n "copying files ... "
|
||||||
|
cp -a /tmp/root/* / >/dev/null 2>&1
|
||||||
|
sync
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add no_fo no_fo_ramoverlay
|
17
package/base-files/files/lib/firstboot/50_pivot
Normal file
17
package/base-files/files/lib/firstboot/50_pivot
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
with_fo_pivot() {
|
||||||
|
# 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
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs with_fo_pivot
|
13
package/base-files/files/lib/firstboot/99_10_no_fo_cleanup
Normal file
13
package/base-files/files/lib/firstboot/99_10_no_fo_cleanup
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
no_fo_cleanup() {
|
||||||
|
echo "done"
|
||||||
|
umount -l /jffs
|
||||||
|
umount -l /tmp/root
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add no_fo no_fo_cleanup
|
13
package/base-files/files/lib/firstboot/99_10_with_fo_cleanup
Normal file
13
package/base-files/files/lib/firstboot/99_10_with_fo_cleanup
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
with_fo_cleanup() {
|
||||||
|
# try to get rid of /tmp/root
|
||||||
|
# this will almost always fail
|
||||||
|
mount /tmp/root 2>&-
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add switch2jffs with_fo_cleanup
|
95
package/base-files/files/lib/functions/boot.sh
Normal file
95
package/base-files/files/lib/functions/boot.sh
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
boot_hook_add() {
|
||||||
|
local hook="${1}_hook"
|
||||||
|
local value="$2"
|
||||||
|
local sep=" "
|
||||||
|
|
||||||
|
eval "$hook=\"\${$hook:+\${$hook}\${value:+\$sep}}\$value\""
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_run_hook() {
|
||||||
|
local boot_func
|
||||||
|
for boot_func in $(eval "echo \"\$${1}_hook\""); do
|
||||||
|
$boot_func "$1" "$2"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
find_mtd_part() {
|
||||||
|
local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')"
|
||||||
|
local PREFIX=/dev/mtdblock
|
||||||
|
|
||||||
|
PART="${PART##mtd}"
|
||||||
|
[ -d /dev/mtdblock ] && PREFIX=/dev/mtdblock/
|
||||||
|
echo "${PART:+$PREFIX$PART}"
|
||||||
|
}
|
||||||
|
|
||||||
|
jffs2_ready () {
|
||||||
|
mtdpart="$(find_mtd_part rootfs_data)"
|
||||||
|
magic=$(hexdump $mtdpart -n 4 -e '4/1 "%02x"')
|
||||||
|
[ "$magic" != "deadc0de" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
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/opkg/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 2>&-
|
||||||
|
mount -o move $2/jffs /jffs 2>&-
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fopivot() { # <rw_root> <ro_root> <dupe?>
|
||||||
|
root=$1
|
||||||
|
{
|
||||||
|
if grep -q mini_fo /proc/filesystems; then
|
||||||
|
mount -t mini_fo -o base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt
|
||||||
|
else
|
||||||
|
mount --bind / /mnt
|
||||||
|
mount --bind -o union "$1" /mnt && root=/mnt
|
||||||
|
fi
|
||||||
|
} || {
|
||||||
|
[ "$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
|
||||||
|
mount -t tmpfs root /tmp/root
|
||||||
|
fopivot /tmp/root /rom 1
|
||||||
|
}
|
13
package/base-files/files/lib/preinit/05_mount_skip
Normal file
13
package/base-files/files/lib/preinit/05_mount_skip
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
check_skip() {
|
||||||
|
if [ "$pi_mount_skip_next" = "true" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
20
package/base-files/files/lib/preinit/10_check_for_mtd
Normal file
20
package/base-files/files/lib/preinit/10_check_for_mtd
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
mount_no_mtd() {
|
||||||
|
mtd unlock rootfs
|
||||||
|
mount -o remount,rw /dev/root /
|
||||||
|
}
|
||||||
|
|
||||||
|
check_for_mtd() {
|
||||||
|
check_skip || {
|
||||||
|
grep rootfs_data /proc/mtd >/dev/null 2>/dev/null || {
|
||||||
|
mount_no_mtd && pi_mount_skip_next=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root check_for_mtd
|
||||||
|
|
25
package/base-files/files/lib/preinit/10_essential_fs
Normal file
25
package/base-files/files/lib/preinit/10_essential_fs
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_procfs() {
|
||||||
|
mount proc /proc -t proc
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_sysfs() {
|
||||||
|
mount sysfs /sys -t sysfs
|
||||||
|
}
|
||||||
|
|
||||||
|
calc_tmpfs_size() {
|
||||||
|
pi_size=$(awk '/MemTotal:/ {l=5242880;mt=($2*1024);print((s=mt/2)<l)&&(mt>l)?mt-l:s}' /proc/meminfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_tmpfs() {
|
||||||
|
calc_tmpfs_size
|
||||||
|
mount tmpfs /tmp -t tmpfs -o size=$pi_size,nosuid,nodev,mode=1777
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential do_mount_procfs
|
||||||
|
boot_hook_add preinit_essential do_mount_sysfs
|
||||||
|
boot_hook_add preinit_essential do_mount_tmpfs
|
||||||
|
|
18
package/base-files/files/lib/preinit/10_indicate_failsafe
Normal file
18
package/base-files/files/lib/preinit/10_indicate_failsafe
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
# commands for emitting messages to network in failsafe mode
|
||||||
|
|
||||||
|
indicate_failsafe_led () {
|
||||||
|
set_state failsafe
|
||||||
|
}
|
||||||
|
|
||||||
|
indicate_failsafe() {
|
||||||
|
echo "- failsafe -"
|
||||||
|
preinit_net_echo "Entering Failsafe!\n"
|
||||||
|
indicate_failsafe_led
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add failsafe indicate_failsafe
|
||||||
|
|
52
package/base-files/files/lib/preinit/10_indicate_preinit
Normal file
52
package/base-files/files/lib/preinit/10_indicate_preinit
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
preinit_ip() {
|
||||||
|
# if the preinit interface isn't specified and ifname is set in
|
||||||
|
# preinit.arch use that interface
|
||||||
|
if [ -z "$pi_ifname" ]; then
|
||||||
|
pi_ifname=$ifname
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preinit_ip_deconfig() {
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
ifconfig $pi_ifname 0.0.0.0 down
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preinit_net_echo() {
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
{
|
||||||
|
[ "$pi_preinit_net_messages" = "y" ] || {
|
||||||
|
[ "$pi_failsafe_net_message" = "true" ] &&
|
||||||
|
[ "$pi_preinit_no_failsafe_netmsg" != "y" ]
|
||||||
|
}
|
||||||
|
|
||||||
|
} && netmsg $pi_broadcast "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preinit_echo() {
|
||||||
|
preinit_net_echo $1
|
||||||
|
echo $1
|
||||||
|
}
|
||||||
|
|
||||||
|
pi_indicate_led() {
|
||||||
|
set_state preinit
|
||||||
|
}
|
||||||
|
|
||||||
|
pi_indicate_preinit() {
|
||||||
|
echo "- preinit -"
|
||||||
|
preinit_net_echo "Doing OpenWRT Preinit\n"
|
||||||
|
pi_indicate_led
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main preinit_ip
|
||||||
|
boot_hook_add preinit_main pi_indicate_preinit
|
||||||
|
|
19
package/base-files/files/lib/preinit/20_check_jffs2_ready
Normal file
19
package/base-files/files/lib/preinit/20_check_jffs2_ready
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
mount_no_jffs2() {
|
||||||
|
echo "jffs2 not ready yet; using ramdisk"
|
||||||
|
ramoverlay
|
||||||
|
}
|
||||||
|
|
||||||
|
check_for_jffs2() {
|
||||||
|
check_skip || {
|
||||||
|
jffs2_ready || {
|
||||||
|
mount_no_jffs2 && pi_mount_skip_next=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root check_for_jffs2
|
||||||
|
|
28
package/base-files/files/lib/preinit/20_device_fs_mount
Normal file
28
package/base-files/files/lib/preinit/20_device_fs_mount
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_devfs() {
|
||||||
|
mount devfs /dev -t devfs
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_hotplug() {
|
||||||
|
mount -t tmpfs tmpfs /dev -o size=512K
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_udev() {
|
||||||
|
mount -n -t tmpfs -o mode=0755 udev /dev
|
||||||
|
}
|
||||||
|
|
||||||
|
choose_device_fs() {
|
||||||
|
if grep devfs /proc/filesystems > /dev/null; then
|
||||||
|
do_mount_devfs
|
||||||
|
elif [ -x /sbin/hotplug2 ]; then
|
||||||
|
do_mount_hotplug
|
||||||
|
elif [ -x /sbin/udevd ]; then
|
||||||
|
do_mount_udev
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential choose_device_fs
|
||||||
|
|
36
package/base-files/files/lib/preinit/30_device_fs_daemons
Normal file
36
package/base-files/files/lib/preinit/30_device_fs_daemons
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
init_devfs() {
|
||||||
|
HOTPLUG=/sbin/hotplug-call
|
||||||
|
}
|
||||||
|
|
||||||
|
init_hotplug2() {
|
||||||
|
[ -c /dev/console ] || mknod /dev/console c 5 1
|
||||||
|
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --no-persistent --set-coldplug-cmd /sbin/udevtrigger
|
||||||
|
/sbin/hotplug2 --set-worker /lib/hotplug2/worker_fork.so --set-rules-file /etc/hotplug2-init.rules --persistent &
|
||||||
|
}
|
||||||
|
|
||||||
|
init_udev() {
|
||||||
|
[ -d /lib/udev/devices ] && cp -af /lib/udev/devices/* /dev/
|
||||||
|
[ -c /dev/console ] || mknod -m 0600 /dev/console c 5 1
|
||||||
|
[ -c /dev/null ] || mknod -m 0666 /dev/null c 1 3
|
||||||
|
/sbin/udevd --daemon --resolve-names=never
|
||||||
|
/sbin/udevadm trigger
|
||||||
|
/sbin/udevadm settle
|
||||||
|
}
|
||||||
|
|
||||||
|
init_device_fs() {
|
||||||
|
HOTPLUG=
|
||||||
|
if grep devfs /proc/filesystems > /dev/null; then
|
||||||
|
init_devfs
|
||||||
|
elif [ -x /sbin/hotplug2 ]; then
|
||||||
|
init_hotplug2
|
||||||
|
elif [ -x /sbin/udevd ]; then
|
||||||
|
init_udev
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential init_device_fs
|
||||||
|
|
86
package/base-files/files/lib/preinit/30_failsafe_wait
Normal file
86
package/base-files/files/lib/preinit/30_failsafe_wait
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
fs_wait_for_key () {
|
||||||
|
local timeout=$3
|
||||||
|
local timer
|
||||||
|
local do_failsafe
|
||||||
|
local keypress_true="$(mktemp)"
|
||||||
|
local keypress_wait="$(mktemp)"
|
||||||
|
local keypress_sec="$(mktemp)"
|
||||||
|
if [ -z "$keypress_wait" ]; then
|
||||||
|
keypress_wait=/tmp/.keypress_wait
|
||||||
|
touch $keypress_wait
|
||||||
|
fi
|
||||||
|
if [ -z "$keypress_true" ]; then
|
||||||
|
keypress_true=/tmp/.keypress_true
|
||||||
|
touch $keypress_true
|
||||||
|
fi
|
||||||
|
if [ -z "$keypress_sec" ]; then
|
||||||
|
keypress_sec=/tmp/.keypress_sec
|
||||||
|
touch $keypress_sec
|
||||||
|
fi
|
||||||
|
|
||||||
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" INT
|
||||||
|
trap "echo 'true' >$keypress_true; lock -u $keypress_wait ; rm -f $keypress_wait" USR1
|
||||||
|
|
||||||
|
[ -n "$timeout" ] || timeout=1
|
||||||
|
[ $timeout -ge 1 ] || timeout=1
|
||||||
|
timer=$timeout
|
||||||
|
lock $keypress_wait
|
||||||
|
{
|
||||||
|
while [ $timer -gt 0 ]; do
|
||||||
|
echo "$timer" >$keypress_sec
|
||||||
|
timer=$(($timer - 1))
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
lock -u $keypress_wait
|
||||||
|
rm -f $keypress_wait
|
||||||
|
} &
|
||||||
|
|
||||||
|
echo "Press $1<ENTER> $2"
|
||||||
|
# if we're on the console we wait for input
|
||||||
|
{
|
||||||
|
while [ -r $keypress_wait ]; do
|
||||||
|
timer="$(cat $keypress_sec)"
|
||||||
|
|
||||||
|
[ -n "$timer" ] || timer=1
|
||||||
|
timer="${timer%%\ *}"
|
||||||
|
[ $timer -ge 1 ] || timer=1
|
||||||
|
do_failsafe=""
|
||||||
|
{
|
||||||
|
read -t "$timer" do_failsafe
|
||||||
|
if [ "$do_failsafe" = "$1" ]; then
|
||||||
|
echo "true" >$keypress_true
|
||||||
|
lock -u $keypress_wait
|
||||||
|
rm -f $keypress_wait
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
lock -w $keypress_wait
|
||||||
|
|
||||||
|
trap - INT
|
||||||
|
trap - USR1
|
||||||
|
|
||||||
|
keypressed=1
|
||||||
|
[ "$(cat $keypress_true)" = "true" ] && keypressed=0
|
||||||
|
rm -f $keypress_true
|
||||||
|
rm -f $keypress_wait
|
||||||
|
rm -f $keypress_sec
|
||||||
|
|
||||||
|
return $keypressed
|
||||||
|
}
|
||||||
|
|
||||||
|
failsafe_wait() {
|
||||||
|
FAILSAFE=
|
||||||
|
pi_failsafe_net_message=true
|
||||||
|
preinit_net_echo "Please press button now to enter failsafe"
|
||||||
|
pi_failsafe_net_message=false
|
||||||
|
echo -n "Press CTRL-C or "
|
||||||
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true && export FAILSAFE
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main failsafe_wait
|
||||||
|
|
10
package/base-files/files/lib/preinit/40_init_shm
Normal file
10
package/base-files/files/lib/preinit/40_init_shm
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
init_shm() {
|
||||||
|
[ -d /dev/shm ] || mkdir -p /dev/shm
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential init_shm
|
||||||
|
|
15
package/base-files/files/lib/preinit/40_mount_devpts
Normal file
15
package/base-files/files/lib/preinit/40_mount_devpts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
init_devpts() {
|
||||||
|
[ -d /dev/pts ] || mkdir -p /dev/pts
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_devpts() {
|
||||||
|
mount devpts /dev/pts -t devpts
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential init_devpts
|
||||||
|
boot_hook_add preinit_essential do_mount_devpts
|
||||||
|
|
24
package/base-files/files/lib/preinit/40_mount_jffs2
Normal file
24
package/base-files/files/lib/preinit/40_mount_jffs2
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
find_mount_jffs2() {
|
||||||
|
mount "$(find_mtd_part rootfs_data)" /jffs -t jffs2
|
||||||
|
}
|
||||||
|
|
||||||
|
jffs2_not_mounted() {
|
||||||
|
if [ "$pi_jffs2_mount_success" != "true" ]; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
do_mount_jffs2() {
|
||||||
|
check_skip || {
|
||||||
|
find_mount_jffs2 && pi_jffs2_mount_success=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root do_mount_jffs2
|
||||||
|
|
13
package/base-files/files/lib/preinit/40_run_failsafe_hook
Normal file
13
package/base-files/files/lib/preinit/40_run_failsafe_hook
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
run_failsafe_hook() {
|
||||||
|
if [ "$FAILSAFE" = "true" ]; then
|
||||||
|
boot_run_hook failsafe
|
||||||
|
lock -w /tmp/.failsafe
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main run_failsafe_hook
|
||||||
|
|
31
package/base-files/files/lib/preinit/50_choose_console
Normal file
31
package/base-files/files/lib/preinit/50_choose_console
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
choose_console() {
|
||||||
|
# the shell really doesn't like having stdin/out closed
|
||||||
|
# that's why we use /dev/pty/m0 and m1 (or equivalent) as replacement
|
||||||
|
# for /dev/console if there's no serial console available
|
||||||
|
|
||||||
|
if grep devfs /proc/filesystems > /dev/null; then
|
||||||
|
M0=/dev/pty/m0
|
||||||
|
M1=/dev/pty/m1
|
||||||
|
M2=/dev/pty/m1
|
||||||
|
elif [ -x /sbin/hotplug2 ]; then
|
||||||
|
M0=/dev/ptmx
|
||||||
|
M1=/dev/ptmx
|
||||||
|
M2=/dev/ptmx
|
||||||
|
elif [ -x /sbin/udevd ]; then
|
||||||
|
M0=/dev/pty/ptmx
|
||||||
|
M1=/dev/pty/ptmx
|
||||||
|
M2=/dev/pty/ptmx
|
||||||
|
fi
|
||||||
|
dd if=/dev/console of=/dev/null bs=1 count=0 >/dev/null 2>/dev/null && {
|
||||||
|
M0=/dev/console
|
||||||
|
M1=/dev/console
|
||||||
|
M2=/dev/console
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential choose_console
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
indicate_regular_preinit() {
|
||||||
|
echo "- regular preinit -"
|
||||||
|
preinit_net_echo "Continuing with Regular Preinit\n"
|
||||||
|
pi_indicate_led
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main indicate_regular_preinit
|
||||||
|
|
10
package/base-files/files/lib/preinit/60_init_hotplug
Normal file
10
package/base-files/files/lib/preinit/60_init_hotplug
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
init_hotplug() {
|
||||||
|
echo "$HOTPLUG" > /proc/sys/kernel/hotplug
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main init_hotplug
|
||||||
|
|
13
package/base-files/files/lib/preinit/70_initramfs_test
Normal file
13
package/base-files/files/lib/preinit/70_initramfs_test
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
initramfs_test() {
|
||||||
|
if [ -n "$INITRAMFS" ]; then
|
||||||
|
boot_run_hook initramfs
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main initramfs_test
|
||||||
|
|
13
package/base-files/files/lib/preinit/70_pivot_jffs2_root
Normal file
13
package/base-files/files/lib/preinit/70_pivot_jffs2_root
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
rootfs_pivot() {
|
||||||
|
check_skip || jffs2_not_mounted || {
|
||||||
|
echo "switching to jffs2"
|
||||||
|
fopivot /jffs /rom && pi_mount_skip_next=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root rootfs_pivot
|
||||||
|
|
10
package/base-files/files/lib/preinit/80_mount_root
Normal file
10
package/base-files/files/lib/preinit/80_mount_root
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_root() {
|
||||||
|
boot_run_hook preinit_mount_root
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main do_mount_root
|
||||||
|
|
14
package/base-files/files/lib/preinit/90_init_console
Normal file
14
package/base-files/files/lib/preinit/90_init_console
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
init_console() {
|
||||||
|
if [ "$pi_suppress_stderr" = "y" ]; then
|
||||||
|
exec <$M0 >$M1 2>&0
|
||||||
|
else
|
||||||
|
exec <$M0 >$M1 2>$M2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_essential init_console
|
||||||
|
|
12
package/base-files/files/lib/preinit/90_mount_no_jffs2
Normal file
12
package/base-files/files/lib/preinit/90_mount_no_jffs2
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_no_jffs2() {
|
||||||
|
check_skip || {
|
||||||
|
mount_no_jffs2 && pi_mount_skip_next=true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root do_mount_no_jffs2
|
||||||
|
|
17
package/base-files/files/lib/preinit/90_restore_config
Normal file
17
package/base-files/files/lib/preinit/90_restore_config
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
restore_config() {
|
||||||
|
[ -f /sysupgrade.tgz ] && {
|
||||||
|
echo "- config restore -"
|
||||||
|
cd /
|
||||||
|
mv sysupgrade.tgz /tmp
|
||||||
|
tar xzf /tmp/sysupgrade.tgz
|
||||||
|
rm -f /tmp/sysupgrade.tgz
|
||||||
|
sync
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main restore_config
|
||||||
|
|
18
package/base-files/files/lib/preinit/99_10_failsafe_login
Normal file
18
package/base-files/files/lib/preinit/99_10_failsafe_login
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
failsafe_netlogin () {
|
||||||
|
telnetd -l /bin/login.sh <> /dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
failsafe_shell() {
|
||||||
|
lock /tmp/.failsafe
|
||||||
|
ash --login
|
||||||
|
echo "Please reboot system when done with failsafe network logins"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
boot_hook_add failsafe failsafe_netlogin
|
||||||
|
boot_hook_add failsafe failsafe_shell
|
||||||
|
|
12
package/base-files/files/lib/preinit/99_10_mount_no_mtd
Normal file
12
package/base-files/files/lib/preinit/99_10_mount_no_mtd
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_no_mtd() {
|
||||||
|
check_skip || {
|
||||||
|
mount_no_mtd
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_mount_root do_mount_no_mtd
|
||||||
|
|
16
package/base-files/files/lib/preinit/99_10_run_init
Normal file
16
package/base-files/files/lib/preinit/99_10_run_init
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
run_init() {
|
||||||
|
preinit_echo "- init -"
|
||||||
|
preinit_ip_deconfig
|
||||||
|
if [ "$pi_init_stderr_suppress" = "y" ]; then
|
||||||
|
exec env - PATH=$pi_init_path $pi_init_env $pi_init_cmd 2>&0
|
||||||
|
else
|
||||||
|
exec env - PATH=$pi_init_path $pi_init_env $pi_init_cmd
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main run_init
|
||||||
|
|
|
@ -1,162 +1,34 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
. /etc/functions.sh
|
|
||||||
|
|
||||||
partname="rootfs_data"
|
switch2jffs_hook=
|
||||||
mtdpart="$(find_mtd_part $partname)"
|
jffs2reset_hook=
|
||||||
|
no_fo_hook=
|
||||||
|
|
||||||
rom=$(awk '/squashfs/ {print $2}' /proc/mounts)
|
. /lib/functions/boot.sh
|
||||||
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts)
|
|
||||||
|
|
||||||
dupe() { # <new_root> <old_root>
|
firstboot_skip_next=false
|
||||||
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 fb_source_file in /lib/firstboot/*; do
|
||||||
for file in $(cd $2; find . -xdev -type f;); do
|
. $fb_source_file
|
||||||
case "$file" in
|
done
|
||||||
./rom/note) ;; #nothing
|
|
||||||
./etc/config*|\
|
|
||||||
./usr/lib/opkg/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 2>&-
|
|
||||||
mount -o move $2/jffs /jffs 2>&-
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fopivot() { # <rw_root> <ro_root> <dupe?>
|
|
||||||
root=$1
|
|
||||||
{
|
|
||||||
if grep -q mini_fo /proc/filesystems; then
|
|
||||||
mount -t mini_fo -o base=/,sto=$1 "mini_fo:$1" /mnt 2>&- && root=/mnt
|
|
||||||
else
|
|
||||||
mount --bind / /mnt
|
|
||||||
mount --bind -o union "$1" /mnt && root=/mnt
|
|
||||||
fi
|
|
||||||
} || {
|
|
||||||
[ "$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
|
|
||||||
mount -t tmpfs root /tmp/root
|
|
||||||
fopivot /tmp/root /rom 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# invoked as an executable
|
# invoked as an executable
|
||||||
[ "${0##*/}" = "firstboot" ] && {
|
if [ "${0##*/}" = "firstboot" ]; then
|
||||||
|
if [ "$1" = "switch2jffs" ]; then
|
||||||
[ -z "$mtdpart" ] && {
|
boot_run_hook switch2jffs
|
||||||
echo "MTD partition not found."
|
elif [ -z "$jffs" ]; then
|
||||||
exit 1
|
reset_has_fo=true
|
||||||
}
|
echo "firstboot has already been run"
|
||||||
|
echo "jffs2 partition is mounted, only resetting files"
|
||||||
[ -z "$rom" ] && {
|
boot_run_hook jffs2reset
|
||||||
echo "You do not have a squashfs partition; aborting"
|
else
|
||||||
echo "(firstboot cannot be run on jffs2 based firmwares)"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
[ "$1" = "switch2jffs" ] && {
|
|
||||||
if grep -q mini_fo /proc/filesystems; then
|
|
||||||
mount "$mtdpart" /rom/jffs -t jffs2 || exit
|
|
||||||
|
|
||||||
# try to avoid fs changing while copying
|
|
||||||
mount -o remount,ro none / 2>&-
|
|
||||||
|
|
||||||
# copy ramoverlay to 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>&-
|
|
||||||
else
|
|
||||||
# switch back to squashfs temporarily
|
|
||||||
pivot /rom /mnt
|
|
||||||
|
|
||||||
# get rid of the old overlay
|
|
||||||
umount -l /mnt
|
|
||||||
|
|
||||||
# another umount to get rid of the bind from /tmp/root
|
|
||||||
umount -l /mnt
|
|
||||||
|
|
||||||
# initialize jffs2
|
|
||||||
mount "$mtdpart" /jffs -t jffs2 || exit
|
|
||||||
|
|
||||||
# workaround to ensure that union can attach properly
|
|
||||||
sync
|
|
||||||
ls /jffs >/dev/null
|
|
||||||
|
|
||||||
# switch to the new (empty) jffs2
|
|
||||||
fopivot /jffs /rom 1
|
|
||||||
|
|
||||||
# copy ramoverlay to jffs2, must be done after switching
|
|
||||||
# to the new rootfs to avoid creating opaque directories
|
|
||||||
echo -n "copying files ... "
|
|
||||||
cp -a /tmp/root/* / >/dev/null 2>&1
|
|
||||||
sync
|
|
||||||
echo "done"
|
|
||||||
|
|
||||||
umount -l /jffs
|
|
||||||
umount -l /tmp/root
|
|
||||||
fi
|
|
||||||
|
|
||||||
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"
|
mtd erase "$partname"
|
||||||
mount "$mtdpart" /jffs -t jffs2
|
mount "$mtdpart" /jffs -t jffs2
|
||||||
fopivot /jffs /rom 1
|
fopivot /jffs /rom 1
|
||||||
}
|
fi
|
||||||
|
else
|
||||||
|
set_mtd_part
|
||||||
|
set_rom_part
|
||||||
|
set_jffs_part
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (C) 2006 OpenWrt.org
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
. /etc/functions.sh
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
jffs2_ready () {
|
# Initialize hook variables et by pulling in from preinit
|
||||||
mtdpart="$(find_mtd_part rootfs_data)"
|
|
||||||
magic=$(hexdump $mtdpart -n 4 -e '4/1 "%02x"')
|
preinit_essential_hook=
|
||||||
[ "$magic" != "deadc0de" ]
|
preinit_main_hook=
|
||||||
|
failsafe_hook=
|
||||||
|
initramfs_hook=
|
||||||
|
preinit_mount_root=
|
||||||
|
|
||||||
|
. /lib/functions/boot.sh
|
||||||
|
|
||||||
|
for pi_source_file in /lib/preinit/*; do
|
||||||
|
. $pi_source_file
|
||||||
|
done
|
||||||
|
|
||||||
|
# Override function that doesn't apply to use of mount_root as a command rather
|
||||||
|
# than as part of preinit
|
||||||
|
|
||||||
|
preinit_echo() {
|
||||||
|
echo "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
grep rootfs_data /proc/mtd >/dev/null 2>/dev/null && {
|
boot_run_hook mount_root
|
||||||
. /sbin/firstboot
|
|
||||||
mtd unlock rootfs_data
|
|
||||||
jffs2_ready && {
|
|
||||||
echo "switching to jffs2"
|
|
||||||
mount "$(find_mtd_part rootfs_data)" /jffs -t jffs2 && \
|
|
||||||
fopivot /jffs /rom
|
|
||||||
} || {
|
|
||||||
echo "jffs2 not ready yet; using ramdisk"
|
|
||||||
ramoverlay
|
|
||||||
}
|
|
||||||
} || {
|
|
||||||
mtd unlock rootfs
|
|
||||||
mount -o remount,rw /dev/root /
|
|
||||||
}
|
|
||||||
|
|
132
package/base-files/image-config.in
Normal file
132
package/base-files/image-config.in
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
# Copyright (C) 2006 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
menuconfig PREINITOPT
|
||||||
|
bool "Preinit configuration options" if IMAGEOPT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
These options are used to control the environment used to initialize
|
||||||
|
the system before running init (which typically mean /sbin/init which
|
||||||
|
switches to multiuser mode).
|
||||||
|
|
||||||
|
config TARGET_PREINIT_SUPPRESS_STDERR
|
||||||
|
bool "Suppress stderr messages during preinit" if PREINITOPT
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Sends stderr to null during preinit. This is the default behaviour
|
||||||
|
in previous versions of OpenWRT. This also prevents init process
|
||||||
|
itself from displaying stderr, however processes launched by init
|
||||||
|
in multiuser through inittab will use the current terminal (e.g.
|
||||||
|
the ash shell launched by inittab will display stderr). That's
|
||||||
|
the same behaviour as seen in previous version of OpenWRT.
|
||||||
|
|
||||||
|
config TARGET_PREINIT_TIMEOUT
|
||||||
|
int
|
||||||
|
prompt "Failsafe wait timeout" if PREINITOPT
|
||||||
|
default 2
|
||||||
|
help
|
||||||
|
How long to wait for failsafe mode to be entered before
|
||||||
|
continuing with a regular boot if failsafe not selected.
|
||||||
|
|
||||||
|
config TARGET_PREINIT_SHOW_NETMSG
|
||||||
|
bool
|
||||||
|
prompt "Show all preinit network messages" if PREINITOPT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Show preinit all network messages (via netmsg broadcast), not only
|
||||||
|
the message indicating to press reset to enter failsafe. Note that
|
||||||
|
if the architecture doesn't define an interface, and there is no
|
||||||
|
'Preinit network interface' defined, then no messages will be
|
||||||
|
emitted, even if this is set.
|
||||||
|
|
||||||
|
config TARGET_PREINIT_SUPPRESS_FAILSAFE_NETMSG
|
||||||
|
bool
|
||||||
|
prompt "Suppress network message indicating failsafe" if PREINITOPT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
If "Show all preinit network messages" above is not set, then
|
||||||
|
setting this option suppresses the only message that would be
|
||||||
|
emitted otherwise, name the network message to enter failsafe
|
||||||
|
(via netmsg).
|
||||||
|
|
||||||
|
config TARGET_PREINIT_IFNAME
|
||||||
|
string
|
||||||
|
prompt "Preinit network interface" if PREINITOPT
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Interface for sending preinit messages to network, and any other
|
||||||
|
default networking in failsafe or preinit. If empty
|
||||||
|
uses $ifname (if defined in /etc/preinit.arch).
|
||||||
|
|
||||||
|
config TARGET_PREINIT_IP
|
||||||
|
string
|
||||||
|
prompt "IP address for preinit network messages" if PREINITOPT
|
||||||
|
default "192.168.1.1"
|
||||||
|
help
|
||||||
|
IP address used to configure interface for preinit network
|
||||||
|
messages, including failsafe messages
|
||||||
|
|
||||||
|
config TARGET_PREINIT_NETMASK
|
||||||
|
string
|
||||||
|
prompt "Netmask for preinit network messages" if PREINITOPT
|
||||||
|
default "255.255.255.0"
|
||||||
|
help
|
||||||
|
Netmask used to configure interface for preinit network
|
||||||
|
messages, including failsafes messages
|
||||||
|
|
||||||
|
config TARGET_PREINIT_BROADCAST
|
||||||
|
string
|
||||||
|
prompt "Broadcast address for preinit network messages" if PREINITOPT
|
||||||
|
default "192.168.1.255
|
||||||
|
help
|
||||||
|
Broadcast address to which to send preinit network messages, as
|
||||||
|
as failsafe messages
|
||||||
|
|
||||||
|
|
||||||
|
menuconfig INITOPT
|
||||||
|
bool "Init configuration options" if IMAGEOPT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
These option choose the command that will run as the 'init' command
|
||||||
|
(that is which is responsible for controlling the system once preinit
|
||||||
|
transfers control to it) as well as some options controlling its
|
||||||
|
behaviour. Normally init is /sbin/init.
|
||||||
|
|
||||||
|
config TARGET_INIT_PATH
|
||||||
|
string
|
||||||
|
prompt "PATH for regular boot" if INITOPT
|
||||||
|
default "/bin:/sbin:/usr/bin:/usr/sbin"
|
||||||
|
help
|
||||||
|
Default PATH used during normal operation
|
||||||
|
|
||||||
|
config TARGET_INIT_ENV
|
||||||
|
string
|
||||||
|
prompt "Environment variables to set when starting init (start with none)" if INITOPT
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Should be a space seperated list of variable assignments. These
|
||||||
|
variables will be present in the environment. Spaces may not be
|
||||||
|
present (including through expansion) even in a quoted string
|
||||||
|
(env doesn't understanding quoting).
|
||||||
|
|
||||||
|
config TARGET_INIT_CMD
|
||||||
|
string
|
||||||
|
prompt "Init command" if INITOPT
|
||||||
|
default "/sbin/init"
|
||||||
|
help
|
||||||
|
The executable to run as the init process. Is 'exec'd by
|
||||||
|
preinit (which is the init that the kernel launches on boot).
|
||||||
|
|
||||||
|
config TARGET_INIT_SUPPRESS_STDERR
|
||||||
|
bool
|
||||||
|
prompt "Suppress stderr messages of init" if INITOPT
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Prevents showing stderr messages for init command if not already
|
||||||
|
suppressed during preinit. This is the default behaviour in
|
||||||
|
previous versions of OpenWRT. Removing this does nothing if
|
||||||
|
stderr is suppressed during preinit (which is the default).
|
|
@ -562,20 +562,24 @@ EOF
|
||||||
|
|
||||||
sub gen_package_config() {
|
sub gen_package_config() {
|
||||||
parse_package_metadata($ARGV[0]) or exit 1;
|
parse_package_metadata($ARGV[0]) or exit 1;
|
||||||
print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n" if %preconfig;
|
print "menuconfig IMAGEOPT\n\tbool \"Image configuration\"\n\tdefault n\n";
|
||||||
foreach my $preconfig (keys %preconfig) {
|
foreach my $preconfig (keys %preconfig) {
|
||||||
foreach my $cfg (keys %{$preconfig{$preconfig}}) {
|
foreach my $cfg (keys %{$preconfig{$preconfig}}) {
|
||||||
my $conf = $preconfig{$preconfig}->{$cfg}->{id};
|
my $conf = $preconfig{$preconfig}->{$cfg}->{id};
|
||||||
$conf =~ tr/\.-/__/;
|
$conf =~ tr/\.-/__/;
|
||||||
print <<EOF
|
print <<EOF
|
||||||
config UCI_PRECONFIG_$conf
|
config UCI_PRECONFIG_$conf
|
||||||
string "$preconfig{$preconfig}->{$cfg}->{label}" if UCI_PRECONFIG
|
string "$preconfig{$preconfig}->{$cfg}->{label}" if IMAGEOPT
|
||||||
depends PACKAGE_$preconfig
|
depends PACKAGE_$preconfig
|
||||||
default "$preconfig{$preconfig}->{$cfg}->{default}"
|
default "$preconfig{$preconfig}->{$cfg}->{default}"
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
print "source \"package/*/image-config.in\"\n";
|
||||||
|
if (scalar glob "package/feeds/*/*/image-config.in") {
|
||||||
|
print "source \"package/feeds/*/*/image-config.in\"\n";
|
||||||
|
}
|
||||||
print_package_features();
|
print_package_features();
|
||||||
print_package_config_category 'Base system';
|
print_package_config_category 'Base system';
|
||||||
foreach my $cat (keys %category) {
|
foreach my $cat (keys %category) {
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
. /etc/functions.sh
|
|
||||||
|
|
||||||
insmod input-core
|
|
||||||
insmod input-polldev
|
|
||||||
insmod gpio_buttons
|
|
||||||
insmod button-hotplug
|
|
||||||
|
|
||||||
ifname=eth0
|
|
||||||
|
|
||||||
failsafe_ip
|
|
||||||
|
|
||||||
netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
|
|
||||||
|
|
||||||
ifconfig "$ifname" 0.0.0.0 down
|
|
||||||
|
|
||||||
sleep 2
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
enable_leds() {
|
||||||
|
insmod input-core
|
||||||
|
insmod input-polldev
|
||||||
|
insmod gpio_buttons
|
||||||
|
insmod button-hotplug
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main enable_leds
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set_preinit_ifname() {
|
||||||
|
ifname=eth0
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main set_preinit_ifname
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2009 OpenWrt.org
|
||||||
|
#
|
||||||
|
|
||||||
|
. /lib/ar71xx.sh
|
||||||
|
|
||||||
|
|
||||||
|
preinit_enable_leds() {
|
||||||
|
insmod input-core
|
||||||
|
insmod input-polldev
|
||||||
|
insmod gpio_buttons
|
||||||
|
insmod button-hotplug
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main preinit_enable_leds
|
||||||
|
|
|
@ -20,13 +20,6 @@ fetch_mac_from_mtd() {
|
||||||
[ ! -z $mac ] && ifconfig eth1 hw ether $mac 2>/dev/null
|
[ ! -z $mac ] && ifconfig eth1 hw ether $mac 2>/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
preinit_load_modules() {
|
|
||||||
insmod input-core
|
|
||||||
insmod input-polldev
|
|
||||||
insmod gpio_buttons
|
|
||||||
insmod button-hotplug
|
|
||||||
}
|
|
||||||
|
|
||||||
preinit_set_mac_address() {
|
preinit_set_mac_address() {
|
||||||
case $(ar71xx_board_name) in
|
case $(ar71xx_board_name) in
|
||||||
tew-632brp)
|
tew-632brp)
|
||||||
|
@ -42,15 +35,5 @@ preinit_set_mac_address() {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
preinit_set_mac_address
|
boot_hook_add preinit_main preinit_set_mac_address
|
||||||
preinit_load_modules
|
|
||||||
|
|
||||||
ifname=eth0
|
|
||||||
|
|
||||||
failsafe_ip
|
|
||||||
|
|
||||||
netmsg 192.168.1.255 "Press any button now, to enter Failsafe!"
|
|
||||||
|
|
||||||
ifconfig "$ifname" 0.0.0.0 down
|
|
||||||
|
|
||||||
sleep 2
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (C) 2009 OpenWrt.org
|
||||||
|
#
|
||||||
|
|
||||||
|
. /lib/ar71xx.sh
|
||||||
|
|
||||||
|
set_preinit_iface() {
|
||||||
|
ifname=eth0
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main set_preinit_iface
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
# reset button only supported on ar5315+ at the moment
|
|
||||||
grep 'Atheros AR231[567]' /proc/cpuinfo > /dev/null && {
|
|
||||||
if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \
|
|
||||||
-e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then
|
|
||||||
vconfig set_name_type DEV_PLUS_VID_NO_PAD
|
|
||||||
ifconfig eth0 up
|
|
||||||
vconfig add eth0 1
|
|
||||||
ifname=eth0.1
|
|
||||||
else
|
|
||||||
ifname=eth0
|
|
||||||
fi
|
|
||||||
failsafe_ip
|
|
||||||
netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
|
|
||||||
sleep 2
|
|
||||||
if [ -z "$FAILSAFE" -a \
|
|
||||||
\( -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \
|
|
||||||
-e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" \) ]; then
|
|
||||||
vconfig rem eth0.1
|
|
||||||
ifconfig eth0 down
|
|
||||||
fi
|
|
||||||
}
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# reset button only supported on ar5315+ at the moment
|
||||||
|
preinit_ip() {
|
||||||
|
if [ -z "$pi_ifname" ]; then
|
||||||
|
grep 'Atheros AR231[567]' /proc/cpuinfo > /dev/null && {
|
||||||
|
if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \
|
||||||
|
-e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then
|
||||||
|
vconfig set_name_type DEV_PLUS_VID_NO_PAD
|
||||||
|
ifconfig eth0 up
|
||||||
|
vconfig add eth0 1
|
||||||
|
ifname=eth0.1
|
||||||
|
else
|
||||||
|
ifname=eth0
|
||||||
|
fi
|
||||||
|
pi_ifname=$ifname
|
||||||
|
}
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# reset button only supported on ar5315+ at the moment
|
||||||
|
|
||||||
|
preinit_ip_deconfig() {
|
||||||
|
if [ -e "/sys/bus/mdio_bus/drivers/Infineon ADM6996/0:00" -o \
|
||||||
|
-e "/sys/bus/mdio_bus/drivers/Marvell 88E6060/0:10" ]; then
|
||||||
|
vconfig rem eth0.1 2>/dev/null
|
||||||
|
ifconfig $pi_ifname down
|
||||||
|
fi
|
||||||
|
}
|
|
@ -1,71 +0,0 @@
|
||||||
. /etc/functions.sh
|
|
||||||
|
|
||||||
failsafe() {
|
|
||||||
lock /tmp/.failsafe
|
|
||||||
failsafe_ip
|
|
||||||
|
|
||||||
echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports
|
|
||||||
|
|
||||||
set_state failsafe
|
|
||||||
[ -x "/usr/sbin/nvram" ] && {
|
|
||||||
[ "$(nvram get boot_wait)" != "on" ] && {
|
|
||||||
nvram set boot_wait=on
|
|
||||||
nvram commit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
netmsg 192.168.1.255 "Entering Failsafe!"
|
|
||||||
telnetd -l /bin/login.sh <> /dev/null 2>&1
|
|
||||||
|
|
||||||
ash --login
|
|
||||||
}
|
|
||||||
|
|
||||||
mount none /proc -t proc
|
|
||||||
|
|
||||||
insmod diag
|
|
||||||
set_state preinit
|
|
||||||
echo '/sbin/hotplug.failsafe' > /proc/sys/kernel/hotplug
|
|
||||||
|
|
||||||
ifname=eth0
|
|
||||||
|
|
||||||
# hardware specific overrides
|
|
||||||
case "$(cat /proc/diag/model)" in
|
|
||||||
"Linksys WAP54G V1") ifname=eth1;;
|
|
||||||
"ASUS WL-HDD") ifname=eth1;;
|
|
||||||
"ASUS WL-300g") ifname=eth1;;
|
|
||||||
"ASUS (unknown, BCM4702)") ifname=eth1;;
|
|
||||||
"Sitecom WL-105b") ifname=eth1;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
check_module () {
|
|
||||||
module="$1"; shift; params="$*"
|
|
||||||
|
|
||||||
insmod "$module" "$params"
|
|
||||||
sleep 1
|
|
||||||
grep "^$module" /proc/modules
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
check_module tg3
|
|
||||||
failsafe_ip
|
|
||||||
|
|
||||||
insmod switch-core
|
|
||||||
check_module switch-robo || check_module switch-adm || {
|
|
||||||
check_module bcm57xx activate_gpio=0x4 && cpu_port="8u*"
|
|
||||||
} || rmmod switch-core
|
|
||||||
|
|
||||||
[ -d /proc/switch/eth0 ] && {
|
|
||||||
echo 1 > /proc/switch/eth0/reset
|
|
||||||
|
|
||||||
# this would be easier if we blasted the message across all ports
|
|
||||||
# but we don't want packets leaking across interfaces
|
|
||||||
for port in $(seq 0 4); do {
|
|
||||||
echo "$port ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports
|
|
||||||
netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
|
|
||||||
}; done
|
|
||||||
} || netmsg 192.168.1.255 "Press reset now, to enter Failsafe!"
|
|
||||||
|
|
||||||
ifconfig $ifname 0.0.0.0 down
|
|
||||||
|
|
||||||
sleep 2
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
init_hotplug_failsafe() {
|
||||||
|
echo '/sbin/hotplug.failsafe' > /proc/sys/kernel/hotplug
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main init_hotplug_failsafe
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set_preinit_iface() {
|
||||||
|
ifname=eth0
|
||||||
|
|
||||||
|
insmod diag
|
||||||
|
|
||||||
|
# hardware specific overrides
|
||||||
|
case "$(cat /proc/diag/model)" in
|
||||||
|
"Linksys WAP54G V1") ifname=eth1;;
|
||||||
|
"ASUS WL-HDD") ifname=eth1;;
|
||||||
|
"ASUS WL-300g") ifname=eth1;;
|
||||||
|
"ASUS (unknown, BCM4702)") ifname=eth1;;
|
||||||
|
"Sitecom WL-105b") ifname=eth1;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
check_module () {
|
||||||
|
module="$1"; shift; params="$*"
|
||||||
|
|
||||||
|
insmod "$module" "$params"
|
||||||
|
sleep 1
|
||||||
|
grep "^$module" /proc/modules
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
init_iface() {
|
||||||
|
check_module tg3
|
||||||
|
insmod switch-core
|
||||||
|
check_module switch-robo || check_module switch-adm || {
|
||||||
|
check_module bcm57xx activate_gpio=0x4 && cpu_port="8u*"
|
||||||
|
} || rmmod switch-core
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main init_iface
|
||||||
|
boot_hook_add preinit_main set_preinit_iface
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
failsafe_ip() {
|
||||||
|
[ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && {
|
||||||
|
ifconfig eth0 0.0.0.0 down
|
||||||
|
echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports
|
||||||
|
}
|
||||||
|
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
ifconfig $pi_ifname $pi_ip netmask $pi_netmask broadcast $pi_broadcast up
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add failsafe failsafe_ip
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
do_mount_procfs() {
|
||||||
|
mount none /proc -t proc
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
. /etc/functions.sh
|
||||||
|
|
||||||
|
port_net_echo() {
|
||||||
|
[ -n "$pi_ifname" ] && grep "$pi_ifname" /proc/net/dev >/dev/null ] {
|
||||||
|
if [ "$pi_preinit_net_messages" = "y" ] || [ "$pi_failsafe_net_message" = "true"] && [ "$pi_preinit_no_failsafe_netmsg" != "y" ]; then
|
||||||
|
netmsg $pi_broadcast "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
preinit_ip_deconfig() {
|
||||||
|
if [ -z "$pi_ifname" ]; then
|
||||||
|
ifconfig $ifname 0.0.0.0 down
|
||||||
|
else
|
||||||
|
grep "$pi_ifname" /proc/net/dev >/dev/null && {
|
||||||
|
ifconfig $pi_ifname 0.0.0.0 down
|
||||||
|
}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
preinit_net_echo() {
|
||||||
|
preinit_ip
|
||||||
|
|
||||||
|
[ -d /proc/switch/eth0 ] && [ "$pi_ifname" = "eth0" ] && {
|
||||||
|
echo 1 > /proc/switch/eth0/reset
|
||||||
|
|
||||||
|
# this would be easier if we blasted the message across all ports
|
||||||
|
# but we don't want packets leaking across interfaces
|
||||||
|
for port in $(seq 0 4); do {
|
||||||
|
echo "$port ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports
|
||||||
|
port_net_echo $1
|
||||||
|
}; done
|
||||||
|
} || port_net_echo $1
|
||||||
|
|
||||||
|
preinit_ip_deconfig
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /etc/functions.sh
|
||||||
|
|
||||||
|
set_boot_wait() {
|
||||||
|
[ -x "/usr/sbin/nvram" ] && {
|
||||||
|
[ "$(nvram get boot_wait)" != "on" ] && {
|
||||||
|
nvram set boot_wait=on
|
||||||
|
nvram commit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add failsafe set_boot_wait
|
|
@ -1,6 +0,0 @@
|
||||||
CONFIG_PARTITION="$(grep "VCTL" /proc/mtd | cut -d: -f1)"
|
|
||||||
MAC1="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f2|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
|
|
||||||
MAC2="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f8|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
|
|
||||||
|
|
||||||
ifconfig eth0 hw ether $MAC1 2>/dev/null
|
|
||||||
ifconfig eth1 hw ether $MAC2 2>/dev/null
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set_ether_mac() {
|
||||||
|
CONFIG_PARTITION="$(grep "VCTL" /proc/mtd | cut -d: -f1)"
|
||||||
|
MAC1="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f2|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
|
||||||
|
MAC2="$(strings /dev/$CONFIG_PARTITION |grep MAC|cut -d: -f8|cut -c3-14|sed -e 's,\(..\),:\1,g' -e 's,^:,,')"
|
||||||
|
|
||||||
|
ifconfig eth0 hw ether $MAC1 2>/dev/null
|
||||||
|
ifconfig eth1 hw ether $MAC2 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main set_ether_mac
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
|
|
||||||
grep "/dev/root" /proc/mounts |grep -q nfs && {
|
|
||||||
echo "- init nfs -"
|
|
||||||
exec /sbin/init
|
|
||||||
}
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
|
||||||
|
init_nfs() {
|
||||||
|
grep "/dev/root" /proc/mounts |grep -q nfs && {
|
||||||
|
echo "- init nfs -"
|
||||||
|
exec /sbin/init
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main init_nfs
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
RB_CONFIG="$(grep "RedBoot config" /proc/mtd | cut -d: -f1)"
|
|
||||||
|
|
||||||
for npe in eth0 eth1 eth2
|
|
||||||
do
|
|
||||||
if [ "$(ifconfig $npe 2>/dev/null | grep -c 00:00:00:00:00:00)" == "1" ]; then
|
|
||||||
ifconfig $npe hw ether $(fconfig -s -r -d /dev/$RB_CONFIG -n npe_"$npe"_esa)
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Some developers should be shot on sight at Zcom/Netgear
|
|
||||||
# -- Fixup for the WG302v1, need someone with a WAG302v1 to fix that, too
|
|
||||||
|
|
||||||
if [ "$(ifconfig eth0 2>/dev/null | grep -c 00:00:00:00:00:00)" == "1" ]; then
|
|
||||||
ifconfig eth0 hw ether $(fconfig -s -r -d /dev/$RB_CONFIG -n zcom_npe_esa)
|
|
||||||
fi
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set_ether_mac() {
|
||||||
|
|
||||||
|
RB_CONFIG="$(grep "RedBoot config" /proc/mtd | cut -d: -f1)"
|
||||||
|
|
||||||
|
for npe in eth0 eth1 eth2
|
||||||
|
do
|
||||||
|
if [ "$(ifconfig $npe 2>/dev/null | grep -c 00:00:00:00:00:00)" == "1" ]; then
|
||||||
|
ifconfig $npe hw ether $(fconfig -s -r -d /dev/$RB_CONFIG -n npe_"$npe"_esa)
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Some developers should be shot on sight at Zcom/Netgear
|
||||||
|
# -- Fixup for the WG302v1, need someone with a WAG302v1 to fix that, too
|
||||||
|
|
||||||
|
if [ "$(ifconfig eth0 2>/dev/null | grep -c 00:00:00:00:00:00)" == "1" ]; then
|
||||||
|
ifconfig eth0 hw ether $(fconfig -s -r -d /dev/$RB_CONFIG -n zcom_npe_esa)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main set_ether_mac
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
mount -t proc none /proc
|
|
||||||
grep 'failsafe=' /proc/cmdline > /dev/null && export FAILSAFE=true
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
do_mount_procfs() {
|
||||||
|
mount -t proc none /proc
|
||||||
|
}
|
||||||
|
|
14
target/linux/pxcab/base-files/lib/preinit/45_failsafe_pxcab
Normal file
14
target/linux/pxcab/base-files/lib/preinit/45_failsafe_pxcab
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
failsafe_wait() {
|
||||||
|
FAILSAFE=
|
||||||
|
grep 'failsafe=' /proc/cmdline > /dev/null && FAILSAFE=true && export FAILSAFE
|
||||||
|
if [ "$FAILSAFE" != "true" ]; then
|
||||||
|
preinit_net_echo "Please press button now to enter failsafe"
|
||||||
|
echo -n "Press CTRL-C or "
|
||||||
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true && export FAILSAFE
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
# Copyright (C) 2009 OpenWrt.org
|
|
||||||
|
|
||||||
. /etc/functions.sh
|
|
||||||
|
|
||||||
insmod r6040
|
|
||||||
|
|
||||||
kernel=$(grep magic /proc/mtd | awk -F: '{print $1}')
|
|
||||||
[ -n $kernel ] && hdr=$(dd if=/dev/$kernel count=4 bs=1 2> /dev/null)
|
|
||||||
[ "$hdr" = "CSYS" ] && config=$(find_mtd_part config)
|
|
||||||
if [ -n "$config" ]; then
|
|
||||||
mac0=$(hexdump -n 6 -e '6/1 ":%X"' -s 24583 $config | cut -c2-)
|
|
||||||
[ "$mac0" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac0
|
|
||||||
mac1=$(hexdump -n 6 -e '6/1 ":%X"' -s 24589 $config | cut -c2-)
|
|
||||||
[ "$mac1" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac1
|
|
||||||
fi
|
|
||||||
if [ -n $mac0 ]; then
|
|
||||||
logger -t kernel -p user.info "r6040: Setting MAC for eth0 to $mac0"
|
|
||||||
ifconfig eth0 hw ether $mac0
|
|
||||||
fi
|
|
||||||
if [ -n $mac1 ]; then
|
|
||||||
logger -t kernel -p user.info "r6040: Setting MAC for eth1 to $mac1"
|
|
||||||
ifconfig eth1 hw ether $mac1
|
|
||||||
fi
|
|
32
target/linux/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
Normal file
32
target/linux/rdc/base-files/lib/preinit/05_set_ether_mac_rdc
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2009 OpenWrt.org
|
||||||
|
|
||||||
|
. /etc/boot.sh
|
||||||
|
|
||||||
|
r6040_module() {
|
||||||
|
insmod r6040
|
||||||
|
}
|
||||||
|
|
||||||
|
set_ether_mac() {
|
||||||
|
kernel=$(grep magic /proc/mtd | awk -F: '{print $1}')
|
||||||
|
[ -n $kernel ] && hdr=$(dd if=/dev/$kernel count=4 bs=1 2> /dev/null)
|
||||||
|
[ "$hdr" = "CSYS" ] && config=$(find_mtd_part config)
|
||||||
|
if [ -n "$config" ]; then
|
||||||
|
mac0=$(hexdump -n 6 -e '6/1 ":%X"' -s 24583 $config | cut -c2-)
|
||||||
|
[ "$mac0" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac0
|
||||||
|
mac1=$(hexdump -n 6 -e '6/1 ":%X"' -s 24589 $config | cut -c2-)
|
||||||
|
[ "$mac1" = "FF:FF:FF:FF:FF:FF" -o "$mac0" = "0:0:0:0:0:0" ] && unset mac1
|
||||||
|
fi
|
||||||
|
if [ -n $mac0 ]; then
|
||||||
|
logger -t kernel -p user.info "r6040: Setting MAC for eth0 to $mac0"
|
||||||
|
ifconfig eth0 hw ether $mac0
|
||||||
|
fi
|
||||||
|
if [ -n $mac1 ]; then
|
||||||
|
logger -t kernel -p user.info "r6040: Setting MAC for eth1 to $mac1"
|
||||||
|
ifconfig eth1 hw ether $mac1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
boot_hook_add preinit_main r6040_module
|
||||||
|
boot_hook_add preinit_main set_ether_mac
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
mount -t proc none /proc
|
|
||||||
grep 'failsafe=' /proc/cmdline > /dev/null && export FAILSAFE=true
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_procfs() {
|
||||||
|
mount -t proc none /proc
|
||||||
|
}
|
||||||
|
|
14
target/linux/x86/base-files/lib/preinit/45_failsafe_x86
Normal file
14
target/linux/x86/base-files/lib/preinit/45_failsafe_x86
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
failsafe_wait() {
|
||||||
|
FAILSAFE=
|
||||||
|
grep 'failsafe=' /proc/cmdline > /dev/null && FAILSAFE=true && export FAILSAFE
|
||||||
|
if [ "$FAILSAFE" != "true" ]; then
|
||||||
|
preinit_net_echo "Please press button now to enter failsafe"
|
||||||
|
echo -n "Press CTRL-C or "
|
||||||
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true && export FAILSAFE
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
mount -t proc none /proc
|
|
||||||
grep 'failsafe=' /proc/cmdline && export FAILSAFE=true
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
do_mount_procfs() {
|
||||||
|
mount -t proc none /proc
|
||||||
|
}
|
||||||
|
|
||||||
|
|
14
target/linux/x86/olpc/base-files/lib/preinit/45_failsafe_x86
Normal file
14
target/linux/x86/olpc/base-files/lib/preinit/45_failsafe_x86
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2010 Vertical Communications
|
||||||
|
|
||||||
|
failsafe_wait() {
|
||||||
|
FAILSAFE=
|
||||||
|
grep 'failsafe=' /proc/cmdline > /dev/null && FAILSAFE=true && export FAILSAFE
|
||||||
|
if [ "$FAILSAFE" != "true" ]; then
|
||||||
|
preinit_net_echo "Please press button now to enter failsafe"
|
||||||
|
echo -n "Press CTRL-C or "
|
||||||
|
fs_wait_for_key f 'to enter failsafe mode' $fs_failsafe_wait_timeout && FAILSAFE=true && export FAILSAFE
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue