[syslinux] Structure of VBR in FAT32?

Avi Deitcher avi at deitcher.net
Tue Jan 2 23:38:24 PST 2018

Gene, thanks for doing "Reply-All". I only get digest, so this keeps me in
the loop. Appreciated.

> which appears to be included in diskstart.inc. I will have to dig in and
> see
> > how this all gets compiled (pointers always appreciated :-) ).
> Yes.

Is the build process documented? Or am I just going to have to plod through
the makefiles?

> As Ady said, embedded within the syslinux/extlinux installer.

Got it. And I did a byte comparison of ldlinux.bin/ldlinux.sys. Identical
except for the first 1024 bytes. First 512 are the VBR, as you described,
next 512 are all zeros (I assume for using with ext?).

> Actually, mildly more complex but similar.  Setup some basics, the
> first sector of ldlinux.sys, execute it.
> The first sector of ldlinux.sys sets up some more stuff, loads the
> rest of ldlinux.sys, checks integrity then continues.

So... VBR (i.e. first 512 bytes of ldlinux.bin) contains code that knows to
find and load first sector of ldlinux.sys. That in turn knows how to find
the rest of ldlinux.sys, and loads that. ldlinux.sys itself understands
fat32 well enough to find the rest of its modules, syslinux.cfg, etc.

> Actually, only the first sector of ldlinux.sys, computed after
> ldlinux.sys is copied and patched into the VBR by the installer.  The
> block map is in ldlinux.sys.
> >> At least one record stating N sectors at volume offset M
> >> needs to live in the VBR.  Often, only 1 record is needed.
> >
> > I didn't get this part. Record?
> It's more of a list.  The list has rows or records.  Each record
> indicates data about a block of the file ldlinux.sys.  This data is in
> fields for offset sector number of start and how many sectors are
> within the block.

Let me see if I get this.

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
5. Installer puts the first 512 bytes of ldlinux.bin into the boot sector
6. Installer modifies code in VBR (a specific byte?) to indicate which
block contains first 512 bytes of ldlinux.sys

On boot:

1. VBR is run (first 512 bytes of ldlinux.bin)
2. VBR knows how to find first block of ldlinux.sys
3. VBR loads first block of ldlinux.sys into memory and executes it
4. Code in memory and executing has map of all other blocks of ldlinux.sys,
so it loads them.
5. Now have all the code we need to read fat32 filesystem, so it does,
reads syslinux.cfg, loads c32 files, etc.

Is that roughly it? I assume extlinux does the same thing, just has some
more knowledge about other filesystems?

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