[syslinux] Problems booting from local hd

Stefan Titze stefan.titze at baramundi.de
Thu Apr 26 06:58:17 PDT 2012


Hi,

I've got a question regarding pxelinux:

It seems that there is a buck in syslinux 3.86 (or still is in the current build) in the reset_pxe function. If I call "syslinux_local_boot(0)" (in a COM32 binary) the KeepPXE variable is always 1 which resets the PXE stack instead of unloading it:

local_boot:
		push cs
		pop ds
		mov [LocalBootType],ax
		call vgaclearmode
		mov si,localboot_msg
		call writestr_early
		; Restore the environment we were called with
		call reset_pxe
.
reset_pxe:
		or byte [KeepPXE],1
		; Fall through

unload_pxe:
		push ds
		push es

		mov ax,cs
		mov ds,ax
		mov es,ax

		cmp byte [KeepPXE],0		; Should we keep PXE around?
		jne do_reset_pxe
 
on Dell Precision M4600 Laptops (BIOS Rev. A08) reseting the PXE stack causes a reboot and Dell Latitude E5520 laptops (BIOS Rev. A05) start over with another PXE boot (-> PXE boot cycle until not enough free memory is left over to startup  syslinux).

With syslinux 4.05 both laptops try to exit PXE but they will freeze before they can boot the local disk.

The question is why is it necessary to reset PXE when local_boot (0) is called? I looked in the syslinux 3.61 source code (which works great by the way) and there the PXE stack will not be resetted.

If I change the code to (quick fix):

reset_pxe:
		;or byte [KeepPXE],1
		; Fall through

unload_pxe:
		push ds
		push es

everything works fine again.

Thanks in advance


Stefan Titze
(Developement, baramundi software AG)




More information about the Syslinux mailing list