From 93e9a71538c18a979c4999b1d54dd64e59e967ac Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 25 Nov 2013 08:34:55 +0000 Subject: [PATCH] base-files: allow users to delect debug level during boot Signed-off-by: John Crispin SVN-Revision: 38909 --- package/base-files/files/lib/functions.sh | 20 +++++++++++++++ .../files/lib/preinit/30_failsafe_wait | 25 +++++++++++++------ package/system/procd/Makefile | 4 +-- package/utils/busybox/files/cron | 19 ++++++++++++++ .../etc/hotplug.d/firmware/10-rt2x00-eeprom | 3 ++- 5 files changed, 60 insertions(+), 11 deletions(-) diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh index 85ebc2aeb1..6f23e0b8b2 100755 --- a/package/base-files/files/lib/functions.sh +++ b/package/base-files/files/lib/functions.sh @@ -260,6 +260,26 @@ mtd_get_mac_ascii() [ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty" } +mtd_get_blob() +{ + local mtdname="$1" + local offset="$2" + local count="$3" + local firmware="$4" + local part + + part=$(find_mtd_part "$mtdname") + if [ -z "$part" ]; then + echo "mtd_get_blob: partition $mtdname not found!" >&2 + return 1 + fi + + dd if=$part of=$firmware bs=1 skip=$offset count=$count 2>/dev/null || { + echo "mtd_get_blob: failed to extract $firmware from $part" >&2 + return 1 + } +} + mtd_get_mac_binary() { local mtdname="$1" local offset="$2" diff --git a/package/base-files/files/lib/preinit/30_failsafe_wait b/package/base-files/files/lib/preinit/30_failsafe_wait index 6bce8ae49f..522565940c 100644 --- a/package/base-files/files/lib/preinit/30_failsafe_wait +++ b/package/base-files/files/lib/preinit/30_failsafe_wait @@ -5,7 +5,7 @@ fs_wait_for_key () { local timeout=$3 local timer - local do_failsafe + local do_keypress local keypress_true="$(mktemp)" local keypress_wait="$(mktemp)" local keypress_sec="$(mktemp)" @@ -40,6 +40,7 @@ fs_wait_for_key () { } & echo "Press the [$1] key and hit [enter] $2" + echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level" # if we're on the console we wait for input { while [ -r $keypress_wait ]; do @@ -48,14 +49,22 @@ fs_wait_for_key () { [ -n "$timer" ] || timer=1 timer="${timer%%\ *}" [ $timer -ge 1 ] || timer=1 - do_failsafe="" + do_keypress="" { - read -t "$timer" do_failsafe - if [ "$do_failsafe" = "$1" ]; then - echo "true" >$keypress_true - lock -u $keypress_wait - rm -f $keypress_wait - fi + read -t "$timer" do_keypress + case "$do_keypress" in + $1) + echo "true" >$keypress_true + ;; + 1 | 2 | 3 | 4) + echo "$do_keypress" >/tmp/debug_level + ;; + *) + continue; + ;; + esac + lock -u $keypress_wait + rm -f $keypress_wait } done } diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile index 6414f3cce9..3d4cedc353 100644 --- a/package/system/procd/Makefile +++ b/package/system/procd/Makefile @@ -1,14 +1,14 @@ include $(TOPDIR)/rules.mk PKG_NAME:=procd -PKG_VERSION:=2013-11-20 +PKG_VERSION:=2013-11-22 PKG_RELEASE=$(PKG_SOURCE_VERSION) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=git://nbd.name/luci2/procd.git PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=21d307367eb991f7494ce43087a5edb94288d08f +PKG_SOURCE_VERSION:=dc3988c38546c37a02030af8201048272caa7ded PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz CMAKE_INSTALL:=1 diff --git a/package/utils/busybox/files/cron b/package/utils/busybox/files/cron index 5e6b4bf3fe..8f54527805 100755 --- a/package/utils/busybox/files/cron +++ b/package/utils/busybox/files/cron @@ -6,10 +6,24 @@ START=50 USE_PROCD=1 PROG=/usr/sbin/crond +validate_cron_section() { + uci_validate_section system system "${1}" \ + 'cronloglevel:uinteger' +} + start_service () { [ -z "$(ls /etc/crontabs/)" ] && return 1 loglevel=$(uci_get "system.@system[0].cronloglevel") + + [ -z "${loglevel}" ] || { + /sbin/validate_data uinteger "${loglevel}" + [ "$?" -eq 0 ] || { + echo "validation failed" + return 1 + } + } + mkdir -p /var/spool/cron ln -s /etc/crontabs /var/spool/cron/ 2>/dev/null @@ -17,3 +31,8 @@ start_service () { procd_set_param command "$PROG" -f -c /etc/crontabs -l ${loglevel:-5} procd_close_instance } + +service_triggers() +{ + procd_add_validation validate_cron_section +} diff --git a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom index 40e17968cd..d3e0242355 100644 --- a/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom +++ b/target/linux/ramips/base-files/etc/hotplug.d/firmware/10-rt2x00-eeprom @@ -21,7 +21,8 @@ rt2x00_eeprom_extract() { rt2x00_eeprom_die "failed to extract from $mtd" } -[ -e /lib/firmware/$FIRMWARE ] && exit 0 +FW="/lib/firmware/$FIRMWARE" +[ -e "$FW" ] && exit 0 . /lib/ramips.sh