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

add preinit modularization work by Daniel Dickinson (cshore)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19331 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
nbd
2010-01-25 17:11:17 +00:00
parent 99c311e86c
commit a9929695c6
79 changed files with 1449 additions and 438 deletions

View 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
}

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View File

@@ -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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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