[syslinux] pxelinux 6.03 in UEFI qemu/tianocore/ovmf: does not work

Michael Tokarev mjt at tls.msk.ru
Tue Nov 18 23:49:06 PST 2014


I played with UEFI PXE booting the other day, and as usual,
used qemu/kvm virtual machine for initial testing/debugging,
because it is way easier and faster for this task than using
a real hardware.

However, it looks like either qemu or {pxe,sys}linux 6.03 is
buggy, -- the two does not play well together.

When booting, the system successfully loads syslinux.efi, at
least the tftp server says it successfully sent that file, and
the firmware reports that it successfully loaded.  But this is
the only file which is attempted to be downloaded.  Right after
loading it, the client says it can't read that file.

The boot screen looks like this:

 iPXE 1.0.0+git-20141004.86285d1-1 -- Open Source Network Boot Firmware -- http://ipxe.org
 Features: HTTP DNS TFTP EFI Menu

 net0: 52:54:00:12:34:56 using 82540em on PCI00:03.1 (open)
   [Link:up, TX:0 TXE:0 RX:0 RXE:0]
 Configuring (net0 52:54:00:12:34:56)...... ok
 net0: gw
 Next server:
 Filename: EFI64/syslinux.efi
 tftp:// ok
 Failed to read blocks: 0xC

It does not even _try_ to load ldlinux.e64, because apparently
it fails to execute syslinux.efi which should do that.

I used several versions of qemu supporting OVMF (which is a
tianocore, aka UEFI firmware, "bios"), and the result is the
same.  I used several different (emulated) network cards
in the VM, including virtio-net, e1000, rtl8139 -- it makes
no difference.

Current testing is done using qemu-2.1.2 (from debian jessie
package), OVMF 0~20131112.2590861a-2 and ipxe boot roms (these
are used by qemu for pxe booting) 1.0.0+git-20141004.86285d1.
Qemu command line:

  qemu-system-x86_64 -enable-kvm -m 512 -bios OVMF.fd \
    -netdev tap,id=n -device e1000,netdev=n

Syslinux is from syslinux-6.03, binaries as shipped in the
tarball downloaded from kernel.org.  dhcp and tftp are
provided by dnsmasq version 2.72-2.

Since no config file is read at all, I'm not providing it.

What's interesting is that other efi bootloaders, such
as refind, works fine when loaded the same way (by using
different file= option in dhcp server), -- so far, only
syslinux+ovmf does not work.

Bare-metal HW boots from this server just fine -- after
reading syslinux.efi it reads ldlinux.e64, loads config
from pxelinux.cfg/* and proceeds with menu/modules etc.
I tried several efi-enabled systems with different firmware,
all have no probs booting from this.



More information about the Syslinux mailing list