[syslinux] PROMPT=0/ESCAPE key SERIAL fun

Alexander Clouter alex at digriz.org.uk
Mon Aug 10 03:06:55 PDT 2009


Hi,

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: What soon grows old?  Gratitude.
                  		-- Aristotle




More information about the Syslinux mailing list