failsafe: run on all consoles listed in /proc/cmdline
[openwrt/staging/dedeckeh.git] / package / base-files / files / lib / preinit / 30_failsafe_wait
index f90de71d40f2434acdecdfc568423f97abc29229..9ab2e8bd4d8bc79b1c877b5df033ecf13b1f0bc9 100644 (file)
@@ -40,35 +40,39 @@ fs_wait_for_key () {
                rm -f $keypress_wait
        } &
 
-       [ "$pi_preinit_no_failsafe" != "y" ] && 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
-                       timer="$(cat $keypress_sec)"
+       local consoles="$(sed -e 's/ /\n/g' /proc/cmdline | grep '^console=' | sed -e 's/^console=//' -e 's/,.*//')"
+       [ -n "$consoles" ] || consoles=console
+       for console in $consoles; do
+               [ -c "/dev/$console" ] || continue
+               [ "$pi_preinit_no_failsafe" != "y" ] && echo "Press the [$1] key and hit [enter] $2" > "/dev/$console"
+               echo "Press the [1], [2], [3] or [4] key and hit [enter] to select the debug level" > "/dev/$console"
+               {
+                       while [ -r $keypress_wait ]; do
+                               timer="$(cat $keypress_sec)"
 
-                       [ -n "$timer" ] || timer=1
-                       timer="${timer%%\ *}"
-                       [ $timer -ge 1 ] || timer=1
-                       do_keypress=""
-                       {
-                               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
-       }
+                               [ -n "$timer" ] || timer=1
+                               timer="${timer%%\ *}"
+                               [ $timer -ge 1 ] || timer=1
+                               do_keypress=""
+                               {
+                                       read -t "$timer" do_keypress < "/dev/$console"
+                                       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
+               } &
+       done
        lock -w $keypress_wait
 
        keypressed=1