PXELINUX version 4.06 (2012-10-23) is included in the Tiny PXE Download. The most recent PXELINUX release at the time of writing is 6.03, however an older version has been included in the download as newer versions have issues when chainloading other Network Bootstrap Programs.
PXELINUX can be downloaded from https://www.kernel.org/.../syslinux/. If replacing the PXELINUX files included in the download then please note that as of PXELINUX version 5.00, file dependencies were introduced for the Network Bootstrap Program (pxelinux.0) and c32 modules. Previous versions (including PXELINUX version 4.06 in the download) do not have any file dependencies - the pxelinux.0 loader and c32 modules are all standalone files. The table below lists file dependencies for these files if version 5.00 (or newer) are used (information is from here) -
|"...can chainload MBRs, partition boot sectors, Windows bootloaders (ntldr, setupldr.bin and bootmgr), MS-DOS and PC-DOS io.sys, Freedos kernel.sys, isolinux.bin (only from ISOLINUX), grldr of grub4dos or a bootsector saved to a file. It can also swap BIOS drive numbers or hide partitions..."
|"...HDT (for "Hardware Detection Tool") is a Syslinux com32 module designed to display low-level information for any x86 compatible system..."
|mboot.c32||libcom32.c32||"...mboot.c32 is a Syslinux module that loads images using the Multiboot specification. A really good use case for this is booting Xen, or any other hypervisor-based virtualization pieces that also require an initrd/initramfs. If your Xen boot doesn't require an initrd, then it is possible to utilize the existing kernel/append method. Another use case for mboot.c32 is to boot FreeBSD ELF kernels with rootfs....."
|menu.c32||libutil.c32||"...menu.c32 is a comboot module for Syslinux that renders a menu on the screen...."
|pxelinux.0||ldlinux.c32||The PXELINUX Network Bootstrap Program
|reboot.c32||libcom32.c32||"...reboot.c32 is a COM32 module for Syslinux that is able to reboot the PC. It supports cold and warm rebooting....."
|sanboot.c32||libcom32.c32||"...sanboot.c32 is a comboot module for gpxelinux.0 that enables gPXE's SAN booting options (iSCSI and AoE currently). This is only available in >=syslinux-3.71 for gpxelinux.0..."
|sdi.c32||libcom32.c32||Can be used to boot Microsoft System Deployment Images (.SDI type files) - SDI files are often used in Windows Embedded and can be used to boot WinPE 1.*
|Graphical version of menu.c32 (see above) - supports the use of .jpg wallpaper in boot menus.
Note that vesamenu.c32 is not included in the Tiny PXE Server download.
Please note that gpxelinux.0, a hybrid bootloader containing gPXE/iPXE, has been deprecated and replaced with lpxelinux.0 since PXELINUX version 5.10.
Since version 6.00 .c32 files are platform specific and the PXELINUX download now includes separate directories for BIOS (\bios), 32-bit UEFI (\efi32) and 64-bit UEFI (\efi64) binary files. The menu.c32 module for example has three separate binary files in the following locations -
Dependencies can be found in the following paths (where * is either bios, efi32 or efi64) -
The default path for the PXELINUX configuration file is the \pxelinux.cfg\ directory - the path is relative to the PXELINUX Network Bootstrap Program - pxelinux.0. It's possible to use separate configuration files for each client PC by using a filename based upon information unique to each client. Configuration file names are parsed in the following order -
On a test system with the following setup...
PXELINUX can be configured to display a menu when the Network Bootstrap Program pxelinux.0 is loaded. The SysLinux website lists a comprehensive range of options that can be used for a basic menu system. The Tiny PXE Server package includes a COM32 module for displaying a text based menu - menu.c32. It's possible to replace this with vesamenu.c32 if you want to add support for graphics - i.e. a splash screen.
A quick note on the graphics mode supported in vesamenu.32 - the default is a resolution of 640x480 pixels. It's possible to change this using the MENU RESOLUTION command (e.g. "MENU RESOLUTION 1024 768") - if the selected resolution is not supported then a text mode menu will be displayed. Image files in .PNG, .JPG and LSS16 formats are supported.
Although the focus here is on using menu.c32, the syntax for vesamenu.c32 is almost identical. Notepad.exe can be used to create a menu configuration file - all entries are text based. A basic menu using menu.c32 (note that all paths are relative to the directory containing pxelinux.0 - in the example below menu.c32 is located in the same directory as pxelinux.0) -
MENU TITLE PXELinux Boot Options
A vesamenu alternative (note the addition of the MENU BACKGROUND line with a path to a .jpg file) -
MENU BACKGROUND /pxelinux.cfg/splash.jpg
MENU TITLE PXELinux Boot Options
The PXELINUX menu entries in this guide have been kempt as simple as possible. The majority of options here use the format -
MENU LABEL iPXE
MENU LABEL iPXE (Load menu.ipxe)
It's also possible to load submenus -
MENU LABEL Floppy Disk Image Submenu
Putting all this together -
Screenshot of the above menu as displayed on the client system -
Now let's take a closer look at the menu entry syntax -
The previous section lists some basic menu options - for more comprehensive range of settings refer to http://www.syslinux.org/.../menu.c32 and http://www.syslinux.org/.../SYSLINUX.
In the following example the hotkey i is assigned to this entry -
MENU LABEL ^iPXE
TIMEOUT - used to boot the first (or default) menu entry after the time period specified (in 1/10's of a second - e.g. TIMOUT 100 is equal to 10 seconds) -
MENU DEFAULT -
TEXT HELP -
MENU BEGIN - create a submenu within the menu file. This command must be followed by a tag (e.g. MENU BEGIN floppies) -
Check the following sample menu for examples of the additional commands listed above -
Screenshot of the above sample menu when loaded on the client system -
iPXE supports HTTP and SANBOOT - consequently there are times when it might be useful to chainload ipxe.lkrn from PXELINUX. The following menu entry shows the syntax for loading ipxe.lkrn (kernel) with a script (initrd) -
If chainloading ipxe.lkrn the iPXE scripts used in this guide may need to be edited to add commands for configuring the Client PCs network interface. This is not required when using iPXE as the network bootstrap program with a script set as altfilename in config.ini as the network interface is automatically configured. To configure the first network adapter, simply add the following code at the start of any scripts to run the dhcp command -
Document date - 28th February 2017(DRAFT)