[syslinux] syslinux 3.11 patch for handling both KVM and serialconsole input

Miller, Shao Shao.Miller at yrdsb.edu.on.ca
Tue Jun 30 14:10:07 PDT 2009


This might be nicer if there was a way to gain this functionality
without requiring all current Syslinux users to rewrite their
config-files.

I believe that core code is being re-worked during a Google Summer of
Code project this summer.  With that project's eventual success, perhaps
this could be reconsidered at that time?

- Shao Miller

-----Original Message-----
From: syslinux-bounces at zytor.com [mailto:syslinux-bounces at zytor.com] On
Behalf Of Alford, Seth
Sent: Tuesday, June 30, 2009 16:22
To: syslinux at zytor.com
Subject: [syslinux] syslinux 3.11 patch for handling both KVM and
serialconsole input

We modified our copy of syslinux.  We're now sharing those
modifications.  That's so that:

1.  We fulfill our requirements under the GPL
2.  Our modifications might be picked up and included in the base
    code.  That way we wouldn't have to make the same
    modifications, again, later.

Since we're using CentOS 5.3, and CentOS 5.3 derives from RHEL
5.3, and RHEL 5.3 uses syslinux 3.11, we modified syslinux
version 3.11.

The modification are in the form of a patch, which appears below.

Our Linux systems may have an old-style "green screen" terminal
attached to the serial console.  Or they may have a keyboard, VGA
display and mouse (KVM.)  Originally, our isolinux menu more or
less offered the user the choices of

1.  Install using the KVM
2.  Install using the serial terminal
3.  Restore from tape using the KVM
4.  Restore from tape using the terminal
5.  Use rescue mode from the KVM
6.  Use rescue mode from the terminal

The user was supposed to input a number, 1 through 6, based on
what the user wanted to do and what type of display the system
had.

We decided that syslinux itself could figure out whether input
came from the KVM or a serial console.  So all the user needed to
do was figure out whether to install, restore, or use rescue
mode.  That way, the user would only have to figure out a 3 item
menu, rather than a 6 item menu.  So now the user sees a menu
which looks more or less like:

                        If you want to..........type:

                          Restore.................1
                          Install.................2
                          Use rescue mode.........3

The user still inputs a number, 1 through 3.

To make this work, we added a FromFlag byte before the command
line buffer in the syslinux code.  If the input came from the
serial terminal, FromFlag got a "-" character (without the
quotes) stored in it.  If the input came from the KVM, FromFlag
got a "+" character (without quotes).  In the isolinux.cfg menu,
we created entries for +1, -1, +2, -2, +3, and -3, with
appropriate flags for serial console for the "-" entries.  The
"1" entries do a restore.  The "2" entries do an install.  The
"3" entries put the system into rescue mode.  With the patch,
syslinux also tries the user input with the +/- prepended.

Here's the isolinux.cfg menu:

----isolinux.cfg menu starts----
serial 0 38400
prompt 1
timeout 0
display boot.msg
F1 boot.msg
label +1
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:isolinux/ks_restore.cfg text
label -1
  kernel vmlinuz
  append initrd=initrd.img console=ttyS0,38400n8
ks=cdrom:isolinux/ks_restore.cfg text
label +2
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:isolinux/ks.cfg text
label -2
  kernel vmlinuz
  append initrd=initrd.img console=ttyS0,38400n8
ks=cdrom:isolinux/ks.cfg text
label +3
  kernel vmlinuz
  append rescue initrd=initrd.img text
label -3
  kernel vmlinuz
  append rescue initrd=initrd.img console=ttyS0,38400n8 text
----isolinux.cfg menu ends----

David Parsons, who is no longer with ADP, did most of the
modifications which made this work.

--Seth Alford
ADP Dealer Services
seth_alford at adp.com

----patch follows----
--- s_yslinux-3.11.orig/conio.inc	2005-08-18 13:53:39.000000000
-0700
+++ s_yslinux-3.11.new/conio.inc	2009-03-19 17:29:55.000000000
-0700
@@ -356,8 +356,10 @@
 .serial:	xor ah,ah		; Avoid confusion
 		xchg dx,bx		; Data port
 		in al,dx
+		mov byte [FromFlag],45  ; '-' flags input from serial
 		ret
-.kbd:		mov ah,10h		; Get keyboard input
+.kbd:		mov byte [FromFlag],43  ; '+' flags input from console
+		mov ah,10h		; Get keyboard input
 		int 16h
 		cmp al,0E0h
 		jnz .not_ext
--- s_yslinux-3.11.orig/parseconfig.inc	2005-08-30 15:36:49.000000000
-0700
+++ s_yslinux-3.11.new/parseconfig.inc	2009-03-20 13:51:17.000000000
-0700
@@ -393,6 +393,7 @@
 
 		section .latebss
                 alignb 4		; For the good of REP MOVSD
+FromFlag	resb 1			; ADP: becomes '-' for serial,
'+' for kbd
 command_line	resb max_cmd_len+2	; Command line buffer
 		alignb 4
 default_cmd	resb max_cmd_len+1	; "default" command line
--- s_yslinux-3.11.orig/ui.inc	2005-08-30 15:54:14.000000000 -0700
+++ s_yslinux-3.11.new/ui.inc	2009-03-20 15:12:45.000000000 -0700
@@ -196,6 +196,13 @@
 ; First we need to mangle the kernel name the way DOS would...
 ;
 		mov si,command_line
+		call find
+		mov si,FromFlag
+		call find
+		mov si,command_line
+		jmp bad_kernel
+
+find:
                 mov di,KernelName
                 push si
                 push di
@@ -346,6 +353,8 @@
 		add bx,byte 4
 		cmp bx,exten_table_end
 		jna .search_loop		; allow == case (final
case)
+		ret
+
 		; Fall into bad_kernel
 ;
 ; bad_kernel: Kernel image not found


This message and any attachments are intended only for the use of the
addressee and may contain information that is privileged and
confidential. If the reader of the message is not the intended recipient
or an authorized representative of the intended recipient, you are
hereby notified that any dissemination of this communication is strictly
prohibited. If you have received this communication in error, please
notify us immediately by e-mail and delete the message and any
attachments from your system.

_______________________________________________
Syslinux mailing list
Submissions to Syslinux at zytor.com
Unsubscribe or set options at:
http://www.zytor.com/mailman/listinfo/syslinux
Please do not send private replies to mailing list traffic.




More information about the Syslinux mailing list