[syslinux] PROMPT=0/ESCAPE key SERIAL fun

Alexander Clouter alex at digriz.org.uk
Mon Aug 17 00:45:01 PDT 2009


Hi,

No love from anyone eh? :-/

Regards

* Alexander Clouter <alex at digriz.org.uk> [2009-08-10 11:06:55+0100]:
>
> For some time now I have been using pxelinux to add a helpful 
> 'administrator' boot mode to our workstations with the following 
> 'pxelinux.cfg/default' config:
> ----
> DEFAULT local
> 
> PROMPT       0
> 
> TIMEOUT      0
> TOTALTIMEOUT 1
> ONTIMEOUT    menu
> 
> ALLOWOPTIONS 0
> NOESCAPE     0
> 
> LABEL local
>   LOCALBOOT 0
> 
> LABEL menu
>   CONFIG /pxelinux.cfg/default-menu
> ----
> 
> This is great as by default it goes straight to a local harddisk boot 
> however if you hold down one of the escape (modifier) keys on boot then 
> it drops you into a console menu.
> 
> As my heart lives in ARM/MIPS/SPARC I felt it was about time to add 
> serial support to our PXE booting fun and so slipped in the SERIAL line 
> at the top.  It works (as in I see all the serial output) but of course 
> the serial console has no concept of modifier keys and so I cannot 
> escape off into the 'default-menu'.
> 
> No problem I thought, I'll patch some sourcecode:
> ----
> alex at berk:/usr/src$ diff -u syslinux-3.82/core/ui.inc.orig 
> syslinux-3.82/core/ui.inc
> --- syslinux-3.82/core/ui.inc.orig      2009-08-07 17:53:57.419472369 +0100
> +++ syslinux-3.82/core/ui.inc   2009-08-07 20:31:19.868015273 +0100
> @@ -48,6 +48,16 @@
>  ;
>  ; Check whether or not we are supposed to display the boot prompt.
>  ;
> +check_for_key_serial:
> +               mov dx,[SerialPort]             ; No serial port -> no input
> +               and dx,dx
> +               jz check_for_key
> +;              call pollchar
> +;              jz check_for_key
> +               call reset_idle
> +               call getchar
> +               cmp al,1Bh                      ; <ESC>
> +               je enter_command
>  check_for_key:
>                 test byte [KbdFlags],5Bh        ; Shift Alt Caps Scroll
>                 jnz enter_command
> ----
> 
> Now, if I hold the escape[1] key down on boot from the serial port it 
> works great.  The problem is that if I don't press a key the boot 
> process blocks until it gets a keypress.  Annoyingly 'pollchar' seems to 
> do nothing useful here (just returns stating no key has been pressed) 
> and the only way I can get it to function is to force calling 'getchar'.
> 
> Any ideas how to fix this, this would be *really* handy :)
> 
> Cheers
> 
> [1] I felt escape was appropriate as it is completely inappropriate when
> 	sent from the keyboard.  The downside is you get a looping in 
> 	the reloading of the 'default-menu' until you stop holding it 
> 	down (maybe backspace, 08h, is more suitable?) but as the admin 
> 	menu is rarely called upon and the issue is just cosmetic I'm 
> 	not really bothered

-- 
Alexander Clouter
.sigmonster says: Hummingbirds never remember the words to songs.




More information about the Syslinux mailing list