Library modules

From Syslinux Wiki
Revision as of 11:21, 5 June 2014 by Ady (talk | contribs) (All Syslinux variants need an additional ldlinux module: Add keywords.)

Jump to: navigation, search


In versions prior to 5.00, almost all c32 modules were "stand alone"; adding the relevant module file into the adequate directory would be enough so to make it work as expected.

Since version 5.00, some c32 modules need additional files (libraries) so to work correctly.

This might sound as an unnecessary complication for users already used to the "stand alone" ways, but it will eventually allow to add new features that are otherwise not possible or more difficult to achieve.

Since version 5.00, all Syslinux variants require an additional module, ldlinux, to be loaded too. Specifically, ldlinux.c32 (BIOS), ldlinux.e32 (EFI IA32) or ldlinux.e64 (EFI X64). Note that EFI is supported since Syslinux 6.00.

Syslinux ".c32" modules now depend on library modules such as libcom32.c32, libgpl.c32, liblua.c32, libmenu.c32, libutil.c32.

Since Syslinux 6.00, there are respective binary files (e.g. boot loaders, Syslinux modules) under respective bios, efi32, efi64 directories.

All Syslinux variants need an additional ldlinux module

Since version 5.00, when a SYSLINUX or EXTLINUX installer is used, the relevant boot sector will be modified and two files will be added to the "installation directory": the ldlinux.sys boot loader file, and an auxiliary ldlinux.c32 file. Note that these two files are not necessary so to execute the installers; they are already embedded in the installers themselves.

For other Syslinux variants (PXELINUX, ISOLINUX) booting BIOS firmware, the second file, ldlinux.c32, needs to be manually added, just as the boot loader. Both files shall match the same version. For example, before building a new ISOLINUX image, two files are now needed: the isolinux.bin boot loader file, and the same auxiliary ldlinux.c32 file.

Similarly, Syslinux variants booting (U)EFI firmware also require at least two files; the syslinux.efi boot loader (from the respective efi32 or efi64 directories), and the respective ldlinux module: ldlinux.e32 for EFI IA32, ldlinux.e64 for EFI X64.

Syslinux Modules by Firmware and Architecture

Starting from Syslinux 6.00, binary files included in official Syslinux releases are separated by Firmware and Architecture. There are respective binary files under respective bios, efi32, efi64 directories.

Note that only the ldlinux module changes its filename's extension according to firmware and architecture. All other Syslinux modules remain as *.c32.

So now there are several Syslinux modules with the same filename. For example, there are "bios/com32/menu.c32", "efi32/com32/menu.c32", "efi64/com32/menu.c32". Each set of modules is used under different circumstances and from different expected paths, so there is no conflict between them.

ldlinux.* is required:
isolinux*.bin : ldlinux.c32 ldlinux.e32 ldlinux.e64
*pxelinux.0 : ldlinux.c32 ldlinux.e32 ldlinux.e64
ldlinux.* : ldlinux.c32

Syslinux modules working dependencies

The following is a list, sorted alphabetically by module, of dependencies for c32 modules since version 5.00.

So for example, for chain.c32 to work, two additional files are also needed: libutil_com.c32 libutil.c32 and libcom32.c32. All files shall match the same version.

In case the necessary library modules (lib*.c32) are added and the relevant c32 module fails anyway, please look for more information regarding the PATH directive (also introduced in version 5.00), about the location where the lib*.c32 files are searched for in the boot device.

Note: In version 5.01, libutil_com.c32 was renamed to libutil.c32, and libcom32gpl.c32 was renamed to libgpl.c32, in order to conform to "8.3" file name length format (used in FAT fs when there is no LFN support; and used in basic ISO9660). All references in this page are updated accordingly.

Library modules c32 dependencies:
advdump.c32: _
cat.c32: _
chain.c32: libutil.c32
cmd.c32: libcom32.c32
complex.c32: libcom32.c32
(+) libutil.c32
config.c32: libcom32.c32
cptime.c32: libutil.c32
cpuid.c32: _
cpuidtest.c32: libgpl.c32
debug.c32: _
disk.c32: libgpl.c32
display.c32: libmenu.c32
(+) libutil.c32
dmitest.c32: libgpl.c32
elf.c32: libcom32.c32
entrydump.c32: _
ethersel.c32: libcom32.c32
fancyhello.c32: libutil.c32
gfxboot.c32: libcom32.c32
gpxecmd.c32: libcom32.c32
hdt.c32: libutil.c32
hello.c32: _
hexdump.c32: libcom32.c32
host.c32: libcom32.c32
ifcpu.c32: libutil.c32
ifcpu64.c32: libcom32.c32
ifmemdsk.c32: libcom32.c32
ifplop.c32: libcom32.c32
kbdmap.c32: libcom32.c32
keytest.c32: libutil.c32
kontron_wdt.c32: libcom32.c32
ldlinux.c32: _
libcom32.c32: _
libgpl.c32: _
liblua.c32: _
libmenu.c32: libutil.c32
libutil.c32: _
linux.c32: libcom32.c32
localboot.c32: libcom32.c32
ls.c32: _
lua.c32: liblua.c32
mboot.c32: libcom32.c32
meminfo.c32: _
menu.c32: libutil.c32
pcitest.c32: libcom32.c32
pmload.c32: libcom32.c32
poweroff.c32: _
prdhcp.c32: libutil.c32
pwd.c32: _
pxechn.c32: libutil.c32
reboot.c32: libcom32.c32
resolv.c32: _
rosh.c32: libutil.c32
sanboot.c32: libcom32.c32
sdi.c32: libcom32.c32
serialinfo.c32: _
simple.c32: libmenu.c32
(+) libutil.c32
sysdump.c32: libcom32.c32
test.c32: libmenu.c32
(+) libutil.c32
test2.c32: libmenu.c32
(+) libutil.c32
vesainfo.c32: _
vesamenu.c32: libutil.c32
vpdtest.c32: libgpl.c32
whichsys.c32: libcom32.c32
zzjson.c32: libgpl.c32