diff options
author | Daniel Dickinson <daniel@cshore.neomailbox.net> | 2010-09-23 13:58:05 +0000 |
---|---|---|
committer | Daniel Dickinson <daniel@cshore.neomailbox.net> | 2010-09-23 13:58:05 +0000 |
commit | ce5a30ba1013ae8b1cecd64148074bcb9ac11841 (patch) | |
tree | ac8c2aadbe645dd51e97ca474cb1ea5b86257ab6 /package/base-files/files/lib/functions/boot.sh | |
parent | 2a1ba1dec56e54fe9c89ef1c4d8103718101845d (diff) | |
download | master-187ad058-ce5a30ba1013ae8b1cecd64148074bcb9ac11841.tar.gz master-187ad058-ce5a30ba1013ae8b1cecd64148074bcb9ac11841.tar.bz2 master-187ad058-ce5a30ba1013ae8b1cecd64148074bcb9ac11841.zip |
[package] base/block-extroot, base/block-mount: Modified preinit and block-extroot and
block-mount so that use of block-mount and block-extroot do not require that block-extroot,
block-mount, nor the kernel modules they depend, on are required to included in the image.
That is block-extroot and dependencies may now be installed as modules onto the jffs2 part of
a squashfs system and it will work.
In addition packages which are installed into the jffs2 of a squashfs system may now affect
preinit, so long as they do not require execution of commands that occur before the merging of
the jffs2 and built-in (squashfs) preinit scripts is done.
Thanks jow for the preinit merge stuff!
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@23110 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/base-files/files/lib/functions/boot.sh')
-rw-r--r-- | package/base-files/files/lib/functions/boot.sh | 77 |
1 files changed, 56 insertions, 21 deletions
diff --git a/package/base-files/files/lib/functions/boot.sh b/package/base-files/files/lib/functions/boot.sh index 91ab9306e1..fc93eba49d 100644 --- a/package/base-files/files/lib/functions/boot.sh +++ b/package/base-files/files/lib/functions/boot.sh @@ -6,19 +6,66 @@ mount() { /bin/busybox mount "$@" } +boot_hook_splice_start() { + export -n PI_HOOK_SPLICE=1 +} + +boot_hook_splice_finish() { + local hook + for hook in $PI_STACK_LIST; do + local v; eval "v=\${${hook}_splice:+\$${hook}_splice }$hook" + export -n "${hook}=${v% }" + export -n "${hook}_splice=" + done + export -n PI_HOOK_SPLICE= +} + +boot_hook_init() { + local hook="${1}_hook" + export -n "PI_STACK_LIST=${PI_STACK_LIST:+$PI_STACK_LIST }$hook" + export -n "$hook=" +} + boot_hook_add() { - local hook="${1}_hook" - local value="$2" - local sep=" " - - eval "$hook=\"\${$hook:+\${$hook}\${value:+\$sep}}\$value\"" + local hook="${1}_hook${PI_HOOK_SPLICE:+_splice}" + local func="${2}" + + [ -n "$func" ] && { + local v; eval "v=\$$hook" + export -n "$hook=${v:+$v }$func" + } +} + +boot_hook_shift() { + local hook="${1}_hook" + local rvar="${2}" + + local v; eval "v=\$$hook" + [ -n "$v" ] && { + local first="${v%% *}" + + [ "$v" != "${v#* }" ] && \ + export -n "$hook=${v#* }" || \ + export -n "$hook=" + + export -n "$rvar=$first" + return 0 + } + + return 1 } boot_run_hook() { - local boot_func - for boot_func in $(eval "echo \"\$${1}_hook\""); do - $boot_func "$1" "$2" - done + local hook="$1" + local func + + while boot_hook_shift "$hook" func; do + local ran; eval "ran=\$PI_RAN_$func" + [ -n "$ran" ] || { + export -n "PI_RAN_$func=1" + $func "$1" "$2" + } + done } find_mtd_part() { @@ -99,15 +146,3 @@ ramoverlay() { fopivot /tmp/root /rom 1 } -pi_include() { - if [ -f "/tmp/overlay/$1" ]; then - . "/tmp/overlay/$1" - elif [ -f "$1" ]; then - . "$1" - else - echo "WARNING: $1 not found" - return 1 - fi - return 0 -} - |