[syslinux] EFI: ipxe + syslinux = Failed to read blocks: 0xC

Patrick Masotta masottaus at yahoo.com
Fri Jul 31 05:25:34 PDT 2015


>>>
 Using VMware I built a test setup of a server with dhcp, tftp and a 
 http-server and several pxe-clients with EFI mode turned on. This setup 
 worked, albeit with the exponential-like decay of IO rate I described 
 earlier. The work-around of using HTTP works beautifully though.
<<<

""exponential-like decay of IO rate"" could you please post a link on 
your comments on this?
 

>>>
 So it was time for the next step. Migrate this setup to our automated 
 testing environment that runs under qemu-kvm. For this I had
 to use OVMF  so the nodes would boot in EFI mode (or should I say "UEFI
 mode" ?).  This setup uses ipxe roms  to boot over the network.
 
 The short story is that I never got further than syslinux proclaiming 
 "Failed to read blocks: 0xC" before even getting to the stage where it 
 tries to load ldlinux.e64. Searching for answers I found a thread on the 
 qemu-devel list discussing this problem. The user mjt (Michael Tokarev, 
 also on this list) found a branch of ipxe that contains two patches that 
 should solve this problem. See 
 http://www.syslinux.org/archives/2015-June/023582.html for more on this. 
 Those patches haven't been merged to the master branch on ipxe.org yet.

 Unfortunately whichever version of IPXE or syslinux I try, the result is 
 always:
 
     iPXE 1.0.0+ (87981) -- Open Source Network
 Boot Firmware --
     http://ipxe.org
     Features: DNS HTTP TFTP EFI Menu
 
     net0: ec:b1:d7:75:e5:24 using NII on NII-PCI02:00.0 (open)
        [Link:down, TX:0 TXE:0 RX:0 RXE:0]
        [Link status: Unknown (http://ipxe.org/1a086194)]
     Configuring (net0 ec:b1:d7:75:e5:24)...... ok
     net0: 10.X.167.253/255.255.0.0 gw 10.X.255.254
     Next server: 10.X.255.254
     Filename: efi64/syslinux-87020-debug.efi
    
 tftp://10.X.255.254/efi64/syslinux-87020-debug.efi... ok
     efi_rdwr_sectors: read 1 bytes
     Failed to read blocks: 0xC
 
 In this screenshot the iPXE version is 87981 for commit 87981bb6. The 
 syslinux version here is 87020-or for commit 8702009f plus one extra 
 printf I added, that shows me the error happens on the very first call 
 to efi_rdwr_sectors while reading one byte.
 
 This iPXE comes from git://git.kraxel.org/ipxe, but I also tried stock 
 version 1.0.0+ and 2b15ae55 and the newest ae7f22eb2  from 
 git://git.ipxe.org/ipxe.git. For syslinux I used the precompiled binary 
 from syslinux-6.03.tar.gz, the result of 'make spotless; make efi64' on 
 that tar. Furthermore I checked out the master branch from 
 git://repo.or.cz/syslinux.git which gave me the 8702009f
 commit. I also  tried 23b2707b for reasons I forgot.
 
 For OVMF I tried both
 edk2.git-ovmf-x64-0-20150716.b1120.g387e7c1.noarch 
 from https://www.kraxel.org/repos/jenkins/ and a freshly built version 
 of commit 2ad9cf37 from https://github.com/tianocore/edk2.git.
 
 But I think I can rule out any influence from either qemu or
 ovmf/tianocore/edk2 or some misconfiguration of libvirt on my behalf, 
 because while I was busy troubleshooting this, a shiny new piece of real 
 hardware arrived: a HP Proliant DL360 gen9. So I got to play with real 
 hardware!
 
 Unfortunately, the error above was actually cut and pasted from the 
 ipmi-console session to this HP...
 
 Needless to say I tried all combinations of ipxe + syslinux on this HP 
 as well, but no luck whatsoever. Always:
 
      >> Booting Embedded LOM 1
 Port 1 : HP Ethernet 1Gb 4-port 331i     Adapter - NIC (PXE IPv4)
 
      >> Booting PXE over IPv4.
        Station IP address is 10.X.167.251
 
        Server IP address is 10.X.255.254
        NBP filename is efi64/snponly.efi
        NBP filesize is 119488 Bytes
       Downloading NBP file...
 
        NBP file downloaded successfully.
     iPXE initialising devices...ok
 
 
 
     iPXE 1.0.0+ (87981) -- Open Source Network
 Boot Firmware --     http://ipxe.org
     Features: DNS HTTP TFTP EFI Menu
 
     net0: ec:b1:d7:75:e5:24 using NII on NII-PCI02:00.0 (open)
        [Link:down, TX:0 TXE:0 RX:0 RXE:0]
        [Link status: Unknown (http://ipxe.org/1a086194)]
     Configuring (net0 ec:b1:d7:75:e5:24)...... ok
     net0: 10.X.167.253/255.255.0.0 gw 10.X.255.254
     Next server: 10.X.255.254
     Filename: efi64/syslinux-87020-or.efi
    
 tftp://10.X.255.254/efi64/syslinux-87020-or.efi... ok
     efi_rdwr_sectors: read 1 bytes
     Failed to read blocks: 0xC
 
 While playing with this HP I found there is a misunderstanding worldwide 
 about the contents of dhcp option 93, but this was also discussed 
 before: http://www.syslinux.org/archives/2014-October/022684.html.
 It  looks like all open source authors correctly use the definition from 
RFC  4578 whereas most hardware vendors stick with the definition
 from the  DHCPv6 specs which has x64 and EBC the wrong way around. 
The HP is no  exception here, but this made it very easy to chainload
 syslinux after ipxe. If dhcpd receives a 0x07, it will respond with
 ipxe.efi. This will  then do a request again with the correct (0x09) architecture
 upon which dhcpd responds with syslinux.efi. 
>>>

OK I got lost.
are you saying you finally were able to chainload syslinux.efi on the HP??
by doing what?

Best,
Patrick



More information about the Syslinux mailing list