[syslinux] Chainloading in EFI

githlar at gmail.com githlar at gmail.com
Thu Aug 8 07:32:17 PDT 2013


Hello all =D

Just to be up-front, I'm not a novice Syslinux user. I've been playing
around with it for a couple years on-and-off. However, I may not be totally
comfortable with the 5.00+ layout as of yet (as far as dependencies and
such). That said, I should have all the dependencies in place for my 6.00
test bed:

syslinux.efi
syslinux.e64
chain.c32
libutil.c32
libcom32.c32

Being as all I'm trying to do is chain from the command line, that is
adequate for now.

I started messing around with Syslinux 6.01 because I'm excited about the
possibility of being able to boot from either EFI or BIOS into the same
menus, rather than having to maintain two separate menus (GRUB and
Syslinux) for my multi-boot USB.

Of course, BIOS side of this USB works just fine, always has. And, it
continues to work with a new GPT partition table thanks to gptmbr.bin.
Excellent.

However, I ran into some issues once I got the EFI Syslinux up and running.
My intention was to bootstrap the BIOS MBR (or even the partition boot
record) from the EFI Syslinux. My reasoning behind this is that many of my
sections of my multi-boot USB use Syslinux 4.x and, to change to 6.00
across the board is just such a pain. In addition, since Syslinux only
knows about the filesystem from which it is booted, it's not possible to
access the data that I need from the main partition (I am using a standard
two-partition layout -- one ESP and one data, and Syslinux is booted from
the ESP of course). So, I figured that chain.c32 was my logical answer.
But, no matter what I try, chain.c32 just doesn't work. I've done things
like:

chain.c32 boot
chain.c32 boot 0
chain.c32 boot 2
chain.c32 hd0 0
chain.c32 hd0 2
chain.c32 guid=the-guid

And several others, however the universal answer from chain.c32 is... well,
nothing. As soon as I hit [enter] it appears to hang. This is using the
pre-compiled 6.01 version. I tried compiling 6.02-pre16 and it compiled
fine (after installing gnu-efi 3.0u), however it just didn't want to boot.
Also, I'm doing my testing in Qemu using the latest Tianocore.

My main question: How do I chainload the master/partition boot record of a
disk from EFI Syslinux?

I seem to be at my wit's end here, so I figured I'd drop a line to the
wizards here on the mailing list. Honestly, I could probably solve my
problem by simply using one partition, but I would like to work with this
configuration if at all possible.

I'm sure this is probably just a matter of not understanding some nuance of
EFI, and I'm fine with such an answer.

A couple things that I'm curious about:

1. Is it even technically possible to bootstrap a BIOS MBR from EFI?
2. An MBR is inherently 16 or 32-bit, correct? So, is the fact that I'm
booting a legacy (non-64-bit) MBR with the efi64 Syslinux an issue?

Charles R.


More information about the Syslinux mailing list