UNSOLVED EFI Chainloading Failure - Venue 11 x86

  • Server
    • FOG Version: 1.3.4 (SVN Revision 6066)
    • OS: Ubuntu Server 14.04.5 x64
    • Service Version: N/A
    • OS: Win 8.1 x86

    Hi all,

    I’m having difficulty with getting my Venue 11 tablet to do any actions after loading the FOG iPXE menu.
    The boot process is fine and the menu loads up, but no matter what option I choose, or what action I schedule, I get a chainloading failure.

    I think the issue may be that this is a Dell Venue 11 5130 32-bit, but I’m finding that the bzimage32 and init_32.xz are not pulling down. I have all the Vendor Classes for x64 and x86 setup in my DHCP Server (Win Server 2012) as per the Wiki article.
    However I don’t really know what will tell the process to push the 32bit versions of the bzImage and init.xz files.

    I have tried using i386-efi/ipxe.efi and the i386-efi/snponly.efi, but saw no difference. I also tried using EXIT and REFIND_EFI exit options with no difference.

    I feel like I’m missing something simple.

    alt text

  • @amo862 said in EFI Chainloading Failure - Venue 11 x86:

    However, is there a way that I could write a separate boot.php file that only called i386 boot files and specify it in the TFTP x86 efi files or DHCP boot options or something?

    Do what JJ Fulmer below said, that’s the best advice.

  • Testers

    @amo862 While I’m sure it would be fun to make such custom code changes, I think you can just make a group for the venue tablets and similar devices that sets all devices in that group to load the 32bit kernel and inits. That’s what I would do personally.

  • @Wayne-Workman Thanks Wayne.
    Switching the path to i386-7156-efi/ipxe.efi or snponly.efi did not make a difference in the behavior.

    Understanding the way it decides to send the 32bit or 64bit boot files did help though. It continued to send the 64 bit files, which led to the chainloading failure. However, from within the ipxe shell, I manually loaded the bzImage32 and init_32.xz files and was able to get it to boot.
    (I used this command from the ipxe shell:)

    kernel http://[FOGServer]/fog/service/ipxe/bzImage32 loglevel=4 initrd=http://[FOGServer]/fog/service/ipxe/init_32.xz root=/dev/ram0 rw ramdisk_size=127000 web=[FOGServer]/fog/ consoleblank=0 rootfstype=ext4 loglevel=4
    imgfetch http://[FOGServer]/fog/service/ipxe/init_32.xz

    Following this, I specified the Host Kernel and Host Init options for that Host’s config, and I’ve now been able to start capturing an image.

    I think it boils down to the cpuid command, ultimately. This tablet is a Dell Venue 11 5130 (32bit), but has a 64bit processor. So only the 32bit boot files work, but cpuid determines its an x86_64 processor and loads the 64bit bzImage and init.xz.
    Since this is clearly an exception to the norm, I’m not too worried about it.

    However, is there a way that I could write a separate boot.php file that only called i386 boot files and specify it in the TFTP x86 efi files or DHCP boot options or something?

  • Testers

    you can also manually specify the kernel and init in the fog gui for that host

  • @amo862 Try these files:
    ipxe7156.efi and i386-7156/ipxe.efi

    Which kernel that gets used is dynamic. If you look here in your web browser, replacing the Xs with your FOG Server’s IP address: x.x.x.x/fog/service/ipxe/boot.php You’ll see a line that looks like this near the top:

    cpuid --ext 29 && set arch x86_64 || set arch i386

    That’s what sets the arch parameter inside of the iPXE environment, it is what determines which kernel arch gets used - this is all automatic.