[syslinux] Structure of VBR in FAT32?

Avi Deitcher avi at deitcher.net
Sat Jan 6 09:34:21 PST 2018

> > Is the build process documented? Or am I just going to have to plod
> through
> > the makefiles?
> I don't think so.

Oh well...

> > 1. Run installer
> > 2. Installer loads ldlinux.sys onto the filesystem (and copies
> ldlinux.c32,
> > but irrelevant for now).
> > 3. Installer calculates which blocks in the filesystem contain
> ldlinux.sys
> > 4. Installer modifies first sector of ldlinux,sys to contain a list of
> all
> > of the other locations of ldlinux.sys
> Almost.  The blockmap MUST have at least one record in the first
> sector but the subsequent blockmap records may exist later.  See
> "SectorPtrs" and "rl_checkpt_overflow".  I believe 192 entries are
> currently allocated.

I will look at the code to try and get it. All of this basically is, "how
do we bootstrap a program that knows how to read FAT filesystem, when it
itself is on that filesystem and we don't know how to read it yet."

192 entries = 192 potential sectors for ldlinux.sys?

> > 5. Installer puts the first 512 bytes of ldlinux.bin into the boot sector
> ... by reading the existing VBR, modifying ONLY the bytes allowed for
> code, then writing the modified VBR back.

So as not to ruin the EBPB or signature, e.g.?

> > 6. Installer modifies code in VBR (a specific byte?) to indicate which
> block
> > contains first 512 bytes of ldlinux.sys
> It's 8 bytes for a 64-bit address located at the labels "Sect1Ptr0"
> and "Sect1Ptr1".  These are NOT at fixed offsets and might move based
> on revisions of diskboot.inc.

That works. I will read it.

> I'd suggest against trying to make a script to install.

I have been looking at trying to leverage the installation without the
installer. How did you know? :-)

If you do that, you'd need to have detailed knowledge of how some of these
> structures work and how they've changed over time.

That was what I was afraid of...

> extlinux lets the Linux kernel do all of the heavy lifting of
> installing the file then finding its blocks then performs the same
> modifications as syslinux does on FAT12/FAT16/FAT32.  extlinux has
> less knowledge about ext2/ext3/ext4 and FAT12/FAT16/FAT32 file systems
> (basically 0 outside the FAT32 VBR format) than syslinux does about
> FAT12/FAT16/FAT32.

"kernel do all of the heavy lifting", i.e. it doesn't actually try to
modify sectors and find blocks, but instead relies on the mounted
filesystem and driver? Ah, is *that* why extlinus requires the filesystem
to be mounted to run install?

Thanks again to both of you!

Avi Deitcher
avi at deitcher.net
Follow me http://twitter.com/avideitcher
Read me http://blog.atomicinc.com

More information about the Syslinux mailing list