From db54bf6619418b3661fed3952c67e1c683d6b6bd Mon Sep 17 00:00:00 2001 From: Stephan Raue Date: Sun, 4 Jul 2010 15:30:12 +0200 Subject: [PATCH] config/release: add syslinux for win32 and dos systems Signed-off-by: Stephan Raue --- config/release/3rdparty/syslinux/NEWS | 1426 +++++++++++++++++ config/release/3rdparty/syslinux/README | 34 + .../release/3rdparty/syslinux/doc/comboot.txt | 1012 ++++++++++++ .../release/3rdparty/syslinux/doc/distrib.txt | 29 + .../3rdparty/syslinux/doc/extlinux.txt | 132 ++ config/release/3rdparty/syslinux/doc/gpt.txt | 69 + .../3rdparty/syslinux/doc/isolinux.txt | 133 ++ .../3rdparty/syslinux/doc/keytab-lilo.txt | 85 + .../release/3rdparty/syslinux/doc/mboot.txt | 26 + .../release/3rdparty/syslinux/doc/memdisk.txt | 292 ++++ config/release/3rdparty/syslinux/doc/menu.txt | 566 +++++++ .../3rdparty/syslinux/doc/pxelinux.txt | 418 +++++ .../release/3rdparty/syslinux/doc/rfc5071.txt | 787 +++++++++ config/release/3rdparty/syslinux/doc/sdi.txt | 149 ++ .../3rdparty/syslinux/doc/syslinux.txt | 788 +++++++++ .../release/3rdparty/syslinux/doc/usbkey.txt | 47 + .../3rdparty/syslinux/dos/syslinux.com | Bin 0 -> 33735 bytes .../3rdparty/syslinux/win32/syslinux.exe | Bin 0 -> 68608 bytes 18 files changed, 5993 insertions(+) create mode 100644 config/release/3rdparty/syslinux/NEWS create mode 100644 config/release/3rdparty/syslinux/README create mode 100644 config/release/3rdparty/syslinux/doc/comboot.txt create mode 100644 config/release/3rdparty/syslinux/doc/distrib.txt create mode 100644 config/release/3rdparty/syslinux/doc/extlinux.txt create mode 100644 config/release/3rdparty/syslinux/doc/gpt.txt create mode 100644 config/release/3rdparty/syslinux/doc/isolinux.txt create mode 100644 config/release/3rdparty/syslinux/doc/keytab-lilo.txt create mode 100644 config/release/3rdparty/syslinux/doc/mboot.txt create mode 100644 config/release/3rdparty/syslinux/doc/memdisk.txt create mode 100644 config/release/3rdparty/syslinux/doc/menu.txt create mode 100644 config/release/3rdparty/syslinux/doc/pxelinux.txt create mode 100644 config/release/3rdparty/syslinux/doc/rfc5071.txt create mode 100644 config/release/3rdparty/syslinux/doc/sdi.txt create mode 100644 config/release/3rdparty/syslinux/doc/syslinux.txt create mode 100644 config/release/3rdparty/syslinux/doc/usbkey.txt create mode 100755 config/release/3rdparty/syslinux/dos/syslinux.com create mode 100755 config/release/3rdparty/syslinux/win32/syslinux.exe diff --git a/config/release/3rdparty/syslinux/NEWS b/config/release/3rdparty/syslinux/NEWS new file mode 100644 index 0000000000..e6937e03ab --- /dev/null +++ b/config/release/3rdparty/syslinux/NEWS @@ -0,0 +1,1426 @@ +Starting with 1.47, changes marked with SYSLINUX, PXELINUX, ISOLINUX +or EXTLINUX apply to that specific program only; other changes apply +to all derivatives. + +Changes in 4.01: + * ISOLINUX: fix initialization on systems which don't zero + low memory. + * SYSLINUX/EXTLINUX: fix handing of disk read retries in + EDD mode. + * ISOLINUX: change the initialization sequence to avoid + problems with certain (old) BIOSes. Special thanks to + Helmut Hullen for invaluable debugging support. + * ifplop.c32: new module which detects if the PLoP Boot Loader + already has booted a CDROM or USB drive (Gert Hulselmans). + * Correct a severe memory overwrite bug, triggered primarily + when selecting a very long command line in the menu system. + * lua.c32: Lua script interpreter, currently experimental. + * PXELINUX: new option IPAPPEND 4 to append the system UUID to + the kernel command line. + * PXELINUX: display BOOTIF and SYSUUID at startup time, and + when Ctrl-N is pressed on the command line. + +Changes in 4.00: + * Major code base changes; all filesystem rewritten in C. + This work was done primarily by Liu Aleaxander (Yuanhan Liu). + * EXTLINUX: btrfs and ext4 support. btrfs support was done by + Alek Du of Intel. + * EXTLINUX is no longer a separate derivative; extlinux and + syslinux both install the same loader (ldlinux.sys); for the + Linux-based installers the extlinux binary is used for a + mounted filesystem; the syslinux binary for an unmounted + filesystem. + * When loading a new configuration file with the CONFIG + command, one can now also specify a new current directory + with an APPEND statement. + * Full ADV support for Syslinux, to boot-once and MENU SAVE + works. + * Full support of GPT-partitioned disks, including disks + and/or parititions larger than 2 TiB (if supported by BIOS.) + * The GPT handover protocol adjusted to the current T13 + committee draft; see doc/gpt.txt. + * HDT: code cleanup, small bugfixes + * The "linux" syslinux installer (syslinux-nomtools) now has a + command-line syntax closer to the extlinux installer. The + mtools, dos and win32 installers will get this new syntax + eventually, but it is not implemented yet. + * chain.c32: support booting GPT partitions by index, GUID, label. + * chain.c32: support booting the Syslinux partition with "fs". + * chain.c32: implement gpt.txt hand-over protocol. + * chain.c32: support for chainloading Grub stage 2. + * PXELINUX: TFTP URL syntax (tftp://) supported even when not + running gPXE/gpxelinux. + * New ls.c32 module to display the contents of the disk from + the command line, and pwd.c32 to display the current + directory. + * rosh.c32 (read only shell) updated and hopefully usable. + * PXELINUX: Support "localboot -1", just like the other + derivatives. + * gfxboot.com removed in favor of gfxboot.c32. + * New MENU HELP statement to display fullscreen help text as a + result of a menu selection. + * memdiskfind utility that can be used with the phram driver + in the Linux kernel to mount a memdisk. + * ifcpu.c32: Adding usage when no parameters are given, + adding PAE support. + * ifcpu.c32, ifcpu64.c32: handle more than one argument per + target. + * isohybrid: C version which does not require Perl. + * New command MENU IMMEDIATE to permit hotkeys to activate + immediately without needing Enter. + * mdiskchk.com supports a --no-sequential (or -n) option to + suppress the classic all-drive-probing heuristic. Useful + on BIOSes who crash/hang when certain drive numbers are + probed. + * ElTorito.Sys DOS driver now scans drive numbers upwards + instead of downwards, in order to avoid a fairly common + bug on some BIOSes where probing drive 0xFF causes a + failure. + +Changes in 3.86: + * chain.c32: fix chainloading the MBR of a hard disk (broken + in 3.85). + * mboot.c32: report the boot loader name in the information + structure. + * com32: set argv[0] in a com32 module. + * core: add a workaround for a bug in Xen HVM older than + version 3.3: disable halt on those platforms. + * Fix problems where certain operations in com32 modules would + cause the core to believe the system was idle. + * MEMDISK: fix MBR detection when used with a DOSEMU header or + an offset. + * MEMDISK: generate the mBFT checksum correctly. + +Changes in 3.85: + * gPXELINUX: updated to gPXE 1.0.0. gPXELINUX can now do NBP + chainloading, and does not require a second DHCP. + * vesamenu.c32: unbreak the default "grey hole" background. + * We no longer have a built-in default of "linux auto". + Instead, if no DEFAULT or UI statement is found, or the + configuration file is missing entirely, we drop to the boot: + prompt with an error message (if NOESCAPE is set, we stop + with a "boot failed" message; this is also the case for + PXELINUX if the configuration file is not found.) + * chain.c32: support chainloading Grub4DOS; patch by Gert + Hulselmans. + * New tool: sysdump.c32, can be used to produce system + information for debugging via tftp or ymodem (serial port). + * "vga=current" on the Linux command line is now supported. + * chain.c32: support for Windows Recovery Console, via the + "cmldr=" option. + * chain.c32: should now support loading NTLDR from different + type media than loaded from. + * chain.c32: support chainloading to a FAT/NTFS partition with + invalid "hidden sectors" via the "sethidden" option. + * memdisk: fix the mBFT ACPI table. + * vesamenu.c32: if the image is smaller than the screen, tile + it across the whole screen. + * mkdiskimage: -s option for producing a sparse image. + * vesamenu.c32: support arbitrary resolution setting (beyond + BIOS support) on some Intel-based video chipsets. This code + is a modified version of the "915resolution" tool by + Steve Tomljenovic; your mileage might vary. + +Changes in 3.84: + * SYSLINUX: make the DOS installer work for MS-DOS 7.x/8.x + (Win9x/ME) again. + * HDT: updated to version 0.3.6 (numerous changes.) + * mboot.c32: now supports video mode setting if requested by + the image. + * MEMDISK: Fix floppy images of PC-DOS. + * MEMDISK: Add support for emulation of CD-ROM images; patch + by Shao Miller. + * MEMDISK: Comply with the Win9x "safe hook" standard, + allowing a protected-mode driver. + * MEMDISK: New "mBFT" ACPI table, by analogy with the iSCSI + iBFT table. This allows detection from a protected-mode + operating system without EDD support. + * 32-bit version of the gfxboot loader (gfxboot.c32), so far + experimental. This will replace gfxboot.com in the future. + * vesamenu.c32: new MENU RESOLUTION directive to set a screen + resolution other than 640x480. + * chain.c32: add support for loading isolinux.bin. + * chain.c32: make sure to always return to text mode. + * eltorito.sys: DOS driver for generic CD-ROMs; by Gary Tong + and Bart Lagerweij. + +Changes in 3.83: + * PXELINUX: clear memory before handing over to a chainloaded + NBP. This may help avoid a bug in Windows RIS. + * PXELINUX: fix localboot after NBP chainloading on certain + BIOSes (including ASUS A8N-E, but possibly others.) + * chain.c32: support chainloaded bootloaders on ISOLINUX. + * PXELINUX: allow filenames up to 251 characters. + * MEMDISK: fix problems booting from USB on Thinkpads, and + possibly other machines or hardware combinations. + * isohybrid: fix the -id option. + * HDT: updated to version 0.3.4. + * MEMDISK: the stack size is now configurable, with the stack= + option. + * Simple menu: fix Ctrl-W (word erase) in command-line edit. + * Simple menu: fix crash on some platforms. + * Gfxboot: fixes to the configuration file parsing. + * PXELINUX: add a tool to override specific DHCP options via + values hardcoded in the pxelinux.0 file. These hardcoded + values can be either "before DHCP" (defaults if DHCP do not + provide values), or "after DHCP" (overrides DHCP). The tool + pxelinux-options can be used to set these options. This + feature does not apply to gpxelinux.0; when used with gPXE + this is better handled by modifying the embedded script. + +Changes in 3.82: + * isohybrid: fix the -partok logic for loading from a partition. + * ISOLINUX: deal with systems which return from INT 13h with + interrupts disabled. + * Do not invoke the idle handler during large file loads. + * Simple menu: make ONTIMEOUT work with MENU HIDDEN. + * PXELINUX: handle TFTP servers which have extra NULs at the + end of an OACK packet. + +Changes in 3.81: + * Shuffler: fix bug in real-mode entry. This affected a + number of modules, probably in relatively unimportant ways, + but it completely broke linux.c32. + * Improved performance. + * Attempt to halt the processor while idle. This can cause + bad reponsiveness when using a serial console especially for + automated input; if that ends up being a problem, use the + new "NOHALT 1" configuration command. + * linux.c32 now suppresses all messages if the "quiet" flag is + specified. + * isohybrid: add a variety of options, and a help message. + * ISOLINUX: fix booting in hybrid mode when CBIOS is used. + This unfortunately means that the isohybrid handoff protocol + has changed, so the isohybrid utility must version-match + isolinux.bin. + * Drop support for ACPI 3 extended memory flags. + * Menu system: don't set the autocr flag on the serial + console. + * altmbr: fix handling of logical partitions. + * altmbr: cap at 439 bytes so the partition select byte isn't + part of the file. + +Changes in 3.80: + * New shuffler mechanism and API. + * Rewritten mboot.c32 module. + * The syslinux_boot_linux() function has been simplified. + * Don't hang trying to boot a "menu quit" label from the CLI. + * Fix problem with boot-once "sticking" on some BIOSes. + * isohybrid: fix problem with images over 2 GB in size. + * APM poweroff module (poweroff.com) by Sebastian Herbszt. + * ISOLINUX: fix the handling of large directories. Bug found + and fixed by Steffen Winterfeldt. + +Changes in 3.75: + * PXELINUX: fix the "keeppxe" option, which was broken in + 3.74. + * MEMDISK: correct the extraction of geometry information from + the MBR of a hard disk image, again broken in 3.74. + * extlinux(1) man page from Brian Pellin. + * Simple menu: MENU SAVE is now controllable on a menu-by-menu + or entry-by-entry basis. + * gPXELINUX: fix interrupt-disabling bug. + * HDT: fix lockup on machines with certain PCI configurations. + +Changes in 3.74: + * New UI directive, which allows a more natural way to specify + a menu system (or not.) With the UI directive specifying + the menu system, the DEFAULT directive can be used to select + the default entry inside the menus. + * kbdmap.c32: new module to load a new keyboard map + dynamically. + * isohybrid: workaround bug in some versions of binutils. + * Fix issue with the placement of the initrd on some machines. + * ifcpu64: fix handling of less than three arguments. + * Fix bug in the shuffle library when dealing with a very + large number of fragments. + * Documentation fixes by Vicente Jimenez Aguilar. + * gPXE updated to version 0.9.7. + * hdt.c32: Hardware Detection Tool, an interactive hardware + analyzer module by Erwan Velu. + * MEMDISK: enable automatic determination of the disk geometry + for a large floppy disk image if (and only if) it is + formatted with a FAT filesystem. + * SYSLINUX: fix the handling of .bss files on FAT12/16. + * Suppress the Loading ... message if "quiet" is specified on + the kernel command line. + * Fix the use of "CONSOLE 0" with menu.c32. + * Allow COM32 modules to be aware of all memory even in the + presence of a memory hole. The "linux.c32" module can be + used to load a kernel (or memdisk) plus large initrd on + such a system. + * MBR: produce alternate MBR variants which force the drive + number to hd0 (_f variants), or force the drive number to + hd0 if the Ctrl key is pressed (_c variants.) Furthermore, + add an MBR variant (altmbr*.bin) which ignores the active + flag and instead boots the partition number specified in the + byte at offset 439 decimal. + * Add IPAPPEND strings to com32 modules, especially needed for + linux.c32. + * New MENU SAVE directive which saves the latest menu + selection until the next boot. Currently only implemented for + EXTLINUX. + * gfxboot.com: *experimental* interface module to Steffen + Winterfeldt's "gfxboot" graphical front end + (http://gfxboot.sourceforge.net/). Module by Sebastian Herbszt. + +Changes in 3.73: + * Upgrade gPXE to release version 0.9.5. + * Fix a number of build errors on various platforms. + * Handle systems with E820 "extended attributes" per ACPI 3. + Someone "cleverly" decided to change the E820 spec in a + backwards-incompatible manner! + * MEMDISK: default to "safeint". + * Adopt the moniker "The Syslinux Project", standard proper + noun capitalization, to refer to the project as a whole. + Thus, reserve the all-caps "SYSLINUX" to refer to the FAT + loader. + * mboot.c32: add "-solaris" option to pass DHCP information to + the Solaris kernel; required for automatic Solaris boot + without using Solaris' pxeboot program. + * config.c32: trivial COM32 module to restart Syslinux with + another configuration file from the command line (equivalent + to the CONFIG command in the configuratin file.) + +Changes in 3.72: + * Include the pxechain.com module from Jeffery Hutzelman at + Carnegie Mellon University. This allows chaining another + PXE boot program while changing the DHCP packet passed to + it. + * Reorganize the Makefile system. + * Major PCI core cleanups and other source cleanup. + * gPXE code updated. + * Try to avoid memory-snooping attacks on passwords. Note + that if someone has root on the box, they generally don't + need to compromise the boot loader... + * ISOLINUX: fix crash when given a zero-length file. + * sdi.c32: support gzipped SDI images. + * ISOLINUX: support generating images which can be either + a CD-ROM or a hard disk (USB disk, etc.) See + doc/isolinux.txt for more information. + * Remote gdb support for COM32 modules; patch from Stefan + Hajnoczi. + * Support beeps in F-key help in the simple menu system. + * Tab display of labels, based on a patch from Sebastian + Herbszt. Can be disabled with the NOCOMPLETE configuration + command. + * "menu default" can now be specified after "menu begin", to + indicate that a specific submenu should be the default entry. + +Changes in 3.71: + * Workaround for a VESA BIOS which tries to make DOS system + calls(!!) + * Simple menu: fix navigation around disabled entries + (or at least try to...) + * EXTLINUX: proper error message when confused about mount + point. + * MEMDISK: be smarter about incompletely disabled floppies in + the BIOS and about being the only floppy. + * Optionally allow initrd to be specified on a separate line + rather than as part of the "append" line. This is not + recommended, but apparently makes life easier for some + tools. + * SYSLINUX: if no config file is present, set the current + directory to the root directory (Sebastian Herbszt). + * chain.c32: option "hide" to support hiding and unhiding of + primary partitions on the boot drive with DOS, Win, or OS/2 + partition types (01, 04, 06, 07, 0b, 0c, 0e). + * Unbreak the KBDMAP command (broken in 3.70). + * EXTLINUX: fix the handling of the ADV when using CBIOS. + * ifcpu64.c32: simple COM32 module to select a 32- or 64-bit + kernel (and optionally 32-bit kernels with or without PAE.) + Eventually we want a scripting language for this + kind of stuff; a Lua module is under development. + * Fix parsing of the SERIAL command without a baud rate + specified. + * chain.c32: error out when try to boot an unbootable + partition. + * SYSLINUX: when building the Win32 installer, search for + MinGW under a large number of possible names. + +Changes in 3.70: + * PXELINUX: Support enhanced capabilities when running on top + of gPXE (http://www.etherboot.org/). In particular, support + URL-style syntax for filenames, and any protocol that gPXE + supports (except, currently, iSCSI and AoE.) This feature + is currently highly experimental. + * Substantial infrastructure changes to support files whose + length aren't known at open time (typically network + connections.) Please note that the semantics of some of the + comboot APIs have changed slightly; please see doc/comboot.txt. + * PXELINUX: We no longer require a TFTP server which supports + the tsize option for all transfers. + * PXELINUX: Integrate with the gPXE source base; unified image + now included as "gpxelinux.0". + * The source tree has been restructured; files that were + previously in the root have moved into the core, dos, gpxe, + and utils directories. + * "make install", "make netinstall", and "make extbootinstall" + have been updated massively. "make install-all" now installs + all three. + * Change default dir for auxiliary files from + /usr/lib/syslinux to /usr/share/syslinux. + * SYSLINUX: VFAT long filename support. + * MEMDISK: Any image less than 4096K (4 MB) is treated as a + floppy disk. The geometry-guessing code will recognize all + common extended formats, but it is still possible some very + exotic formats need geometry specification. Large floppies + and very small harddisks still need explicit specification. + * chain.c32: option "swap" to support swapping of BIOS drive + numbers. This is necessary to boot certain operating systems + (DOS, Windows) from a secondary drive. + * chain.c32: option "file=" to support loading a boot file from + the SYSLINUX filesystem instead of loading the boot sector + from the drive. + * chain.c32: option "seg=" to control the load location. + * chain.c32: option "ntldr=" as a shorthand for "seg=0x2000 + file="; use this to load one of WinNT's loaders: + + chain.c32 hd0 1 ntldr=/MiniNT/setupldr.bin + + Note that the file needs to be in the SYSLINUX filesystem. + * chain.32: options "freedos=" and "msdos="/"pcdos=" as + shorthands for "seg=0x60 file=" and "seg=0x70 file=" + respectively; use this to load FreeDOS's kernel.sys, MS-DOS's + io.sys or PC-DOS's ibmbio.sys. + * Change to the A20 algorithm which *MIGHT* help systems that + have systems which freeze when Syslinux is used with USB + keyboards. Note that this has been hard do verify, so I + would greatly appreciate feedback on it. + * Complex menu system: unbreak menus which has unnamed + submenus, like complex.c. + * Fix newline on the serial port for some com32 modules. + * chain.c32: support "boot" as the drive specification, + indicating the drive from which it was booted + (for syslinux/extlinux). + * SYSLINUX/EXTLINUX: support "localboot" with the same feature + set as ISOLINUX. + * Add an experimental MBR for GPT partition tables. + * Use $(CC) when determining compile flags. + * chain.c32: fix booting from logical partitions (Sergey + Vlasov.) + +Changes in 3.63: + * Fix errors in the PCI and DMI detection modules (Erwan Velu, + Sebastian Herbszt). + * Fix host dependencies and other issues in the build system. + * PXELINUX: Allow class E addresses as unicast. + * sdi.c32: module to load Microsoft System Deployment Images. + For additional information, please see: + http://msdn2.microsoft.com/en-us/library/ms838543.aspx + * EXTLINUX: Correct reading directories with deleted entries. + * Shuffle library: correct the handling of certain geometries + (an upward move with source material blocking the move); as + required by sdi.c32 but theoretically possible for other + formats as well. + * Add "make netinstall" to install /tftpboot. + * Fix some documentation files that didn't get moved/renamed. + +Changes in 3.62: + * Clean up garbage after "aborted." message. + * Clean up memdump.com filenames. + * Support SHA256 and SHA512 encrypted passwords. + * The shuffle library now can generate chained descriptors, + thus allowing pretty much arbitrarily complex memory maps. + * Handle command lines up to 2047 characters, the current + Linux kernel limit. + * vesamenu: support systems without linear framebuffer support + (sigh, what is this, 1993?) and 15-bit RGB modes. + * Move the label storage (for the command-line interface) to + high memory, removing the size limit and freeing up 64K of + low memory. + * Get rid of 4096-entry limit in the simple menu system. + * New hierarchial submenu support: see MENU BEGIN, MENU END, + MENU GOTO in doc/menu.txt. + * MENU QUIT allows creating a menu entry for returning to the + command line. + * ISOLINUX: Work around bug in certain Adaptec BIOSes, + patch by Bruce Robson. + * pngtopnm dependency removed from samples/ directory. + * Text documentation files (in doc/) renamed *.doc -> *.txt. + +Changes in 3.61: + * EXTLINUX: fix crash when accessing an empty file. + * elf.c32: If a PHDR segment is present, load it. + * Fix SHA-1 and MD5 passwords. + * ISOLINUX: fix booting when mastered without + mkisofs -boot-info-table (broken since 3.50, sigh...) + * Handle BIOSes which emit multiple contiguous valid + memory regions in the e820 map. + +Changes in 3.60: + * Support for "auxilliary data vector", a small amount of + writable storage. Currently only supported for EXTLINUX, + but the infrastructure is there for the other derivatives, + assuming a suitable storage location can be found. + * EXTLINUX: boot-once support (--once, --clear-once, and + --reset-adv). + * A command is now required to the EXTLINUX installer, i.e. at + least one of --install, --update, --once, --clear-once, or + --reset-adv. + +Changes in 3.55: + * PXELINUX: as per RFC 5071, PXELINUX no longer requires the + use of the magic cookie option (208) for unencapsulated + options. Currently it does not require it for + vendor-encapsulated options (vendor-option-space) either, + but that MAY be reverted in the future if it causes + problems. + * Documentation text files moved to a common "doc" directory; + man pages from the Debian project added to the "man" + directory. + * Correct bug with self-overlapping memory areas when using + the shuffle interface. + +Changes in 3.54: + * Add "menu separator", "menu indent", "menu disabled" + (see README.menu). + * vesamenu: fix handing of VESA modes with noncontiguous + memory buffers. In particular, Qemu/KVM sets up such a mode + when Cirrus Logic emulation is enabled (which is the + default.) + * Support for calling real mode functions using far calls, + with argument on the stack. This was implemented to support + the BIOS BBS specification, but subsequent experiments show + that the at least one of the most common BIOS cores, Award, + passes the presence check but doesn't actually implement the + functionality. + +Changes in 3.53: + * Fix bugs related to the $PnP BIOS functionality on some + platforms. + * PXELINUX: Fix the "naked" version of :: (suppress prefix.) + * elf.c32: better error messages. + * Faster operation under Intel VT virtualization. + * PXELINUX: Fix DHCP bootfile option. + * mkdiskimage: Support more than 1024 cylinders. + * (Hopefully) fix installer on non-x86 platforms. + * Fix shuffle_and_boot_rm, used by linux.c32. + * Fix shuffle_and_boot_pm on 386/486. + * ISOLINUX (at least): fix bss memory overwrite hang. + * MBR: Fix booting from logical partitions. + * Code cleanups. + +Changes in 3.52: + * Handle capitalized F-key commands in the menu system. + * Fix padding error when loading multiple ramdisks. + * Workaround for VMware crashing when trying to print a + message during early kernel boot (does not seem to work, + consider deleting.) + * chain.c32: add the ability to search for a specific MBR + signature at runtime. + * Fall back to the server identity option if the siaddr field + in the DHCP header isn't set. This seems to match the + behaviour of most PXE stacks. + * mkdiskimage: give the generated disk image an MBR signature. + * MEMDISK: Fix failures on some BIOSes. + * Simple menu system: new "MENU HIDDEN" option to not display + the menu unless the user presses a key. + * Simple menu system: support MD5-encrypted passwords (modern + Unix standard style, with "$1$" prefixes.) + * pcitest.c32: now functions as a full "lspci". Thanks to + Erwan Velu for this work. + * MEMDISK: Make EDD actually work. + * ISOLINUX: Fix for certain broken CD-ROM BIOSes which + randomly corrupted register FS. + * Simple menu system: fix memory overwrite bug that caused + some systems to lock up or behave weirdly. + * Fix building on 64-bit systems without a 32-bit libc installed. + +Changes in 3.51: + * EXTLINUX: Fix failure to find the configuration file. + +Changes in 3.50: + * New keywords allow the type of file to be specified in the + configuration file. + * It is now supported to load a different configuration file + with the CONFIG keyword. + * Fix API call 0x0019 (Read Disk.) + * MENU AUTOBOOT, MENU TABMSG, MENU PASSPROMPT allows + internationalization of menu messages. + * A new feature, TEXT HELP, allows the administrator to set + a multi-line help message for individual selections. + * Fix API call 0x0012 (Cleanup, shuffle and boot.) + * New API call "Cleanup, shuffle and boot to flat protected mode" + * New API call "Cleanup, shuffle and boot to real mode", + similar to API call 0x0012 but allows arbitrary register setting. + * Introduce a library interface for loading arbitrary binary + formats with relatively easily understood code. See + the elf.c32 module for an example on how to use it. + * New module "elf.c32", to load a protected-mode ELF kernel. + * MBR (old and new): Fix bug in CHS mode when LBA > + 65535*sectors. + * vesamenu: fix decoding of palettized PNG images. + * Update the Linux kernel boot protocol. + * PXELINUX: Press Ctrl-N at the boot prompt to read out the + network info. + * Instead of the (non-existent) MAC, use the client identifier + for networks like Infiniband and Firewire/1394. + * Add a new INCLUDE command to the core syslinux parser. + * Allow binding help text to F11 and F12. + * F-key help now available in the simple menu system. + * Disabled the polling for ARP during idle. It is simply too + slow on some (broken!) PXE stacks. + * PXELINUX: also try to fetch the config file based on UUID. + * SYSLINUX/EXTLINUX: New RAID mode (-r) which calls the BIOS + to load the next device (typically the next drive) on boot + failure. + +Changes in 3.36: + * MEMDISK: Disable EDD by default on floppy disks. EDD can be + enabled with the "edd" option and disabled with "noedd". + This (hopefully) should make Ghost work again. + * SYSLINUX: "unix" installer now uses Linux ioctls instead of + using libfat. + * New MBR which can boot from logical partitions. + * SYSLINUX: Fix bug in detecting special extensions which was + introduced in 3.35 :( + * PXELINUX: Unbreak chainbooting FreeBSD (and possibly others.) + +Changes in 3.35: + * MEMDISK: New "safeint" mode. + * MEMDISK: Be more compliant with the PnP BIOS spec. + * MEMDISK: Turn on EDD support by default. + * MEMDISK: Try to work on some machines on which it would not + work when there was no floppy drive in the system. + * Simple menu system: fix serial console support (broken in + 3.30). + * SYSLINUX: Support subdirectories. Like ISOLINUX, the + "current directory" is the directory in which syslinux.cfg + is found; this is searched for in the sequence + /boot/syslinux, /syslinux, /. As a side benefit, label names + like "linux-2.6.18" and "linux-2.6.19" are now supported. + + To install ldlinux.sys in a subdirectory, pass the -d + directory option to the SYSLINUX installer. + + This work was sponsored by slax.org (thanks, Tomas!) + * New API call: read disk. + * Invoke ONERROR on initrd load failure. + +Changes in 3.31: + * The simple menu system (menu.c32 and vesamenu.c32) now + support loading more than one configuration file at a time, + using MENU INCLUDE or by specifying multiple filenames. + * The MENU COLOR statement can now control the shadowing mode. + +Changes in 3.30: + * libcom32 extended to support graphics mode and graphical console. + * vesamenu.c32, new graphical version of the Simple + Menu System, see README.menu. + * New com32 modules by Erwan Velu do selection based on CPUID + or PCI devices present. + * RPM spec: add syslinux-tftpboot module; move syslinux by + default to the /usr/share/syslinux directory. + * RPM spec: extlinux is now a separate package. + +Changes in 3.20: + * EXTLINUX: New options --install (-i) and --update (-U), to + make it clear if a boot loader should be installed or + updated. For now, defaults to --install for compatibility; + a future version will require one of these options. + * New library functions to load and place files in memory. + * mboot.c32 bug fixes. + * Remove 8 MB kernel size restriction. + * Add "klibc" target for building unix/syslinux and + extlinux/extlinux with klcc (klibc-1.4.27 or later.) + * PXELINUX: Fail (and eventually reboot) if no configuration + file was found. + * COM32 module by Erwan Velu to make decisions based on DMI + info. + * Fix issue where going back and forth between menus a lot + would cause a hang. + * ISOLINUX: Fix bug which made "cd boot sectors" not work. + +Changes in 3.11: + * MEMDISK: Fix bug by which accessing the real floppy disk + as B: in MS-DOS was broken. + * Simple menu system: allow tweaking of the screen layout. + * Simple menu system: better command-line editing, correctly + handle command lines above 256 characters. + * PXELINUX: revert memory allocation change that caused + problems on some network cards. + * MEMDISK: Try work around a bug on some BIOSes when no + physical floppy disk is present in the system. + * Enable the 16550A FIFOs, if present, when doing serial + console. + * New "totaltimeout" command establishes a timeout without + regard for any user input. + * Simple menu system: timeout behaviour now more in line with + user expectations. + * Simple menu system: "ontimeout" should now work correctly. + +Changes in 3.10: + * gcc 4.0.1 compilation fixes. + * Add support for querying the PCI BIOS in libcom32 + (used by ethersel et al.) + * Fix PCI handing (ethersel etc) on several old chipsets (and + VMWare.) + * Try to deal with systems with broken EBIOS. + * New API call to do "localboot". + * New API call to query features. + * New API call to run kernel image, a lower-level call than + "run command". See comboot.doc. + * Fix for bug in EBIOS code discovered by Arwin Vosselman. + * NOESCAPE security fix. + * Comments are now recognized even without a space following #. + * Fix incorrect handling of mixes of entries with and without + MENU PASSWD. + * The idle API call now harmlessly returns failure if it is a + no-op. That way the caller can decide whether or not to + bother invoking it again. + * Temporarily disable the idle API call on PXELINUX, due to + some platforms on which the idle API call seems to hang; this + problem has not yet been debugged. + * MEMDISK: the handling of DOSEMU-headered images was broken; + fix it. + * EXTLINUX: symlinks are now supported. + * Simple menu system: N and P now work correctly as hotkeys. + * MEMDISK: more BIOS bug workarounds. + +Changes in 3.09: + * gcc4 compilation fix. + * (Ctrl-G) in message files now causes a beep. + * Reduce the command line to 511 characters; 1023 caused + memory overflows. + +Changes in 3.08: + * SYSLINUX: Fix performance regression (-s mode always + enabled.) + * Add API function for idle loop. + * libutil: Add do_idle() function for idle loop, make + get_key() use it. + * libutil: Add SHA-1 and base64 functions. + * Simple menu system: add password support. + * EXTLINUX: Sparse files now handled correctly. + * EXTLINUX: Large directories now handled correctly. + * ALL: At the prompt, Ctrl-X now forces text mode. + * Fix configuration file parsing error, that could cause + hangs. + * Rewritten advanced menuing system from Murali Ganapathy. + * MEMDISK: New "bigraw" mode to work around certain broken + BIOS flash programs. + * COM32 module to boot Multiboot systems, including Xen. See + com32/modules/mboot.doc. + * Max command line changed to 1023 characters. Note that the + kernel proper still can only handle 255 characters without + patching, and COM16 binaries can only handle 125 characters. + +Changes in 3.07: + * Fix chainloading (chain.c32). + * Fix zlib build problem. + * Use a private copy of . + +Changes in 3.06: + * Fix typo that caused the ramdisk to load in the wrong place. + +Changes in 3.05: + * New API function "shuffle and boot"; allows COM32 modules to + load or construct (almost) arbitrarily complex objects, + e.g. a kernel and its initrd/initramfs in pieces, and have + the API core reorganize memory for booting. (A library API + for this function will be introduced in a later version.) + * The initrd= option now supports multiple filenames separated + by commas. This is mostly useful for initramfs, which can + be composed of multiple separate cpio or cpio.gz archives. + (Note: all files except the last one are zero-padded to a 4K + page boundary. This should not affect initramfs.) + * EXTLINUX: Fix API function 000Ah (get derivative-specific + info). + * libcom32/ethersel: Support PCI Config Mechanism #2 on + machines still infested with that hideous old hack. + * SYSLINUX: Fix directory-parsing bug. + +Changes in 3.02: + * SYSLINUX: The "unix" installer now sets the MS-DOS + attributes (hidden, system, readonly.) + * COM32 library: build the .lnx (test modules for running + under Linux) as architecture native modules, in case + i386 devel libraries aren't installed. + * EXTLINUX: Hack for systems which don't have BLKGETSIZE64 + defined in the standard header files. + * Simple menu system: minor aestetic improvements, and try to + work better over a serial console (speed, and readability on + monochrome terminal emulators.) + * New CONSOLE directive to control output on the video console + (useful for dealing with some broken serial-forwarding + BIOSes.) + * New com32 module "ethersel" for searching for an Ethernet + card and selecting the proper version of Etherboot. + * EXTLINUX: Allow the user to override the detected geometry. + Add help. + +Changes in 3.01: + * EXTLINUX, SYSLINUX: Fix compile errors on some systems. + * EXTLINUX: Default to zipdrive geometry (64 heads, 32 + sectors) if no other geometry can be detected. + +Changes in 3.00: + * SYSLINUX: Support FAT32 and EDD. As an unfortunate + consequence, LDLINUX.SYS is no longer an ordinary file; it + is block-mapped at install time, which means it can only be + written using the syslinux installers. + * SYSLINUX: Reorganize the source code for the installers; + each one of the installers (dos, win32, unix, mtools) is now + built in its own subdirectory. In particular, "mtools" is + the unprivileged installer which uses mtools; "unix" is the + privileged installer which uses system calls. + * SYSLINUX: Completely rewritten DOS installer in C. + * ALL: "label" statement information is now stored in a + compressed format, which means that a lot more labels are + permitted (500-1000 in a typical configuration, but depends + on the complexity.) + * EXTLINUX: New derivative, which boots from an ext2/ext3 + filesystem. + * SYSLINUX: The DOS and Win32 installers can now optionally + write the boot sector to a file instead of the real boot + sector. This is not supported in the Linux installers, + however. + * ALL: New NOESCAPE command, disables the "hold down the Shift + key to display the prompt" behaviour. + * New simple menu system, as an alternative to the advanced + menu system already present. See README.menu for details. + * PXELINUX: Filenames can now be prefixed with an IP address + or DNS name plus :: (e.g. 192.0.2.1::filename or + server.domain.com::filename), which downloads a file from an + alternate TFTP server, or just a :: (e.g. ::filename), which + suppresses the common pathname prefix. See pxelinux.doc. + * SYSLINUX: Add an -m option to the DOS and Win32 installers + to write an MBR and -a to mark the partition SYSLINUX is + being installed on active. + * MEMDISK: Give a way to query the boot loader type while + running MEMDISK; see memdisk/memdisk.doc and + sample/mdiskchk.c. + * mkdiskimage: substantially improved mkdiskimage which, among + other things, can now be used to initialize USB keys as + zipdrives; see README.usbkey for more information. + +Changes in 2.13: + * MEMDISK: Fix command-line parsing "brown paper bag" class + bug. + * MEMDISK: Add "raw" mode to support the DOS boot disk from + WinME/XP, which seems to deliberately crash the system + when someone uses the "INT 15h mover" highmem API. + * Make "make install" do something sane for the com32 + development environment. + * In the spec file, create a separate -devel RPM for the com32 + development environment. + +Changes in 2.12: + * Simple C library, based on klibc, for writing COM32 + programs. + * Fix the handling of file length in loading of COM32 + programs. + * MEMDISK: Work around a linker bug by rearranging the code to + not use the linker for the 16-bit code. + * SYSLINUX: If we're building on a machine without a Win32 + (mingw) compiler, just skip building syslinux.exe. + * ISOLINUX: Support non-mkisofs mastering programs, at least + as long as the image is single-session. For best results, + ISOLINUX should be the only boot loader installed. + * MEMDISK: Allow the user to specify that the simulated disk + should be write-protected. + +Changes in 2.11: + * ALL: Add an API call to get the configuration file name. + * SYSLINUX: Fix bug in 2.10 that prevented it from working + correctly for a lot of people. + * SYSLINUX: In the installer, make mtools a bit less fussy. + * Make the menu system compile with newer gcc's. + +Changes in 2.10: + * MEMDISK: Handle images compressed with zip as well as with + gzip. Some Windows-based image tools apparently generate + these kinds of images by default. Patch by Patrick + LoPresti. + * Major menu improvement from Murali Ganapathy. + * ISOLINUX: Wonderfully sick and brilliant workaround for + severe bugs in certain Award BIOSes; from Knut Petersen. + * SYSLINUX: Fix for the nomtools installed, from Frederic + Pasteleurs. + * PXELINUX: Fix handling of IP numbers in the ranges + 100-109 and 200-209. + * ALL: New option "allowoptions" (defaults to 1), which + controls if options are allowed on the command line or not. + * SYSLINUX: Support building under klibc (see the klibc + distribution for details.) + +Changes in 2.09: + * SYSLINUX: Remove residual setuid crap from + syslinux-nomtools. + * Handle video pages correctly when using the API functions. + * Handle compiling on an x86-64 platform correctly. + * Menu system from Murali Krishnan Ganapathy; see the menu + directory for information. + * COMBOOT: Allow COMBOOT programs to change screen text mode. + * COMBOOT: Correct the documentation of how to detect + SYSLINUX from COMBOOT!!!! + * COMBOOT: Fix "get key without echo" API function. + * SYSLINUX: Fix bug that affected the API open function. + * ALL: Improve the E820 memory parser, to work around some + buggy BIOSes. + +Changes in 2.08: + * Add new configuration command "ontimeout" to allow timeout + to have a different action than just pressing Enter. + * Add new configuration command "onerror" to allow a custom + command to be executed in case the kernel image is not found. + * Fix bugs in the COMBOOT/COM32 command-line parsing. APPEND + now works with COMBOOT/COM32 images. + * PXELINUX: Poll for ARP requests while sitting at the + prompt. This makes some boot servers a lot less unhappy. + * PXELINUX: Actually free sockets when we get a failure + (including file not found.) This bug would cause us to run + out of sockets and thus "go deaf" after a while. + * MEMDISK: Add an API to query for the existence of MEMDISK. + * SYSLINUX: Fix loading boot sectors (.bs/.bss) from floppy + disk. + * .c32 is now one of the extensions searched for + automatically. + * PXELINUX: RFBG.exe seems to randomly overwrite memory + location 0x5700. Thus, don't use it! + * PXELINUX: Change pathname length max from 63 to 127; change + max vkernels from 128 to 64. + * Support Ctrl-U -> kill entire command line input. + * The "samples" directory contains a (barely at all tested) + chain loading example, chain.c32, which may be used to + chainload local floppy disks and hard disks. Use with + "chain fdN" or "chain hdN [partition]"; N = 0 for the first + drive of each type. + +Changes in 2.07: + * MEMDISK: Workaround for BIOSes which go into a snit when + they get a RESET command for the floppy system when there is + no floppy in the system. + * PXELINUX: Add "ipappend 2", which passes the hardware + address of the boot interface to the kernel as a + command-line option. + * mkdiskimage: fix the generation of the end limit. + * PXELINUX: Fix multiple bugs in chainloading of other NBPs. + * MEMDISK: Fix bug that would occationally cause "ran out of + input data" when using compressed disk images. + * SYSLINUX: Updates for the win32 installer (from Lars Munch.) + * PXELINUX: PXELINUX-specific options are now recognized both + in a vendor-option-space (a.k.a. type 43 encapsulated) as + well as in a site-option-space (unencapsulated.) + * COM32: Don't crash when DS != 0. + * COMBOOT/COM32: Make file reading work correctly. Thanks to + Phung Chi Kien for submitting a test program. + +Changes in 2.06: + * ALL: Fix problem that would occationally cause a + boot failure, depending on the length of the kernel. + * ISOLINUX: Fix problem that would occationally cause a + boot failure, depending on the length of directories. + * SYSLINUX: Win32 installer now flushes buffers. + * ppmtolss16: Be fully compliant with the PNM spec; + actually process comments in the header and odd + alignments of the various parameters, as well as + "plain" (not raw) files and PBM and PGM files. + * PXELINUX: Lower the default MTU to 1472 in order to deal + with systems with slightly nonstandard MTUs, and PXE + stacks which don't defragment correctly. Unfortunately this + is very hard to test dynamically. + +Changes in 2.05: + * PXELINUX: Add a default query based on the hardware address + of the boot device. This is in lower case hexadecimal form + separated by dashes and including the hardware type, for + example, the Ethernet (type 1) address 88:99:AA:BB:CC:DD + would query the file pxelinux.cfg/01-88-99-aa-bb-cc-dd. + * PXELINUX: Fix bug involving non-IP-based config file names. + * SYSLINUX: New installer for WinNT-based systems, from Lars + Munch. + * MEMDISK: Fix handling of memory region overlap when + decompressing. Thanks to Mikhail Kupchik for identifying + the problem. + +Changes in 2.04: + * ALL: Reclaim even more low memory by observing that + comboot_seg == real_mode_seg is perfectly fine, and by the + fact that the 1000h segment managed to get unused in all + derivatives... + * PXELINUX: Attempt to negotiate full Ethernet-sized blocks + (1468 bytes) using the blksize option. + * SYSLINUX: Resurrect the old no-mtools version of the + installer, although as a root-only tool. Some distributors + have indicated that they need a small standalone installer. + * MEMDISK: Fix a memory offset computation error when + installing compressed disks which generally would cause + 1 MB of memory to be wasted. + * MEMDISK: Fix installing the E820 memory map. Calling + INT 15h AX=0E820h with MEMDISK 2.03 loaded would give a + completely corrupt memory map. + * SYSLINUX: Make libsyslinux a dynamic library, so that it can + be updated separately from client programs. The whole idea, + after all, is to enable alternate programs to become + syslinux installers. + * Include an rpm spec file in the distribution, so rpmbuild + -ta works. + +Changes in 2.03: + * Actually support comment lines in the configuration file. + * PXELINUX: Try to resolve some problems with stack switches. + * PXELINUX: Handle PXE stacks with broken routing. + With these workarounds, the remote install PXE boot floppy + (rbfg.exe) from Argon Technologies should work correctly. + * Fix problems with Perl scripts in UTF-8 locales. + * You probably need NASM 0.98.34 or later to compile this + version. 0.98.36 is recommended. + * MEMDISK: Now supports gzip compressed images. + +Changes in 2.02: + * SYSLINUX: Security flaws have been found in the SYSLINUX + installer when running setuid root. Rewrite the SYSLINUX + installer so it uses mtools instead. It therefore now + requires mtools (specifically mcopy and mattrib) to exist on + your system, but it will not require root privileges and + SHOULD NOT be setuid. + +Changes in 2.01: + * MEMDISK: Fix memory sizing bug when the ramdisk crosses the + 16 MB boundary. + * MEMDISK: Add a "pause" option to stop immediately before + booting, to read off the messages. + * MEMDISK: Support disk images with DOSEMU headers. + * Update the mkdiskimage script to handle newer mtools + versions, and be able to generate disk images with DOSEMU + headers (controlled by the -d option). + * Fix the COM32 sample program. + * PXELINUX, ISOLINUX: Fix some COMBOOT API calls. + * PXELINUX: Doc fix. + * Build SYSLINUX into a small library for encapsulation into + other programs (however, please keep in mind this is a GPL'd + library.) + * SYSLINUX: Make installer work with "owner" in /etc/fstab. + * SYSLINUX: Fix issue with working on nonpartitioned hard disk + devices. THIS CONFIGURATION IS NOT RECOMMENDED. + +Changes in 2.00: + * ALL: Add support for "COM32" (32-bit COMBOOT) images. + * ALL: Add an API for COMBOOT/COM32 images. See comboot.doc + for details. There is a C development environment for + COM32 being created; it should be ready at some point in + the future. + * Fix mbr.asm so that it actually works. + * SYSLINUX: The syslinux installer *SHOULD* now be safe to + run setuid root. + * PXELINUX: Fix bug where PXELINUX would override random + chunks of the UNDI code segment! Thanks to Kevin Tran for + finding this bug. + * ISOLINUX: Fix a bug related to slashes in pathnames. + * ISOLINUX: Fix a bug in handling initrds over 128 MB. + * ALL: Make the key print out the version; this is + to help debugging. + * Add a small script, mkdiskimage, to create a DOS-formatted + hard disk image using mtools. This may be useful in + conjunction with MEMDISK. + * ISOLINUX: Search for a /boot/isolinux directory as well as + /isolinux. + * ALL: Fix a bug related to very long configuration files. + * PXELINUX: Work around a NASM bug which would result in no + delay before reset if an error occurs. + +Changes in 1.76: + * ISOLINUX: Remove code no longer used which caused hangs on + some Toshiba laptops. + +Changes in 1.75: + * ALL: NASM 0.98.32 or later is now required to build + SYSLINUX from sources. + * SYSLINUX: put back in the workaround for the BIOS floppy + table. This seems to be a requirement for "extended" floppy + formats to work correctly. + * SYSLINUX: No longer warn if one is trying to boot on a 286 + or older. The above BIOS workaround no longer fits if the + requirement to use only 8086-compatible code in the early + boot is maintained. It made sense in 1994, but in 2002 a + 286 or older is a museum object. + * SYSLINUX: Use a downright bizarre, stateful algorithm to try + to guess the maximum transfer size. I am *hoping* this will + cut down on the number of systems for which -s is required + to work at any acceptable speed. + * ISOLINUX: Add a few more workarounds for various broken El + Torito BIOSes. + * Make sure .depend files aren't accidentally packed... + * ALL: Fix bugs in the extension-detect code; this caused + files like COMBOOT images and CD boot sectors to be + mis-identified as Linux kernels and rejected. + * ALL: Fix the return from COMBOOT. + * ALL: Do some of the early groundwork for supporting DOS + system calls in COMBOOT. + * Get rid of unnecessary "near" directives, making the code + bigger. + * PXELINUX: Put the PXE stack back in the init state before + invoking a chain-loaded NBP. + * PXELINUX: Actually found the combination of calls that + allows some (most?) PXE 2+ stacks to be unloaded from memory + properly. + * PXELINUX: Add "keeppxe" command-line option to disable + the standard unloading of the PXE stack. + +Changes in 1.74: + * SYSLINUX: fix bug that would cause valid kernel images to be + labelled "invalid". + +Changes in 1.73: + * Work on removing gratuitous differences between modules. + * Break up the source in common and module-specific files. + * PXELINUX: Allow chaining of other PXE NBPs. + * ISOLINUX: Allow loading "CD-ROM boot sectors". + * ALL: generalize the definition of a boot sector/NBP. + +Changes in 1.72: + * PXELINUX, ISOLINUX: Fix bugs in the new core code. + +Changes in 1.71: + * Fix a "brown paper bag" class bug in the new core code. + +Changes in 1.70: + * Major code restructuring. + * Relax the conventional memory limits somewhat. + * MEMDISK: Set up the "version number string" pointer in the + header correctly. + * SYSLINUX: Fix, again, "the bug that won't die": the use of + the offset parameter with the SYSLINUX installer. + * SYSLINUX: Fix possible superblock corruption problem in the + SYSLINUX installer. + +Changes in 1.67: + * Handle bug in the location of initrd. + +Changes in 1.66: + * MEMDISK: Make compile with newer versions of gcc. + +Changes in 1.65: + * ISOLINUX: Support booting disk image files (to boot DOS or + other non-Linux operating systems), *IF* the BIOS works + correctly; unfortunately many BIOSes apparently don't. + * Support Linux boot protocol version 2.03 (explicitly + specify the initrd address limit.) + * Handle small "pseudo-kernels"; images that use the Linux + kernel boot protocols but are less than 64K in size. + * MEMDISK: New subsystem; this is a driver which allows + legacy OSes to boot using an in-memory simulated disk. + See memdisk/memdisk.doc for more info. + * PXELINUX, ISOLINUX: Correctly handle files larger than 65535 + blocks (32 MB for PXELINUX, 128 MB for ISOLINUX.) + * PXELINUX: Make a best-effort attempt at freeing all memory + claimed. From the looks of it, it will fail on most PXE + stacks. + +Changes in 1.64: + * Limited support for hardware flow control when using a + serial port console. + * Support specifying the serial port I/O address explicitly. + * Make DOS installer hopefully behave more nicely when used on + recent Windows versions. + * Fix returning to text mode when a font has been specified. + * Attempt to detect missing serial port hardware and disable + the serial port if there is nothing there. + +Changes in 1.63: + * Make the ppmtolss16 program handle color conversion more + correctly. + * Clean up "make install" target, honour INSTALLROOT if it + exists. + * SYSLINUX: Fix stack-smash bug identified by Steffen + Winterfeldt. + * Hopefully fix return-to-text-mode on some graphics cards. + * ISOLINUX: Bug workaround for Award BIOS 4.51, and perhaps + other buggy BIOSes as well. + +Changes in 1.62: + * PXELINUX: Allow the DHCP server to override the + configuration file name and pathname prefix, using + "site-specific" DHCP options. + * PXELINUX: Documentation fixes. + * PXELINUX: Fix the "ipappend" option; the last two values + were reversed vs. what the kernel expected. + * Introduce a way to return to text mode once we are already + in graphics mode. This may be useful for F-key help + screens. + * Fix several bugs in the way return to text mode was handled. + +Changes in 1.61: + * ISOLINUX: Support full pathname searches. Max length for a + pathname is 255 characters. As a result, only 64 "label" + statements are supported in ISOLINUX. + * PXELINUX: Max filename length extended to 63 characters. + +Changes in 1.60: + * Add support for graphical splash screens. + * Add mode control characters, which allows you to control + message display output depending on output mode (text, + graphics, or serial port.) + * ISOLINUX: New program, which boots Linux from a CD-ROM + without using floppy emulation mode. See isolinux.doc for + more details. + * PXELINUX: Don't search for boot sector file types, since + they don't work anyway. + * SYSLINUX: Document the LOCK command for Win9x, and the error + dialog box for WinNT/2K. + +Changes in 1.54: + * PXELINUX: Fix code for finding !PXE from PXENV+. This was + due to a spec bug; match the most recent spec since that + seems to be what implementations actually do. + * SYSLINUX: Add some smarts to the boot sector, which + hopefully should reduce the number of systems which require + stupid mode ("syslinux -s"). + * PXELINUX: Document further some of the pathologies with old + PXE stacks. + * When specifying a "default" command line, no longer + automatically appent "auto". See the "DEFAULT" command in + syslinux.doc for more information. + * PXELINUX: Clean up the allocation of local socket numbers. + +Changes in 1.53: + * PXELINUX: Rename pxelinux.bin to pxelinux.0, to match what + most PXE servers seem to expect. + * PXELINUX: Update the DHCP/boot server setup documentation. + * PXELINUX: Support new "localboot" option for "label" + sections. + * PXELINUX: More robust parsing of DHCP/boot server packets. + * PXELINUX: Include a small utility program "gethostip" to + compute hexadecimal IP addresses. + +Changes in 1.52: + * PXELINUX: Fix bugs introduced by new A20 code. (SYSLINUX + has also been changed for code consistency reasons, but I'm + pretty sure the changes are don't care on SYSLINUX.) + * Documentation updates. + * PXELINUX: Add "ipappend" option to generate an ip= option to + the kernel. + +Changes in 1.51: + * PXELINUX: Not all PXE stacks fill in the IP address for a + type 3 cached info query. Use a type 2 cached info query + for this information (only.) + * Yet another attempt at A20 coding. Now support BIOS call + 15:2401 as well, and handle machines which always have A20 + on separately. + * Support memory detection using INT 15h, AX=0E820h. BIOS + manufacturers have apparently gotten sloppy about keeping + INT 15h, AX=0E801h working properly. + * Don't issue onto the serial port when we're doing + screen wraparound. + +Changes in 1.50: + * Yet another A20-code update. It seems some "legacy-free" + machines and embedded gear simply don't have a KBC to talk + to, and that waiting for one will wait forever. Sigh. + +Changes in 1.49: + * SYSLINUX: Implement a hack for BIOS drivers which hog significant + chunks of low memory during boot. (Note: PXELINUX already + had this modification. SYSLINUX does still require that the + low 512K is available; PXELINUX requires 384K. Machines + with a physical memory hole in the low 640K cannot boot + Linux no matter what.) Depending what the reason is for the + memory hole, a new kernel (2.4.0-test3-pre3 or later) may be + required. + * SYSLINUX: Default installer binary now compiled against + glibc 2.1. If this is inappropriate for your system and you + still want to use the offical version of SYSLINUX, please + follow the instructions in "distrib.doc" to rebuild the + installer. + * SYSLINUX: Linux installer program now supports -o + option which does a loopback mount with the + -o loop,offset=<> option. Useful to run SYSLINUX on an + individual partition of a whole-harddisk image. + * Include the source code to a Master Boot Record (MBR) + functionally equivalent to the one installed DOS except it + includes EBIOS support, and should be resistant to geometry + changes. The MBR code is public domain. + * PXELINUX: Fix "double p" bug: if the tftp prefix was null, + all filenames would get a "p" preprended, e.g. + "ppxelinux.cfg" and "pvmlinux". + +Changes in 1.48: + * PXELINUX: Workaround for PXE ROMs based on the Intel PXE PDK + 3.0 build 071 and earlier: missing !PXE structure pointer. + * PXELINUX: Handle larger BOOTP/DHCP packages. + * PXELINUX: The command line passing was broken; fix. + * PXELINUX: Make COMBOOT images work. + * PXELINUX: Documentation on how to make booting work using + the PDK 3.0-derived clients, which aren't so generous as to + allow booting with only "PXEClient" specified. + +Changes in 1.47: + * PXELINUX: RFC 1123 states that a TFTP implementation MUST + use adaptive timeout, "at least an exponential backoff of + retransmission timeout is necessary." Implement a very + simple exponential backoff for retransmits. + * PXELINUX: Updated documentation, including pointer to new + TFTP server. + * PXELINUX: When sending ERROR due to bad OACK, use the proper + destination port number (why are TFTP port numbers so odd?) + * PXELINUX: If the boot dies in the middle somewhere, + eventually give up and reset the machine (unattended + operation.) + +Changes in 1.46: + * New program PXELINUX to do network booting using a + PXE-compliant (Pre-Execution Environment) network booting + PROM. See pxelinux.doc for details. + +Changes in 1.45: + * Serial console support. See syslinux.doc for details. + +Changes in 1.44: + * Change HIGHMEM_MAX to 38000000h to (hopefully) avoid the + kernel stepping on it; 3f000000h was apparently a higher + limit than the kernel used! + +Changes in 1.43: + * Add sys2ansi.pl script to display the contents of a + colorized SYSLINUX file. + * Changed the io_delay once again, after a report that the + old delay port causes hangs on some systems. + +Changes in 1.42: + * Frob the "fast A20 gate" port as well as the keyboard + controller; will this help systems with problems? + * Be even more paranoid about A20, unfortunately even this + seems to be not paranoid enough... what I don't understand + is that if there is hardware out there *this broken*, how + can it run Linux at all? Report an error message rather + than hang forever if A20 is stuck. + * Include some intermediate files in the distribution, plus + provide a "make installer" target for distributors to relink + the install programs only. I would prefer the syslinux boot + loader proper to be "binary clean" for debuggablity -- use + "make clean ; make installer" to rebuild the installers only. + +Changes in 1.41: + * Don't get confused by directories, volume labels, or VFAT + long names. + * Use INT 15h, AX=0E801h to query memory size before trying + INT 15h, AH=88h. This not only provides more headroom + between the kernel and the initrd on large-memory machines, + but it appears some recent BIOSes actually have started + returning garbage for the AH=88h (older) call. + * Trust high memory beyond the 15 MB mark if the user has + specified it, or if obtained with INT 15h, AH=0E801h (with + no memory holes above 1 MB.) + +Changes in 1.40: + * Increase A20M delay and put in a test to avoid problems on + certain IBM Thinkpads (thanks to Donnie Barnes of RedHat + for vital info on this one.) + * Support COMBOOT style boot command images. + * Support chain loading (foreign operating systems, e.g. DOS). + * Include a new "copybs" DOS utility to copy a boot sector to + a file (under Linux, use "dd".) + * Fix the DOS installer to work for disks over 32 MB. + * SYSLINUX should now handle disks with more than 65536 tracks. + +Changes in 1.37: + * Fix a bug that caused "label" statements in syslinux.cfg to + not be handled properly. + * Updated the documentation. Among other things, we now allow + up to 128 "label" statements. + +Changes in 1.36: + * Fix for booting old (pre-initrd) kernels. + * It seems at least some versions of OS/2 doesn't set up all + the fields in the superblock correctly. Account for that. + * Fix bug that caused boot failure when using the mem= option. + +Changes in 1.35: + * Loading from partitions now should work properly. (Actually + tested, this time. You should even be able to dd a floppy + to a partition and boot from it.) + * Removed large workaround code for an alleged ancient BIOS + bug I have never actually seen. The -s option should work + on those machines, anyway. + * Support for simple keyboard remappings, same as used by + LILO (once again to support localization.) The program + keytab-lilo.pl from the LILO distribution included to + generate such maps. + * Added a "safe, slow and stupid" (-s) option to the + installers. This option will lobotomize the boot sector to + hopefully work on even very buggy BIOSes. + +Changes in 1.34: + * Ability to load a VGA font on bootup (for localized Linux + distributions.) + +Changes in 1.33: + * Bug fix in the Linux installer. + * Added a workaround for a bug in certain AMI/Intel BIOSes + when booting from CD-ROM. + * Documentation changes. + +Changes in 1.32: + * FAT16 filesystems are now supported. + +Changes in 1.31: + * Now compiles under Linux, using NASM, rather than using + Turbo Assembler under DOS. See http://www.cryogen.com/Nasm + for information about NASM. + * Linux-hosted SYSLINUX installer, as well as a + rewritten DOS installer (now is written in assembler, so we + don't need Turbo C.) + +Changes in 1.30: + * Added support for loading bzImage and initrd loading, and made + SYSLINUX new-setup-code aware (SYSLINUX 1.30 id=0x31). + * Added LILO-style kernel labels; see the LABEL and IMPLICIT + keywords in README file. + * Added support for colorization of intro and help screens. + * The vga= option is now handled correctly. + * Massive rewrite of large chunks of the code in order to + support the first two new features. + +Changes in 1.20: + * Added simple online help at the "boot:" prompt. + * Removed 2880K image as I no longer have access to such a + floppy drive. (Donations accepted!!) + * Decided to distribute the source in a subdirectory rather + than in a nested zipfile. + +Changes in 1.11: + * Removed a sanity check which would cause booting to fail on + Phoenix BIOS version 4.03. Apparently this BIOS is buggy. + +Changes in 1.10: + * Added configuration file SYSLINUX.CFG. This file contains all + configurable options, and can be edited from any OS which can + access an MS-DOS filesystem; there is no longer a need to run + SYSLINUX.EXE except to write the boot sector. + * Default command line now given by "default" line in config + file. + * LINUXMSG.TXT and BOOTMSG.TXT hard-coded file names replaced by + "display" and "prompt" lines in config file. + * LILO-style option appending now supported ("append" line in + config file). + * Prompt timeout is now supported ("timeout" line in config + file). The timeout is cancelled when anything is typed on the + command line. + * Pressing or at the Loading... stage now aborts + the kernel loading in progress and returns the user to the + boot: prompt. + * The installer now automatically sets the READONLY flag on + LDLINUX.SYS. + * Added 2880K disk image. + +Changes in 1.03: + * Fixed bug that would prevent booting from double-density + floppies and other DOS filesystems with multiple sectors per + cluster. + * Added 720K disk image. + * Changed default kernel name on disk images to LINUX. + +Changes in 1.02: + * Fixed bug that would garble the command line on recent kernels + with more than 4 sectors of setup code (this wasn't really a + *bug*; rather, a kernel change broke the code. Unfortunately + the Linux boot interface is still sorely undocumented). + * Added BOOTMSG.TXT file support (message file which does not + force display of the boot prompt). + +Changes in 1.01: + * Fixed bug on some (most?) 386 BIOSes would require two boot + attempts. diff --git a/config/release/3rdparty/syslinux/README b/config/release/3rdparty/syslinux/README new file mode 100644 index 0000000000..aebc421c9d --- /dev/null +++ b/config/release/3rdparty/syslinux/README @@ -0,0 +1,34 @@ +See the files in the doc directory for documentation about SYSLINUX: + + syslinux.txt - Usage instructions; manual. + distrib.txt - For creators of Linux distributions. + pxelinux.txt - Documentation specific to PXELINUX. + isolinux.txt - Documentation specific to ISOLINUX. + extlinux.txt - Documentation specific to EXTLINUX. + menu.txt - About the menu systems. + usbkey.txt - About using SYSLINUX on USB keys. + comboot.txt - About the extension API. + memdisk.txt - Documentation about MEMDISK. + +Also see the files: + + NEWS - List of changes from previous releases. + TODO - About features planned for future releases. + COPYING - For the license terms of this software. + +SYSLINUX now builds in a Linux environment, using nasm. You need nasm +version 0.98.39 or later to build SYSLINUX from source. See +http://nasm.sf.net/ for information about nasm. + +There is now a mailing list for SYSLINUX. See the end of syslinux.txt +for details. + +SYSLINUX is: + + Copyright 1994-2010 H. Peter Anvin et al - All Rights Reserved + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, Inc., 53 Temple Place Ste 330, + Boston MA 02111-1307, USA; either version 2 of the License, or + (at your option) any later version; incorporated herein by reference. diff --git a/config/release/3rdparty/syslinux/doc/comboot.txt b/config/release/3rdparty/syslinux/doc/comboot.txt new file mode 100644 index 0000000000..4b4b88037b --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/comboot.txt @@ -0,0 +1,1012 @@ + + COMBOOT and COM32 files + + +Syslinux supports simple standalone programs, using a file format +similar to DOS ".com" files. A 32-bit version, called COM32, is also +provided. A simple API provides access to a limited set of filesystem +and console functions. + + + ++++ COMBOOT file format ++++ + +A COMBOOT file is a raw binary file containing 16-bit code. It should +be linked to run at offset 0x100, and contain no absolute segment +references. It is run in 16-bit real mode. + +A COMBOOT image can be written to be compatible with MS-DOS. Such a +file will usually have extension ".com". A COMBOOT file which is not +compatible with MS-DOS will usually have extension ".cbt". + +Before running the program, Syslinux sets up the following fields in +the Program Segment Prefix (PSP), a structure at offset 0 in the +program segment: + + Offset Size Meaning + 0 word Contains an INT 20h instruction + 2 word Contains the paragraph (16-byte "segment" address) at + the end of memory available to the program. + 128 byte Length of the command line arguments, including the leading + space but not including the final CR character. + 129 127b Command line arguments, starting with a space and ending + with a CR character (ASCII 13). + +The program is allowed to use memory between the PSP paragraph (which +all the CS, DS, ES and SS registers point to at program start) and the +paragraph value given at offset 2. + +On startup, SP is set up to point to the end of the 64K segment, at +0xfffe. Under DOS it is possible for SP to contain a smaller +value if memory is very tight; this is never the case under Syslinux. + +The program should make no assumptions about what segment address it +will be loaded at; instead it should look at the segment registers on +program startup. Both DOS and Syslinux will guarantee CS == DS == ES +== SS on program start; the program should not assume anything about +the values of FS or GS. + +To exit, a program can either execute a near RET (which will jump to +offset 0 which contains an INT 20h instruction, terminating the +program), or execute INT 20h or INT 21h AH=00h or INT 21h AH=4Ch. +If compatiblity with Syslinux 1.xx is desired, use INT 20h. + + + ++++ COM32R file format ++++ + +A COM32R file is a raw binary file containing 32-bit code. It should +be self-relocating, as it will be loaded by the Syslinux core at any +4K aligned address. It will be run in flat-memory 32-bit protected +mode. Under Syslinux, it will be run in CPL 0, however, since it may +be possible to create a COM32 execution engine that would run under +something like Linux DOSEMU, it is recommended that the code does not +assume CPL 0 unless absolutely necessary. + +A COM32R program must start with the byte sequence B8 FE 4C CD 21 (mov +eax,21cd4cfeh) as a magic number. + +The COM32R format replaces the earlier COM32 format, which was linked +to a fixed address (0x101000). + +A COM32R file should have extension ".c32". + +On startup, CS will be set up as a flat 32-bit code segment, and DS == +ES == SS will be set up as the equivalent flat 32-bit data segment. +FS and GS are reserved for future use and are currently initialized to +zero. A COM32R image should not assume any particular values of +segment selectors. + +ESP is set up at the end of available memory and also serves as +notification to the program how much memory is available. + +The following arguments are passed to the program on the stack: + + Address Size Meaning + [ESP] dword Return (termination) address + [ESP+4] dword Number of additional arguments (currently 8) + [ESP+8] dword Pointer to the command line arguments (null-terminated string) + [ESP+12] dword Pointer to INT call helper function + [ESP+16] dword Pointer to low memory bounce buffer + [ESP+20] dword Size of low memory bounce buffer + [ESP+24] dword Pointer to FAR call helper function (new in 2.05) + [ESP+28] dword Pointer to CDECL helper function (new in 3.54) + [ESP+32] dword Amount of memory controlled by the Syslinux core (new in 3.74) + [ESP+36] dword Pointer to the filename of the com32 module (new in 3.86) + [ESP+40] dword Pointer to protected-mode functions (new in 4.00) + +The libcom32 startup code loads this into a structure named __com32, +defined in : + +extern struct com32_sys_args { + uint32_t cs_sysargs; + char *cs_cmdline; + void __cdecl(*cs_intcall)(uint8_t, const com32sys_t *, com32sys_t *); + void *cs_bounce; + uint32_t cs_bounce_size; + void __cdecl(*cs_farcall)(uint32_t, const com32sys_t *, com32sys_t *); + int __cdecl(*cs_cfarcall)(uint32_t, const void *, uint32_t); + uint32_t cs_memsize; + const char *cs_name; + const struct com32_pmapi *cs_pm; +} __com32; + +The intcall helper function can be used to issue BIOS or Syslinux API +calls, and takes the interrupt number as first argument. The second +argument is a pointer to the input register definition, an instance of +the following structure (available in ): + +typedef union { + uint32_t l; + uint16_t w[2]; + uint8_t b[4]; +} reg32_t; + +typedef struct { + uint16_t gs; /* Offset 0 */ + uint16_t fs; /* Offset 2 */ + uint16_t es; /* Offset 4 */ + uint16_t ds; /* Offset 6 */ + + reg32_t edi; /* Offset 8 */ + reg32_t esi; /* Offset 12 */ + reg32_t ebp; /* Offset 16 */ + reg32_t _unused_esp; /* Offset 20 */ + reg32_t ebx; /* Offset 24 */ + reg32_t edx; /* Offset 28 */ + reg32_t ecx; /* Offset 32 */ + reg32_t eax; /* Offset 36 */ + + reg32_t eflags; /* Offset 40 */ +} com32sys_t; + +The third argument is a pointer to the output register definition, an +instance of the same structure. The third argument can also be zero +(NULL). + +Since BIOS or Syslinux API calls can generally only manipulate data +below address 0x100000, a "bounce buffer" in low memory, at least 64K +in size, is available, to copy data in and out. + +The farcall helper function behaves similarly, but takes as its first +argument the CS:IP (in the form (CS << 16) + IP) of procedure to be +invoked via a FAR CALL. + +The cfarcall helper function takes (CS << 16)+IP, a pointer to a stack +frame, a size of that stack frame, and returns the return value of EAX +(which may need to be appropriate truncated by the user.) + +Starting in version 4.00, some of these API calls are available as +protected-mode function calls, using the regparm(3) calling convention +(the first three argumetns in EAX, EDX, ECX; the rest on the stack.) +Those functions are defined in struct com32_pmapi, defined in +. + + + ++++ SYSLINUX API CALLS +++ + +Syslinux provides the following API calls. Syslinux 1.xx only +supported INT 20h - terminate program. [] indicates the first version +of Syslinux which supported this feature (correctly.) + +NOTE: Most of the API functionality is still experimental. Expect to +find bugs. + + + ++++ DOS-COMPATIBLE API CALLS ++++ + +INT 20h [1.48] Terminate program +INT 21h AH=00h [2.00] Terminate program +INT 21h AH=4Ch [2.00] Terminate program + + All of these terminate the program. + + +INT 21h AH=01h [2.01] Get Key with Echo + + Reads a key from the console input, with echo to the console + output. The read character is returned in AL. Extended + characters received from the keyboard are returned as NUL (00h) + + the extended character code. + + +INT 21h AH=02h [2.01] Write Character + + Writes a character in DL to the console (video and serial) + output. + + +INT 21h AH=04h [2.01] Write Character to Serial Port + + Writes a character in DL to the serial console output + (if enabled.) If no serial port is configured, this routine + does nothing. + + +INT 21h AH=08h [2.09] Get Key without Echo + + Reads a key fron the console input, without echoing it to the + console output. The read character is returned in AL. + + +INT 21h AH=09h [2.01] Write DOS String to Console + + Writes a DOS $-terminated string in DS:DX to the console. + + +INT 21h AH=0Bh [2.00] Check Keyboard + + Returns AL=FFh if there is a keystroke waiting (which can then + be read with INT 21h, AH=01h or AH=08h), otherwise AL=00h. + + +INT 21h AH=30h [2.00] Check DOS Version + + This function returns AX=BX=CX=DX=0, corresponding to a + hypothetical "DOS 0.0", but the high parts of EAX-EBX-ECX-EDX + spell "SYSLINUX": + + EAX=59530000h EBX=4C530000h ECX=4E490000h EDX=58550000h + + This function can thus be used to distinguish running on + Syslinux from running on DOS. + + + ++++ SYSLINUX-SPECIFIC API CALLS ++++ + +Syslinux-specific API calls are executed using INT 22h, with a +function number in AX. INT 22h is used by DOS for internal purposes; +do not execute INT 22h under DOS. + +DOS-compatible function INT 21h, AH=30h can be used to detect if the +Syslinux API calls are available. + +Any register not specifically listed as modified is preserved; +however, future versions of Syslinux may add additional output +registers to existing calls. + +All calls return CF=0 on success, CF=1 on failure. The noted outputs +apply if CF=0 only unless otherwise noted. All calls clobber the +arithmetric flags (CF, PF, AF, ZF, SF and OF) but leave all other +flags unchanged unless otherwise noted. + + +AX=0001h [2.00] Get Version + + Input: AX 0001h + Output: AX number of INT 22h API functions available + CH Syslinux major version number + CL Syslinux minor version number + DL Syslinux derivative ID (e.g. 32h = PXELINUX) + ES:SI Syslinux version string + ES:DI Syslinux copyright string + + This API call returns the Syslinux version and API + information. + + Note: before version 3.86, the version string had a leading CR LF + and the copyright string had a leading space. The strings might + still contain trailing CR and/or LF. + + +AX=0002h [2.01] Write String + + Input: AX 0002h + ES:BX null-terminated string + Output: None + + Writes a null-terminated string on the console. + + +AX=0003h [2.01] Run command + + Input: AX 0003h + ES:BX null-terminated command string + Output: Does not return + + This API call terminates the program and executes the command + string as if the user had entered it at the Syslinux command + line. This API call does not return. + + +AX=0004h [2.01] Run default command + + Input: AX 0004h + Output: Does not return + + This API call terminates the program and executes the default + command string as if the user had pressed Enter alone on the + Syslinux command line. This API call does not return. + + +AX=0005h [2.00] Force text mode + + Input: AX 0005h + Output: None + + If the screen was in graphics mode (due to displaying a splash + screen using the command in a message file, or + similar), return to text mode. + + +AX=0006h [2.08] Open file + + Input: AX 0006h + ES:SI null-terminated filename + Output: SI file handle + EAX length of file in bytes, or -1 + CX file block size + + Open a file for reading. The exact syntax of the filenames + allowed depends on the particular Syslinux derivative. + + The Syslinux file system is block-oriented. The size of a + block will always be a power of two and no greater than 16K. + + Note: Syslinux considers a zero-length file to be nonexistent. + + In 3.70 or later, EAX can contain -1 indicating that the file + length is unknown. + + 32-BIT VERSION: + + int cs_pm->open_file(const char *filename, struct com32_filedata *data) + + filename - null-terminated filename + data - pointer to a file data buffer + + Returns the file handle, or -1 on failure. + The file data buffer contains block size and file size. + + +AX=0007h [2.08] Read file + + Input: AX 0007h + SI file handle + ES:BX buffer + CX number of blocks to read + Output: SI file handle, or 0 if EOF was reached + ECX number of bytes read [3.70] + + Read blocks from a file. Note that the file handle that is + returned in SI may not be the same value that was passed in. + + If end of file was reached (SI=0), the file was automatically + closed. + + In 3.70 or later, ECX returns the number of bytes read. This + will always be a multiple of the block size unless EOF is + reached. + + The address of the buffer (ES:BX) should be at least 512-byte + aligned. Syslinux guarantees at least this alignment for the + COMBOOT load segment or the COM32 bounce buffer. + + Keep in mind that a "file" may be a TFTP connection, and that + leaving a file open for an extended period of time may result + in a timeout. + + WARNING: Calling this function with an invalid file handle + will probably crash the system. + + 32-BIT VERSION: + + size_t cs_pm->read_file(uint16_t *handle, void *buf, size_t blocks) + + handle - file handle (input and output, set to zero on end of file) + buf - buffer to write to + blocks - number of blocks to read + + Returns number of bytes read, or 0 on failure. + + +AX=0008h [2.08] Close file + + Input: AX 0008h + SI file handle + Output: None + + Close a file before reaching the end of file. + + WARNING: Calling this function with an invalid file handle + will probably crash the system. + + 32-BIT VERSION: + + void cs_pm->close_file(uint16_t handle) + + handle - file handle to close + + +AX=0009h [2.00] Call PXE Stack [PXELINUX ONLY] + + Input: AX 0009h + BX PXE function number + ES:DI PXE parameter structure buffer + Output: AX PXE return status code + + Invoke an arbitrary PXE stack function. On SYSLINUX/ISOLINUX, + this function returns with an error (CF=1) and no action is + taken. On PXELINUX, this function always returns with CF=0 + indicating that the PXE stack was successfully invoked; check + the status code in AX and in the first word of the data buffer + to determine if the PXE call succeeded or not. + + The PXE stack will have the UDP stack OPEN; if you change that + you cannot call any of the file-related API functions, and + must restore UDP OPEN before returning to PXELINUX. + + PXELINUX reserves UDP port numbers from 49152 to 65535 for its + own use; port numbers below that range is available. + + +AX=000Ah [2.00] Get Derivative-Specific Information + + [SYSLINUX, EXTLINUX] + Input: AX 000Ah + CL 9 (to get a valid return in CL for all versions) + Output: AL 31h (SYSLINUX), 34h (EXTLINUX) + DL drive number + CL sector size as a power of 2 (9 = 512 bytes) [3.35] + CH mode [3.73] + 1 = CBIOS mode + 2 = EBIOS mode + ES:BX pointer to partition table entry (if DL >= 80h) + FS:SI pointer to initial ES:DI value [3.53] + GS:DI pointer to partition offset (QWORD) [4.00] + + Note: This function was broken in EXTLINUX 3.00-3.02. + + On boot, ES:DI is supposed to point to the BIOS $PnP + structure, although in practice most operating systems + will search for it in memory. However, preserving + this while chainloading is probably a good idea. + + Note that FS:SI is a pointer to a memory location + containing the original ES:DI value, not the value + itself. + + + [PXELINUX] + Input: AX 000Ah + Output: AL 32h (PXELINUX) + DX PXE API version detected (DH=major, DL=minor) + ECX Local IP number (network byte order) [3.85] + ES:BX pointer to PXENV+ or !PXE structure + FS:SI pointer to original stack with invocation record + GS:DI pointer to network information [4.00] + + Note: DX notes the API version detected by PXELINUX, + which may be more conservative than the actual version + available. For exact information examine the API + version entry in the PXENV+ structure, or the API + version entries in the ROMID structures pointed from + the !PXE structure. + + PXELINUX will use, and provide, the !PXE structure + over the PXENV+ structure. Examine the structure + signature to determine which particular structure was + provided. + + The FS:SI pointer points to the top of the original stack + provided by the PXE stack, with the following values + pushed at the time PXELINUX is started: + + [fs:si+0] GS <- top of stack + [fs:si+2] FS + [fs:si+4] ES + [fs:si+6] DS + [fs:si+8] EDI + [fs:si+12] ESI + [fs:si+16] EBP + [fs:si+20] - + [fs:si+24] EBX + [fs:si+28] EDX + [fs:si+32] ECX + [fs:si+36] EAX + [fs:si+40] EFLAGS + [fs:si+44] PXE return IP <- t.o.s. when PXELINUX invoked + [fs:si+46] PXE return CS + + GS:DI points to a structure of the following form: + + [gs:di+0] 4 - IPv4 + [gs:di+4] My IP + [gs:di+8] Boot server IP + [gs:di+12] Gateway IP + [gs:di+16] Netmask + + [ISOLINUX] + Input: AX 000Ah + Output: AL 33h (ISOLINUX) + DL drive number + CL 11 (sector size as a power of 2) [3.35] + CH mode [3.73] + 0 = El Torito + 1 = Hybrid (hard disk), CBIOS mode + 2 = Hybrid (hard disk), EBIOS mode + ES:BX pointer to El Torito spec packet + FS:SI pointer to initial ES:DI value [3.53] + GS:DI pointer to partition offset (QWORD) [4.00] + + Note: Some very broken El Torito implementations do + not provide the spec packet information. If so, ES:BX + may point to all zeroes or to garbage. Call INT 13h, + AX=4B01h to obtain the spec packet directly from the + BIOS if necessary. + + +AX=000Bh [2.00] Get Serial Console Configuration + + Input: AX 000Bh + Output: DX serial port I/O base (e.g. 3F8h = COM1...) + CX baud rate divisor (1 = 115200 bps, 2 = 57600 bps...) + BX flow control configuration bits (see syslinux.txt) + -> bit 15 is set if the video console is disabled + + If no serial port is configured, DX will be set to 0 and the + other registers are undefined. + + +AX=000Ch [2.00] Perform final cleanup + Input: AX 000Ch + DX derivative-specific flags (0000h = clean up all) + Output: None + + This routine performs any "final cleanup" the boot loader + would normally perform before loading a kernel, such as + unloading the PXE stack in the case of PXELINUX. AFTER + INVOKING THIS CALL, NO OTHER API CALLS MAY BE INVOKED, NOR MAY + THE PROGRAM TERMINATE AND RETURN TO THE BOOT LOADER. This + call basically tells the boot loader "get out of the way, I'll + handle it from here." + + For COM32 images, the boot loader will continue to provide + interrupt and BIOS call thunking services as long its memory + areas (0x0800-0xffff, 0x100000-0x100fff) are not overwritten. + MAKE SURE TO DISABLE INTERRUPTS, AND INSTALL NEW GDT AND IDTS + BEFORE OVERWRITING THESE MEMORY AREAS. + + The permissible values for DX is an OR of these values: + + SYSLINUX: 0000h Normal cleanup + + PXELINUX: 0000h Normal cleanup + 0003h Keep UNDI and PXE stacks loaded + + ISOLINUX: 0000h Normal cleanup + + EXTLINUX: 0000h Normal cleanup + + All other values are undefined, and may have different + meanings in future versions of Syslinux. + + +AX=000Dh [2.08] Cleanup and replace bootstrap code + Input: AX 000Dh + DX derivative-specific flags (see previous function) + EDI bootstrap code (linear address, can be in high memory) + ECX bootstrap code length in bytes (must fit in low mem) + EBX(!) initial value of EDX after bootstrap + ESI initial value of ESI after bootstrap + DS initial value of DS after bootstrap + Output: Does not return + + This routine performs final cleanup, then takes a piece of + code, copies it over the primary bootstrap at address 7C00h, + and jumps to it. This can be used to chainload boot sectors, + MBRs, bootstraps, etc. + + Normal boot sectors expect DL to contain the drive number, + and, for hard drives (DL >= 80h) DS:SI to contain a pointer to + the 16-byte partition table entry. The memory between + 600h-7FFh is available to put the partition table entry in. + + For PXELINUX, if the PXE stack is not unloaded, all registers + (except DS, ESI and EDX) and the stack will be set up as they + were set up by the PXE ROM. + + +AX=000Eh [2.11] Get configuration file name + Input: AX 0000Eh + Output: ES:BX null-terminated file name string + + Returns the name of the configuration file. Note that it is + possible that the configuration file doesn't actually exist. + + +AX=000Fh [3.00] Get IPAPPEND strings [PXELINUX] + Input: AX 000Fh + Output: CX number of strings (currently 2) + ES:BX pointer to an array of NEAR pointers in + the same segment, one for each of the above + strings + + Returns the same strings that the "ipappend" option would have + added to the command line, one for each bit of the "ipappend" + flag value, so entry 0 is the "ip=" string and entry 1 is the + "BOOTIF=" string. + + +AX=0010h [3.00] Resolve hostname [PXELINUX] + Input: AX 0010h + ES:BX pointer to null-terminated hostname + Output: EAX IP address of hostname (zero if not found) + + Queries the DNS server(s) for a specific hostname. If the + hostname does not contain a dot (.), the local domain name + is automatically appended. + + This function only return CF=1 if the function is not + supported. If the function is supported, but the hostname did + not resolve, it returns with CF=0, EAX=0. + + The IP address is returned in network byte order, i.e. if the + IP address is 1.2.3.4, EAX will contain 0x04030201. Note that + all uses of IP addresses in PXE are also in network byte order. + + +AX=0011h [3.05] Obsoleted in 3.80 + + +AX=0012h [3.50] Cleanup, shuffle and boot + Input: AX 0012h + DX derivative-specific flags (see function 000Ch) + ES:DI shuffle descriptor list (must be in low memory) + CX number of shuffle descriptors + EBX(!) initial value of EDX after bootstrap + ESI initial value of ESI after bootstrap + DS initial value of DS after bootstrap + EBP CS:IP of routine to jump to + Output: Does not return + (if CX is too large the routine returns with CF=1) + + This routine performs final cleanup, then performs a sequence + of copies, and jumps to a specified real mode entry point. + This is a more general version of function 000Dh, which can + also be used to load other types of programs. + + The copies must not touch memory below address 7C00h. + + ES:DI points to a list of CX descriptors each of the form: + + Offset Size Meaning + 0 dword destination address + 4 dword source address + 8 dword length in bytes + + The copies are overlap-safe, like memmove(). + + Starting in version 3.50, if the source address is -1 + (FFFFFFFFh) then the block specified by the destination + address and the length is set to all zero. + + Starting in version 3.50, if the destination address is -1 + (FFFFFFFFh) then the data block is loaded as a new set of + descriptors, and processing is continued (and unprocessed + descriptors are lost, this is thus typically only used as the + last descriptor in a block.) The block must still fit in the + internal descriptor buffer (see function 0011h), but can, of + course, itself chain another block. + + + Normal boot sectors expect DL to contain the drive number, + and, for hard drives (DL >= 80h) DS:SI to contain a pointer to + the 16-byte partition table entry. The memory between + 600h-7FFh is available to put the partition table entry in. + + For PXELINUX, if the PXE stack is not unloaded, all registers + (except DS, ESI and EDX) and the stack will be set up as they + were set up by the PXE ROM. + + This interface was probably broken before version 3.50. + + +AX=0013h [3.08] Idle loop call + Input: AX 0013h + Output: None + + Call this routine while sitting in an idle loop. It performs + any periodic activities required by the filesystem code. At + the moment, this is a no-op on all derivatives except + PXELINUX, where it executes PXE calls to answer ARP queries. + + Starting with version 3.10, this API call harmlessly returns + failure (CF=1) if invoked on a platform which does not need + idle calls. Additionally, it's safe to call this API call on + previous Syslinux versions (2.00 or later); it will just + harmlessly fail. Thus, if this call returns failure (CF=1), + it means that there is no technical reason to call this + function again, although doing so is of course safe. + + +AX=0014h [3.10] Local boot [PXELINUX, ISOLINUX] + Input: AX 0014h + DX Local boot parameter + Output: Does not return + + This function invokes the equivalent of the "localboot" + configuration file option. The parameter in DX is the same + parameter as would be entered after "localboot" in the + configuration file; this parameter is derivative-specific -- + see syslinux.txt for the definition. + + +AX=0015h [3.10] Get feature flags + Input: AX 0015h + Output: ES:BX pointer to flags in memory + CX number of flag bytes + + This function reports whether or not this Syslinux version and + derivative supports specific features. Keep in mind that + future versions might have more bits; remember to treat any + bits beyond the end of the array (as defined by the value in + CX) as zero. + + Currently the following feature flag is defined: + + Byte Bit Definition + ---------------------------------------------------- + 0 0 Local boot (AX=0014h) supported + 1 Idle loop call (AX=0013h) is a no-op + + All other flags are reserved. + + +AX=0016h [3.10] Run kernel image + Input: AX 0016h + DS:SI Filename of kernel image (zero-terminated string) + ES:BX Command line (zero-terminated string) + ECX IPAPPEND flags [PXELINUX] + EDX Type of file (since 3.50) + Output: Does not return if successful; returns with CF=1 if + the kernel image is not found. + + This function is similiar to AX=0003h Run command, except that + the filename and command line are treated as if specified in a + KERNEL and APPEND statement of a LABEL statement, which means: + + - The filename has to be exact; no variants are tried; + - No global APPEND statement is applied; + - ALLOWOPTIONS and IMPLICIT statements in the configuration + file do not apply. It is therefore important that the + COMBOOT module doesn't allow the end user to violate the + intent of the administrator. + + Additionally, this function returns with a failure if the file + doesn't exist, instead of returning to the command line. (It + may still return to the command line if the image is somehow + corrupt, however.) + + The file types are defined as follows: + + Equivalent + EDX Config Extensions Type of file + 0 KERNEL Determined by filename extension + 1 LINUX none Linux kernel image + 2 BOOT .bs .bin Bootstrap program + 3 BSS .bss Boot sector with patch [SYSLINUX] + 4 PXE .0 PXE Network Bootstrap Prog [PXELINUX] + 5 FDIMAGE .img Floppy disk image [ISOLINUX] + 6 COMBOOT .com .cbt 16-bit COMBOOT program + 7 COM32 .c32 COM32 program + 8 CONFIG Configuration file + + +AX=0017h [3.30] Report video mode change + Input: AX 0017h + BX Video mode flags + Bit 0: graphics mode + Bit 1: non-default mode + Bit 2: VESA mode + Bit 3: text functions not supported + CX For graphics modes, pixel columns + DX For graphics modes, pixel rows + Output: None + + This function is used to report video mode changes to + Syslinux. It does NOT actually change the video mode, but + rather, allows Syslinux to take appropriate action in response + to a video mode change. Modes that cannot be exited either + with the conventional BIOS mode set command (INT 10h, AH=00h) + or the VESA VBE mode set command (INT 10h, AX=4F02h) should + not be used. + + This function returns with a failure if BX contains any bits + which are undefined in the current version of Syslinux. + + The following bits in BX are currently defined: + + Bit 0: graphics mode + + Indicates that the mode is a graphics mode, as opposed + to a text mode. + + Bit 1: non-standard mode + + A non-standard mode is any mode except text mode and + graphics mode 0012h (VGA 640x480, 16 color.) + + Bit 2: VESA mode + + This mode is a VESA mode, and has to be exited with + the VESA VBE API (INT 10h, AX=4F02h) as opposed to the + conventional BIOS API (INT 10h, AH=00h). + + Bit 3: Text functions not supported + + This indicates that the BIOS text output functions + (INT 10h, AH=02h, 03h, 06h, 09h, 0Eh, 11h) don't work. + If this bit is set, Syslinux will reset the mode + before printing any characters on the screen. + + This is common for VESA modes. + + +AX=0018h [3.30] Query custom font + Input: AX 0018h + Output: AL Height of custom font in scan lines, or zero + ES:BX Pointer to custom font in memory + + This call queries if a custom display font has been loaded via + the "font" configuration file command. If no custom font has + been loaded, AL contains zero. + + +AX=0019h [3.50] Read disk [SYSLINUX, ISOLINUX, EXTLINUX] + Input: AX 0019h + EDX Sector number (LSW) + ESI Sector number (MSW) [4.00] + EDI Reserved - MUST BE ZERO + CX Sector count + ES:BX Buffer address + Output: None + + Read disk blocks from the active filesystem (partition); for + disks, sector number zero is the boot sector. For ISOLINUX, + this call reads the CD-ROM. + + For compatiblity with all systems, the buffer should + *neither* cross 64K boundaries, *nor* wrap around the segment. + + This routine reports "boot failed" (and does not return) on + disk error. + + Note: for ISOLINUX in hybrid mode, this call uses simulated + 2048-byte CD-ROM sector numbers. + + +AX=001Ah [3.50] Obsoleted in 3.80 + + +AX=001Bh [3.50] Obsoleted in 3.80 + + +AX=001Ch [3.60] Get pointer to auxilliary data vector + Input: AX 001Ch + Output: ES:BX Auxilliary data vector + CX Size of the ADV (currently 500 bytes) + + The auxillary data vector is a tagged data structure used + to carry a small amount of information (up to 500 bytes) from + one boot to another. + + +AX=001Dh [3.60] Write auxilliary data vector + Input: AX 001Dh + Output: None + + Write the auxilliary data vector back to disk. Returns + failure for non-disk-based derivatives unless the "auxdata" + configuration command is used to specify a disk location + (not yet implemented.) + + In a future version, PXELINUX may end up attempting to save + the ADV on the server via TFTP write. + + +AX=001Eh [3.74] Keyboard remapping table + Input: AX 001Eh + DX 0000h - all other values reserved + Output: AX format version (1) + CX length in bytes (256) + ES:BX pointer to keyboard table + + This call queries the keyboard remapping table. For the current + version, the format code is always 1 and the length is always + 256. This version can be updated simply by overwriting the version + in memory; this may not be true in the future. + + +AX=001Fh [3.74] Get current working directory + Input: AX 0001Fh + Output: ES:BX null-terminated directory name string + + Returns the current working directory. + + +AX=0020h [3.74] Obsoleted in 4.00 +AX=0021h [3.74] Obsoleted in 4.00 +AX=0022h [3.74] Obsoleted in 4.00 + + These three functions provided opendir/readdir/closedir + functionality in the late 3.xx series. They have been + replaced by the protected-mode interface. + + +AX=0023h [3.80] Get shuffler parameters + Input: AX 0023h + Output: CX size of shuffler "safe area" in bytes + Other registers reserved for future use + + This call gives the size of the required shuffler "safe area", + in bytes; for call 0024h. In the future, it may provide + additional parameters. + + +AX=0024h [3.80] Cleanup, shuffle and boot, raw version + Input: AX 0024h + DX derivative-specific flags (see function 000Ch) + EDI shuffle descriptor list safe area + ESI shuffle descriptor list source + ECX byte count of shuffle descriptor list + Output: Does not return + + This routine performs final cleanup, then performs a sequence + of copies, and jumps to a specified real mode entry point. + This is a more general version of function 000Dh, which can + also be used to load other types of programs. + + Unlike previous obsolete versions of this function, there are + no restrictions that copies must not touch memory below + address 7C00h. Either the shuffle descriptor list or the safe + area (or both) may be located in high memory. + + ESI points to a list of descriptors each of the form: + + Offset Size Meaning + 0 dword destination address + 4 dword source address (-1 = zero) + 8 dword length in bytes (0 = end of list) + + The copies are overlap-safe, like memmove(). + + Before actually executing the move list, the list is moved to + the address specified in EDI. The caller is responsibe to + ensure that the moved descriptor list plus a "safe area" + immediately afterwards (the size of which is specified by + function 0023h) is not disturbed by the copy sequence. It is, + however, safe to overwrite descriptors already consumed. + + If the source address is -1 (FFFFFFFFh) then the block + specified by the destination address and the length is set to + all zero. + + The list is terminated by an entry with length 0. For that + entry, the destination is used as an entry point, and the + source represents the type of entry point: + + 0 16-bit protected mode (dst is CS.base) + 1 Flat 32-bit protected mode (dst is EIP) + + This routine does not set up any GPR register state + whatsoever, including stack. It is the responsibility of the + caller to make sure the entry point provided sets up any + registers needed. + + For mode 0 (16-bit real mode), EAX will contain CR0 with bit 0 + masked out, suitable for loading into CR0 to immediately enter + real mode. Note: if real-mode entry is planned, + (CS.base & 0xfff0000f) should == 0 for compatibility with KVM, + and possibly other virtualization solutions. + + In both mode 0 and mode 1, the data segments will be loaded + with read/write data segments, matching the respective code + segment. For mode 0, B=0 and the limits will be 64K, for mode + 1, B=1 and the limits will be 4 GB. + + + ++++ 32-BIT ONLY API CALLS ++++ + +void *pm_cs->lmalloc(size_t bytes) + + Allocate a buffer in low memory (below 1 MB). + + +void pm_cs->lfree(void *ptr) + + Free a buffer allocated with pm_cs->lmalloc(). + + +DIR *pm_cs->opendir(const char *pathname) + + Open a directory. + + +struct dirent *pm_cs->readdir(DIR *dir) + + Read an entry from a directory. The entry is returned in a + static buffer. + + +int pm_cs->closedir(DIR *dir) + + Close a directory. diff --git a/config/release/3rdparty/syslinux/doc/distrib.txt b/config/release/3rdparty/syslinux/doc/distrib.txt new file mode 100644 index 0000000000..fa10a047a3 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/distrib.txt @@ -0,0 +1,29 @@ +For creators of Linux distributions: + +Syslinux is a notoriously hard program to debug, since it runs outside +of any operating system, and has a tendency to expose BIOS and +hardware bugs on various systems. Therefore, I would appreciate if +you would resist the temptation of recompiling the Syslinux bootloader +itself (ldlinux.asm) if at all possible. If you do that, I will have +to refer any bug reports I receive back to the respective distributor. + +However, I have no such concerns about recompiling the installer +programs, and in fact, with both libc 5 and libc 6 in common use in +the Linux world today I understand if you wish to relink the +Linux-based installer against your system version of libc. Therefore +a special makefile targets "make installer" has been included with the +Syslinux distribution, starting with version 1.42. + +To rebuild the installer programs *only*, starting from a freshly +untarred distribution copy of Syslinux, do: + + make clean + make installer + +If you want to remove all intermediate files, including the ones +obtained from assembling ldlinux.asm and which are included in the +distribution, do "make spotless". + +I appreciate your assistance in this matter. + + H. Peter Anvin diff --git a/config/release/3rdparty/syslinux/doc/extlinux.txt b/config/release/3rdparty/syslinux/doc/extlinux.txt new file mode 100644 index 0000000000..6974a517ab --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/extlinux.txt @@ -0,0 +1,132 @@ +EXTLINUX is a new Syslinux derivative, which boots from a Linux +ext2/ext3 filesystem. + +It works the same way as SYSLINUX (see doc/syslinux.txt), with a few +slight modifications. + +1. The installer is run on a *mounted* filesystem. Run the extlinux + installer on the directory in which you want extlinux installed: + + extlinux --install /boot + + Specify --install (-i) to install for the first time, or + --update (-U) to upgrade a previous installation. + + NOTE: this doesn't have to be the root directory of a filesystem. + If /boot is a filesystem, you can do: + + mkdir -p /boot/extlinux + extlinux --install /boot/extlinux + + ... to create a subdirectory and install extlinux in it. + /boot/extlinux is the recommended location for extlinux. + + +2. The configuration file is called "extlinux.conf", and is expected + to be found in the same directory as extlinux is installed in. + + +3. Pathnames can be absolute or relative; if absolute (with a leading + slash), they are relative to the root of the filesystem on which + extlinux is installed (/boot in the example above), if relative, + they are relative to the extlinux directory. + + extlinux supports subdirectories, but the total path length is + limited to 511 characters. + + +4. EXTLINUX now supports symbolic links. However, extremely long + symbolic links might hit the pathname limit. Also, please note + that absolute symbolic links are interpreted from the root *of the + filesystem*, which might be different from how the running system + would interpret it (e.g. in the case of a separate /boot + partition.) Therefore, use relative symbolic links if at all + possible. + + +5. EXTLINUX now has "boot-once" support. The boot-once information is + stored in an on-disk datastructure, part of extlinux.sys, called + the "Auxillary Data Vector". The Auxilliary Data Vector is also + available to COMBOOT/COM32 modules that want to store small amounts + of information. + + To set the boot-once information, do: + + extlinux --once 'command' /boot/extlinux + + where 'command' is any command you could enter at the Syslinux + command line. It will be executed on the next boot and then + erased. + + To clear the boot-once information, do: + + extlinux --clear-once /boot/extlinux + + If EXTLINUX is used on a RAID-1, this is recommended, since under + certain circumstances a RAID-1 rebuild can "resurrect" the + boot-once information otherwise. + + To clear the entire Auxillary Data Vector, do: + + extlinux --reset-adv /boot/extlinux + + This will erase all data stored in the ADV, including boot-once. + + The --once, --clear-once, and --reset-adv commands can be combined + with --install or --update, if desired. The ADV is preserved + across updates, unless --reset-adv is specified. + + +Note that EXTLINUX installs in the filesystem partition like a +well-behaved bootloader :) Thus, it needs a master boot record in the +partition table; the mbr.bin shipped with Syslinux should work well. +To install it just do: + + cat mbr.bin > /dev/XXX + +... where /dev/XXX is the appropriate master device, e.g. /dev/hda, +and make sure the correct partition in set active. + + +If you have multiple disks in a software RAID configuration, the +preferred way to boot is: + +- Create a separate RAID-1 partition for /boot. Note that the Linux + RAID-1 driver can span as many disks as you wish. + +- Install the MBR on *each disk*, and mark the RAID-1 partition + active. + +- Run "extlinux --raid --install /boot" to install extlinux. This + will install it on all the drives in the RAID-1 set, which means + you can boot any combination of drives in any order. + + + +It is not required to re-run the extlinux installer after installing +new kernels. If you are using ext3 journalling, however, it might be +desirable to do so, since running the extlinux installer will flush +the log. Otherwise a dirty shutdown could cause some of the new +kernel image to still be in the log. This is a general problem for +boot loaders on journalling filesystems; it is not specific to +extlinux. The "sync" command does not flush the log on the ext3 +filesystem. + + +The Syslinux Project boot loaders support chain loading other +operating systems via a separate module, chain.c32 (located in +com32/modules/chain.c32). To use it, specify a LABEL in the +configuration file with KERNEL chain.c32 and APPEND [hd|fd] +[] + +For example: + +# Windows CE/ME/NT, a very dense operating system. +# Second partition (2) on the first hard disk (hd0); +# Linux would *typically* call this /dev/hda2 or /dev/sda2. +LABEL cement + KERNEL chain.c32 + APPEND hd0 2 + +See also doc/menu.txt. + diff --git a/config/release/3rdparty/syslinux/doc/gpt.txt b/config/release/3rdparty/syslinux/doc/gpt.txt new file mode 100644 index 0000000000..090993207c --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/gpt.txt @@ -0,0 +1,69 @@ + GPT boot protocol + +There are two ways to boot a GPT-formatted disk on a BIOS system. +Hybrid booting, and the new GPT-only booting protocol originally +proposed by the author, and later adopted by the T13 committee in +slightly modified form. + + + *** Hybrid booting *** + +Hybrid booting uses a standard MBR, and has bootable ("active") +partitions present, as partitions, in the GPT PMBR sector. This means +the PMBR, instead of containing only one "protective" partition (type +EE), may contain up to three partitions: a protective partition (EE) +*before* the active partition, the active partition, and a protective +partition (EE) *after* the active partition. The active partition is +limited to the first 2^32 sectors (2 TB) of the disk. + +All partitions, including the active partition, should have GPT +partition entries. Thus, changing which partition is active does NOT +change the GPT partition table. + +This is the only known way to boot Microsoft operating systems from a +GPT disk with BIOS firmware. + + + *** New protocol *** + +This defines the T13-approved protocol for GPT partitions with BIOS +firmware. It maintains backwards compatibility to the extent +possible. It is implemented by the file mbr/gptmbr.bin. + +The (P)MBR format is the normal PMBR specified in the UEFI +documentation, with the first 440 bytes used for the boot code. The +partition to be booted is marked by setting bit 2 in the GPT Partition +Entry Attributes field (offset 48); this bit is reserved by the UEFI +Forum for "Legacy BIOS Bootable". + + + -> The handover protocol + +The PMBR boot code loads the first sector of the bootable partition, +and passes in DL=, ES:DI=, sets EAX to +0x54504721 ("!GPT") and points DS:SI to a structure of the following +form: + + Offset Size Contents + --------------------------------------------------------- + 0 1 0x80 (this is a bootable partition) + 1 3 CHS of partition (using INT 13h geometry) + 4 1 0xED (partition type: synthetic) + 5 3 CHS of partition end + 8 4 Partition start LBA + 12 4 Partition end LBA + 16 4 Length of the GPT entry + 20 varies GPT partition entry + +The CHS information is optional; gptmbr.bin currently does *NOT* +calculate them, and just leaves them as zero. + +Bytes 0-15 matches the standard MBR handover (DS:SI points to the +partition entry), except that the information is provided +synthetically. The MBR-compatible fields are directly usable if they +are < 2 TB, otherwise these fields should contain 0xFFFFFFFF and the +OS will need to understand the GPT partition entry which follows the +MBR one. The "!GPT" magic number in EAX and the 0xED partition type +also informs the OS that the GPT partition information is present. + +Syslinux 4.00 and later fully implements this protocol. diff --git a/config/release/3rdparty/syslinux/doc/isolinux.txt b/config/release/3rdparty/syslinux/doc/isolinux.txt new file mode 100644 index 0000000000..eca2a974f1 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/isolinux.txt @@ -0,0 +1,133 @@ + ISOLINUX + + A bootloader for Linux using ISO 9660/El Torito CD-ROMs + + Copyright 1994-2008 H. Peter Anvin - All Rights Reserved + +This program is provided under the terms of the GNU General Public +License, version 2 or, at your option, any later version. There is no +warranty, neither expressed nor implied, to the function of this +program. Please see the included file COPYING for details. + +---------------------------------------------------------------------- + +ISOLINUX is a boot loader for Linux/i386 that operates off ISO 9660/El +Torito CD-ROMs in "no emulation" mode. This avoids the need to create +an "emulation disk image" with limited space (for "floppy emulation") +or compatibility problems (for "hard disk emulation".) + +This documentation isn't here yet, but here is enough that you should +be able to test it out: + +Make sure you have a recent enough version of mkisofs. I recommend +mkisofs 1.13 (distributed with cdrecord 1.9), but 1.12 might work as +well (not tested.) + +To create an image, create a directory called "isolinux" (or, if you +prefer, "boot/isolinux") underneath the root directory of your ISO +image master file tree. Copy isolinux.bin, a config file called +"isolinux.cfg" (see syslinux.txt for details on the configuration +file), and all necessary files (kernels, initrd, display files, etc.) +into this directory, then use the following command to create your ISO +image (add additional options as appropriate, such as -J or -R): + + mkisofs -o \ + -b isolinux/isolinux.bin -c isolinux/boot.cat \ + -no-emul-boot -boot-load-size 4 -boot-info-table \ + + +(If you named the directory boot/isolinux that should of course be +-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat.) + +ISOLINUX resolves pathnames the following way: + +- A pathname consists of names separated by slashes, Unix-style. +- A leading / means it searches from the root directory; otherwise the + search is from the isolinux directory (think of this as the "current + directory".) +- . and .. in pathname searches are not supported. +- The maximum length of any pathname is 255 characters. + +Note that ISOLINUX only uses the "plain" ISO 9660 filenames, i.e. it +does not support Rock Ridge or Joliet filenames. It can still be used +on a disk which uses Rock Ridge and/or Joliet extensions, of course. +Under Linux, you can verify the plain filenames by mounting with the +"-o norock,nojoliet" option to the mount command. Note, however, that +ISOLINUX does support "long" (level 2) ISO 9660 plain filenames, so if +compatibility with short-names-only operating systems like MS-DOS is +not an issue, you can use the "-l" or "-iso-level 2" option to mkisofs +to generate long (up to 31 characters) plain filenames. + +ISOLINUX does not support discontiguous files, interleaved mode, or +logical block and sector sizes other than 2048. This should normally +not be a problem. + +ISOLINUX is by default built in two versions, one version with extra +debugging messages enabled. If you are having problems with ISOLINUX, +I would greatly appreciate if you could try out the debugging version +(isolinux-debug.bin) and let me know what it reports. The debugging +version does not include hybrid mode support (see below.) + + + ++++ NOTE ON THE CONFIG FILE DIRECTORY ++++ + +ISOLINUX will search for the config file directory in the order +/boot/isolinux, /isolinux, /. The first directory that exists is +used, even if it contains no files. Therefore, please make sure that +these directories don't exist if you don't want ISOLINUX to use them. + + + ++++ HYBRID CD-ROM/HARD DISK MODE ++++ + +Starting in version 3.72, ISOLINUX supports a "hybrid mode" which can +be booted from either CD-ROM or from a device which BIOS considers a +hard disk or ZIP disk, e.g. a USB key or similar. + +To enable this mode, the .iso image should be postprocessed with the +"isohybrid" script from the utils directory: + + isohybrid filename.iso + +This script creates the necessary additional information to be able to +boot in hybrid mode. It also pads out the image to an even multiple +of 1 MB. + +This image can then be copied using any raw disk writing tool (on Unix +systems, typically "dd" or "cat") to a USB disk, or written to a +CD-ROM using standard CD burning tools. + +The ISO 9660 filesystem is encapsulated in a partition (which starts +at offset zero, which may confuse some systems.) This makes it +possible for the operating system, once booted, to use the remainder +of the device for persistent storage by creating a second partition. + + + ++++ BOOTING DOS (OR OTHER SIMILAR OPERATING SYSTEMS) ++++ + +WARNING: This feature depends on BIOS functionality which is +apparently broken in a very large number of BIOSes. Therefore, this +may not work on any particular system. No workaround is possible; if +you find that it doesn't work please complain to your vendor and +indicate that "BIOS INT 13h AX=4C00h fails." + +To boot DOS, or other real-mode operating systems (protected-mode +operating systems may or may not work correctly), using ISOLINUX, you +need to prepare a disk image (usually a floppy image, but a hard disk +image can be used on *most* systems) with the relevant operating +system. This file should be included on the CD-ROM in the /isolinux +directory, and have a .img extension. The ".img" extension does not +have to be specified on the command line, but has to be explicitly +specified if used in a "kernel" statement in isolinux.cfg. + +For a floppy image, the size of the image should be exactly one of the +following: + + 1,228,800 bytes - For a 1200K floppy image + 1,474,560 bytes - For a 1440K floppy image + 2,949,120 bytes - For a 2880K floppy image + +Any other size is assumed to be a hard disk image. In order to work +on as many systems as possible, a hard disk image should have exactly +one partition, marked active, that covers the entire size of the disk +image file. Even so, hard disk images are not supported on all +BIOSes. diff --git a/config/release/3rdparty/syslinux/doc/keytab-lilo.txt b/config/release/3rdparty/syslinux/doc/keytab-lilo.txt new file mode 100644 index 0000000000..cdbea0f761 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/keytab-lilo.txt @@ -0,0 +1,85 @@ +This is the documentation for the keytab-lilo.pl program. It was +taken verbatim from the LILO-20 README file; only this header was +added. + +LILO program code, documentation and auxiliary programs are +Copyright 1992-1997 Werner Almesberger. +All rights reserved. + +Redistribution and use in source and binary forms of parts of or the +whole original or derived work are permitted provided that the +original work is properly attributed to the author. The name of the +author may not be used to endorse or promote products derived from +this software without specific prior written permission. This work +is provided "as is" and without any express or implied warranties. + +To use a LILO keyboard table with Syslinux, specify the KBDMAP command +in syslinux.cfg, for example: + + kbdmap de.ktl + +============================================================================ + +Keyboard translation +-------------------- + +The PC keyboard emits so-called scan codes, which are basically key +numbers. The BIOS then translates those scan codes to the character codes +of the characters printed on the key-caps. By default, the BIOS normally +assumes that the keyboard has a US layout. Once an operating system is +loaded, this operating system can use a different mapping. + +At boot time, LILO only has access to the basic services provided by the +BIOS and therefore receives the character codes for an US keyboard. It +provides a simple mechanism to re-map the character codes to what is +appropriate for the actual layout.* + + * The current mechanism isn't perfect, because it sits on top of the + scan code to character code translation performed by the BIOS. This + means that key combinations that don't produce any useful character on + the US keyboard will be ignored by LILO. The advantage of this approach + is its simplicity. + + +Compiling keyboard translation tables +- - - - - - - - - - - - - - - - - - - + +LILO obtains layout information from the keyboard translation tables Linux +uses for the text console. They are usually stored in +/usr/lib/kbd/keytables. LILO comes with a program keytab-lilo.pl that reads +those tables and generates a table suitable for use by the map installer. +keytab-lilo.pl invokes the program loadkeys to print the tables in a format +that is easy to parse.* + + * On some systems, only root can execute loadkeys. It is then necessary + to run keytab-lilo.pl as root too. + +keytab-lilo.pl is used as follows: + + keytab-lilo.pl [ -p = ] ... + [][.] ] + [][.] ] + + -p = + Specifies corrections ("patches") to the mapping obtained from the + translation table files. E.g. if pressing the upper case "A" should + yield an at sign, -p 65=64 would be used. The -p option can be + repeated any number of times. The codes can also be given as + hexadecimal or as octal numbers if they are prefixed with 0x or 0, + respectively. + The directory in which the file resides. The default path is + /usr/lib/kbd/keytables. + Usually the trailing .map, which is automatically added if + the file name doesn't contain dots. + Is the layout which specifies the translation by the + BIOS. If none is specified, us is assumed. + Is the actual layout of the keyboard. + +keytab-lilo.pl writes the resulting translation table as a binary string to +standard output. Such tables can be stored anywhere with any name, but the +suggested naming convention is /boot/.ktl ("Keyboard Table for Lilo"), +where is the name of the keyboard layout. + +Example: + +keytab-lilo.pl de >/boot/de.ktl diff --git a/config/release/3rdparty/syslinux/doc/mboot.txt b/config/release/3rdparty/syslinux/doc/mboot.txt new file mode 100644 index 0000000000..ef00ca5cc7 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/mboot.txt @@ -0,0 +1,26 @@ + +mboot.c32 +--------- + +mboot.c32 is a 32-bit comboot module that allows Syslinux and its +variants to load and boot kernels that use the Multiboot standard +(e.g. the Xen virtual machine monitor, and the Fiasco and GNU Mach +microkernels). + +To load a multiboot kernel and modules in Syslinux, put mboot.c32 (from +com32/modules) in the boot directory, and load it as the "kernel" in the +configuration file. The command-line to pass to mboot.c32 is the kernel +command-line, followed by all the module command lines, separated with +'---'. For example, to load a Xen VMM, xenlinux and an initrd: + +DEFAULT mboot.c32 xen.gz dom0_mem=15000 nosmp noacpi --- linux.gz console=tty0 root=/dev/hda1 --- initrd.img + +or, as a choice in a menu: + +LABEL Xen + KERNEL mboot.c32 + APPEND xen.gz dom0_mem=15000 nosmp noacpi --- linux.gz console=tty0 root=/dev/hda1 --- initrd.img + +mboot.c32 requires version 2.12 or later of Syslinux. + +Tim Deegan, May 2005 diff --git a/config/release/3rdparty/syslinux/doc/memdisk.txt b/config/release/3rdparty/syslinux/doc/memdisk.txt new file mode 100644 index 0000000000..fecf2dcbb0 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/memdisk.txt @@ -0,0 +1,292 @@ +[This documentation is rather crufty at the moment.] + +MEMDISK is meant to allow booting legacy operating systems via PXE, +and as a workaround for BIOSes where ISOLINUX image support doesn't +work. + +MEMDISK simulates a disk by claiming a chunk of high memory for the +disk and a (very small - 2K typical) chunk of low (DOS) memory for the +driver itself, then hooking the INT 13h (disk driver) and INT 15h +(memory query) BIOS interrupts. + +MEMDISK allows for an OS to detect the MEMDISK instance. (See the +"Additional technical information" section below.) + +To use it, type on the Syslinux command line: + +memdisk initrd=diskimg.img + +... where diskimg.img is the disk image you want to boot from. + +[Obviously, the memdisk binary as well as your disk image file need to +be present in the boot image directory.] + +... or add to your syslinux.cfg/pxelinux.cfg/isolinux.cfg something like: + +label dos + kernel memdisk + append initrd=dosboot.img + +Note the following: + +a) The disk image can be uncompressed or compressed with gzip or zip. + +b) If the disk image is less than 4,194,304 bytes (4096K, 4 MB) it is + assumed to be a floppy image and MEMDISK will try to guess its + geometry based on the size of the file. MEMDISK recognizes all the + standard floppy sizes as well as common extended formats: + + 163,840 bytes (160K) c=40 h=1 s=8 5.25" SSSD + 184,320 bytes (180K) c=40 h=1 s=9 5.25" SSSD + 327,680 bytes (320K) c=40 h=2 s=8 5.25" DSDD + 368,640 bytes (360K) c=40 h=2 s=9 5.25" DSDD + 655,360 bytes (640K) c=80 h=2 s=8 3.5" DSDD + 737,280 bytes (720K) c=80 h=2 s=9 3.5" DSDD + 1,222,800 bytes (1200K) c=80 h=2 s=15 5.25" DSHD + 1,474,560 bytes (1440K) c=80 h=2 s=18 3.5" DSHD + 1,638,400 bytes (1600K) c=80 h=2 s=20 3.5" DSHD (extended) + 1,720,320 bytes (1680K) c=80 h=2 s=21 3.5" DSHD (extended) + 1,763,328 bytes (1722K) c=82 h=2 s=21 3.5" DSHD (extended) + 1,784,832 bytes (1743K) c=83 h=2 s=21 3.5" DSHD (extended) + 1,802,240 bytes (1760K) c=80 h=2 s=22 3.5" DSHD (extended) + 1,884,160 bytes (1840K) c=80 h=2 s=23 3.5" DSHD (extended) + 1,966,080 bytes (1920K) c=80 h=2 s=24 3.5" DSHD (extended) + 2,949,120 bytes (2880K) c=80 h=2 s=36 3.5" DSED + 3,194,880 bytes (3120K) c=80 h=2 s=39 3.5" DSED (extended) + 3,276,800 bytes (3200K) c=80 h=2 s=40 3.5" DSED (extended) + 3,604,480 bytes (3520K) c=80 h=2 s=44 3.5" DSED (extended) + 3,932,160 bytes (3840K) c=80 h=2 s=48 3.5" DSED (extended) + + A small perl script is included in the MEMDISK directory which can + determine the geometry that MEMDISK would select for other sizes; + in general MEMDISK will correctly detect most physical extended + formats used, with 80 cylinders or slightly more. + + If the image is 4 MB or larger, it is assumed to be a hard disk + image, and should typically have an MBR and a partition table. It + may optionally have a DOSEMU geometry header; in which case the + header is used to determine the C/H/S geometry of the disk. + Otherwise, the geometry is determined by examining the partition + table, so the entire image should be partitioned for proper + operation (it may be divided between multiple partitions, however.) + + You can also specify the geometry manually with the following command + line options: + + c=# Specify number of cylinders (max 1024[*]) + h=# Specify number of heads (max 256[*]) + s=# Specify number of sectors (max 63) + floppy[=#] The image is a floppy image[**] + harddisk[=#] The image is a hard disk image[**] + iso The image is an El Torito ISO9660 image (drive 0xE0) + + # represents a decimal number. + + [*] MS-DOS only allows max 255 heads, and only allows 255 cylinders + on floppy disks. + + [**] Normally MEMDISK emulates the first floppy or hard disk. This + can be overridden by specifying an index, e.g. floppy=1 will + simulate fd1 (B:). This may not work on all operating systems + or BIOSes. + +c) The disk is normally writable (although, of course, there is + nothing backing it up, so it only lasts until reset.) If you want, + you can mimic a write-protected disk by specifying the command line + option: + + ro Disk is readonly + +d) MEMDISK normally uses the BIOS "INT 15h mover" API to access high + memory. This is well-behaved with extended memory managers which load + later. Unfortunately it appears that the "DOS boot disk" from + WinME/XP *deliberately* crash the system when this API is invoked. + The following command-line options tells MEMDISK to enter protected + mode directly, whenever possible: + + raw Use raw access to protected mode memory. + + bigraw Use raw access to protected mode memory, and leave the + CPU in "big real" mode afterwards. + + int Use plain INT 15h access to protected memory. This assumes + that anything which hooks INT 15h knows what it is doing. + + safeint Use INT 15h access to protected memory, but invoke + INT 15h the way it was *before* MEMDISK was loaded. + This is the default since version 3.73. + +e) MEMDISK by default supports EDD/EBIOS on hard disks, but not on + floppy disks. This can be controlled with the options: + + edd Enable EDD/EBIOS + noedd Disable EDD/EBIOS + +f) The following option can be used to pause to view the messages: + + pause Wait for a keypress right before booting + +g) The following option can be used to set the real-mode stack size. + The default is 512 bytes, but if there is a failure it might be + interesting to set it to something larger: + + stack=size Set the stack to "size" bytes + +h) Some systems without a floppy drive have been known to have + problems with floppy images. To avoid that those problems, first + of all make sure you don't have a floppy drive configured on the + BIOS screen. If there is no option to configure that, or that + doesn't work, you can use the option: + + nopass Hide all real drives of the same type (floppy or hard disk) + nopassany Hide all real drives (floppy and hard disk) + + +Some interesting things to note: + +If you're using MEMDISK to boot DOS from a CD-ROM (using ISOLINUX), +you might find the generic El Torito CD-ROM driver by Gary Tong and +Bart Lagerweij useful. It is now included with the Syslinux +distribution, in the dosutil directory. See the file +dosutil/eltorito.txt for more information. + +Similarly, if you're booting DOS over the network using PXELINUX, you +can use the "keeppxe" option and use the generic PXE (UNDI) NDIS +network driver, which is part of the PROBOOT.EXE distribution from +Intel: + + http://www.intel.com/support/network/adapter/1000/software.htm + + +Additional technical information: + +Starting with version 2.08, MEMDISK now supports an installation check +API. This works as follows: + + EAX = 454D08xxh ("ME") (08h = parameter query) + ECX = 444Dxxxxh ("MD") + EDX = 5349xxnnh ("IS") (nn = drive #) + EBX = 3F4Bxxxxh ("K?") + INT 13h + +If drive nn is a MEMDISK, the registers will contain: + + EAX = 4D21xxxxh ("!M") + ECX = 4D45xxxxh ("EM") + EDX = 4944xxxxh ("DI") + EBX = 4B53xxxxh ("SK") + + ES:DI -> MEMDISK info structures + +The low parts of EAX/ECX/EDX/EBX have the normal return values for INT +13h, AH=08h, i.e. information of the disk geometry etc. + +See Ralf Brown's interrupt list, +http://www.cs.cmu.edu/afs/cs.cmu.edu/user/ralf/pub/WWW/files.html or +http://www.ctyme.com/rbrown.htm, for a detailed description. + +The MEMDISK info structure currently contains: + + [ES:DI] word Total size of structure (currently 30 bytes) + [ES:DI+2] byte MEMDISK minor version + [ES:DI+3] byte MEMDISK major version + [ES:DI+4] dword Pointer to MEMDISK data in high memory + [ES:DI+8] dword Size of MEMDISK data in sectors + [ES:DI+12] 16:16 Far pointer to command line + [ES:DI+16] 16:16 Old INT 13h pointer + [ES:DI+20] 16:16 Old INT 15h pointer + [ES:DI+24] word Amount of DOS memory before MEMDISK loaded + [ES:DI+26] byte Boot loader ID + [ES:DI+27] byte Sector size as a power of 2 + (If zero, assume 512-byte sectors) + [ES:DI+28] word If nonzero, offset (vs ES) to installed DPT + This pointer+16 contains the original INT 1Eh + +Sizes of this structure: + +3.71+ 30 bytes Added DPT pointer +3.00-3.70 27 bytes Added boot loader ID +pre-3.00 26 bytes + +In addition, the following fields are available at [ES:0]: + + [ES:0] word Offset of INT 13h routine (segment == ES) + [ES:2] word Offset of INT 15h routine (segment == ES) + +The program mdiskchk.c in the sample directory is an example on how +this API can be used. + +The following code can be used to "disable" MEMDISK. Note that it +does not free the handler in DOS memory, and that running this from +DOS will probably crash your machine (DOS doesn't like drives suddenly +disappearing from underneath.) This is also not necessarily the best +method for this. + + mov eax, 454D0800h + mov ecx, 444D0000h + mov edx, 53490000h + mov dl,drive_number + mov ebx, 3F4B0000h + int 13h + + shr eax, 16 + cmp ax, 4D21h + jne not_memdisk + shr ecx, 16 + cmp cx, 4D45h + jne not_memdisk + shr edx, 16 + cmp dx, 4944h + jne not_memdisk + shr ebx, 16 + cmp bx, 4B53h + jne not_memdisk + + cli + mov bx,[es:0] ; INT 13h handler offset + mov eax,[es:di+16] ; Old INT 13h handler + mov byte [es:bx], 0EAh ; FAR JMP + mov [es:bx+1], eax + + mov bx,[es:2] ; INT 15h handler offset + mov eax,[es:di+20] ; Old INT 15h handler + mov byte [es:bx], 0EAh ; FAR JMP + mov [es:bx+1], eax + sti + +MEMDISK supports the Win9x "safe hook" structure for OS detection. +(See "Safe Master Boot Record INT 13h Hook Routines," available at +http://www.osronline.com/ddkx/w98ddk/storage_5l6g.htm as of +December 7th, 2009.) An OS driver can take a look at the INTerrupt table +and try to walk along the chain of those hooks that implement the "safe hook" +structure. For each hook discovered, a vendor can be identified and the OS +driver can take appropriate action. The OS driver can mark the "flags" field +of the "safe hook" to indicate that the driver has reviewed it already. This +prevents accidental re-detection, for example. + +MEMDISK adds one additional extension field to the "safe hook" structure, a +pointer to a special MEMDISK structure called the "mBFT." The mBFT is the +"MEMDISK Boot Firmware Table" (akin to the iSCSI iBFT and the AoE aBFT). An +OS driver looking at MEMDISK's "safe hook" should know that this field will +be present based on the fact that MEMDISK is the vendor identifier. + +The mBFT is little more than an ACPI table to prefix MEMDISK's traditional +MEMDISK info structure (the "MDI"). The ACPI table's details are: + + OEM ID. . . .: MEMDSK + OEM Table ID : Syslinux + +There is a 1-byte checksum field which covers the length of the mBFT all +the way through to the end of the MEMDISK info structure. + +There is also a physical pointer to the "safe hook" structure associated +with the MEMDISK instance. An OS driver might use the following logic: + + 1. Walk INT 13h "safe hook" chain as far as possible, marking hooks as + having been reviewed. For MEMDISK hooks, the driver then follows the + pointer to the mBFT and gathers the RAM disk details from the included + MDI. + 2. The OS driver scans low memory for valid mBFTs. MEMDISK instances that + have been "disconnected" from the INT 13h "safe hook" chain can be thus + discovered. Looking at their associated "safe hook" structure will + reveal if they were indeed reviewed by the previous stage. diff --git a/config/release/3rdparty/syslinux/doc/menu.txt b/config/release/3rdparty/syslinux/doc/menu.txt new file mode 100644 index 0000000000..e2dd1e1c11 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/menu.txt @@ -0,0 +1,566 @@ +There are two menu systems included with Syslinux, the advanced menu +system, and the simple menu system. + + ++++ THE ADVANCED MENU SYSTEM +++ + +The advanced menu system, written by Murali Krishnan Ganapathy, is +located in the menu/ subdirectly. It allows the user to create +hierarchial submenus, dynamic options, checkboxes, and just about +anything you want. It requires that the menu is compiled from a +simple C file, see menu/simple.c and menu/complex.c for examples. + +The advanced menu system doesn't support serial console at this time. + +See menu/README for more information. + + ++++ THE SIMPLE MENU SYSTEM +++ + +The simple menu system is a single module located at +com32/modules/vesamenu.c32 (graphical) or com32/modules/menu.c32 (text +mode only). It uses the same configuration file as the regular +Syslinux command line, and displays all the LABEL statements. + +To use the menu system, simply make sure [vesa]menu.c32 is in the +appropriate location for your boot medium (the same directory as the +configuration file for SYSLINUX, EXTLINUX and ISOLINUX, and the same +directory as pxelinux.0 for PXELINUX), and put the following options +in your configuration file: + +UI menu.c32 + + +There are a few menu additions to the configuration file, all starting +with the keywords MENU or TEXT; like the rest of the Syslinux config +file language, it is case insensitive: + + +MENU TITLE title + + Give the menu a title. The title is presented at the top of + the menu. + + +MENU HIDDEN + + Do not display the actual menu unless the user presses a key. + All that is displayed is a timeout message. + + +MENU CLEAR + + Clear the screen when exiting the menu, instead of leaving the + menu displayed. For vesamenu, this means the graphical + background is still displayed without the menu itself for as + long as the screen remains in graphics mode. + + +MENU SHIFTKEY + + Exit the menu system immediately unless either the Shift or Alt + key is pressed, or Caps Lock or Scroll Lock is set. + + +MENU SEPARATOR + + Insert an empty line in the menu. + + +MENU LABEL label + + (Only valid after a LABEL statement.) + Changes the label displayed for a specific entry. This allows + you to have a label that isn't suitable for the command line, + for example: + + # Soft Cap Linux + LABEL softcap + MENU LABEL Soft Cap ^Linux 9.6.36 + KERNEL softcap-9.6.36.bzi + APPEND whatever + + # A very dense operating system + LABEL brick + MENU LABEL ^Windows CE/ME/NT + KERNEL chain.c32 + APPEND hd0 2 + + The ^ symbol in a MENU LABEL statement defines a hotkey. + The hotkey will be highlighted in the menu and will move the + menu cursor immediately to that entry. + + Reusing hotkeys is disallowed, subsequent entries will not be + highlighted, and will not work. + + Keep in mind that the LABELs, not MENU LABELs, must be unique, + or odd things will happen to the command-line. + + +MENU INDENT count + + (Only valid after a LABEL statement.) + Will add "count" spaces in front of the displayed menu entry. + + +MENU DISABLE + + (Only valid after a LABEL statement.) + Makes the entry unselectable. This allows you to make a + section in your menu with different options below it. + for example: + + # Entries for network boots + LABEL - + MENU LABEL Network: + MENU DISABLE + + # Soft Cap Linux + LABEL softcap + MENU LABEL Soft Cap ^Linux 9.6.36 + MENU INDENT 1 + KERNEL softcap-9.6.36.bzi + APPEND whatever + + # Dos 6.22 + LABEL dos + MENU LABEL ^Dos 6.22 + MENU INDENT 1 + KERNEL memdisk + APPEND initrd=dos622.imz + + # Separator + MENU SEPARATOR + + # Entries for local boots + LABEL - + MENU LABEL Local: + MENU DISABLE + + # Windows 2000 + LABEL w2k + MENU LABEL ^Windows 2000 + MENU INDENT 1 + KERNEL chain.c32 + APPEND hd0 1 + + # Windows XP + LABEL xp + MENU LABEL Windows ^XP + MENU INDENT 1 + KERNEL chain.c32 + APPEND hd0 2 + +MENU HIDE + + (Only valid after a LABEL statement.) + Suppresses a particular LABEL entry from the menu. + + +MENU DEFAULT + + (Only valid after a LABEL statement.) + + Indicates that this entry should be the default for this + particular submenu. See also the DEFAULT directive below. + + +TEXT HELP +Help text ... +... which can span multiple lines +ENDTEXT + + (Only valid after a LABEL statement.) + + Specifies a help text that should be displayed when a particular + selection is highlighted. + + +MENU PASSWD passwd + + (Only valid after a LABEL statement.) + + Sets a password on this menu entry. "passwd" can be either a + cleartext password or a password encrypted with one of the + following algorithms: + + MD5 (Signature: $1$) + SHA-1 (Signature: $4$) + SHA-2-256 (Signature: $5$) + SHA-2-512 (Signature: $6$) + + Use the included Perl scripts "sha1pass" or "md5pass" to + encrypt passwords. MD5 passwords are compatible with most + Unix password file utilities; SHA-1 passwords are probably + unique to Syslinux; SHA-2 passwords are compatible with very + recent Linux distributions. Obviously, if you don't encrypt + your passwords they will not be very secure at all. + + If you are using passwords, you want to make sure you also use + the settings "NOESCAPE 1", "PROMPT 0", and either set + "ALLOWOPTIONS 0" or use a master password (see below.) + + If passwd is an empty string, this menu entry can only be + unlocked with the master password. + + +MENU MASTER PASSWD passwd + + Sets a master password. This password can be used to boot any + menu entry, and is required for the [Tab] and [Esc] keys to + work. + + +MENU RESOLUTION height width + + Requests a specific screen resolution when in graphics mode. + The default is "640 480" corresponding to a resolution of + 640x480 pixels, which all VGA-compatible monitors should be + able to display. + + If the selected resolution is unavailable, the text mode menu + is displayed instead. + + +MENU BACKGROUND background + + For vesamenu.c32, sets the background image. The background + can either be a color (see MENU COLOR) or the name of an image + file, which should be the size of the screen (normally 640x480 + pixels, but see MENU RESOLUTION) and either in PNG, JPEG or + LSS16 format. + + +MENU BEGIN [tagname] +MENU END + + Begin/end a submenu. The entries between MENU BEGIN and MENU + END form a submenu, which is marked with a > mark on the right + hand of the screen. Submenus inherit the properties of their + parent menus, but can override them, and can thus have their + own backgrounds, master passwords, titles, timeouts, messages + and so forth. + + +MENU GOTO tagname + + (Only valid after a LABEL statement.) + + This label will transfer to the named submenu instead of + booting anything. To transfer to the top-level menu, specify + "menu goto .top". + + +MENU EXIT [tagname] + + (Only valid after a label statement inside MENU BEGIN ... + MENU END) + + Exit to the next higher menu, or, if tagname is specified, to + the named menu. + + +MENU QUIT + + (Only valid after a LABEL statement.) + + This label quits the menu system. + + WARNING: if MENU MASTER PASSWD or ALLOWOPTIONS 0 is set, this + will still allow exiting to the CLI; however, a separate MENU + PASSWD can of course be set for this label. + + +MENU START + + (Only valid inside MENU BEGIN ... MENU END) + + Indicates that the menu system should start at the menu being + defined instead of at the top-level menu. See also the + DEFAULT directive below. + + +DEFAULT label + + Set the global default. If "label" points into a submenu, + that menu becomes the start menu; in other words, this + directive has the same effect as both MENU DEFAULT and MENU + START. + + For backwards compatibility with earlier versions of Syslinux, + this directive is ignored unless the configuration file also + contains a UI directive. + + Note: the CLI accepts options after the label, or even a + non-label. The menu system does not support that. + + +MENU SAVE +MENU NOSAVE + + Remember the last entry selected and make that the default for + the next boot. A password-protected menu entry is *not* + saved. This requires the ADV data storage mechanism, which is + currently only implemented for EXTLINUX, although the other + Syslinux derivatives will accept the command (and ignore it.) + + NOTE: MENU SAVE stores the LABEL tag of the selected entry; + this mechanism therefore relies on LABEL tags being unique. + On the other hand, it handles changes in the configuration + file gracefully. + + NOTE: In software RAID-1 setups MENU SAVE only stores the + default label on the actual boot disk. This may lead to + inconsistent reads from the array, or unexpectedly change the + default label after array resynchronization or disk failure. + + The MENU SAVE information can be fully cleared with + "extlinux --reset-adv ". + + A MENU SAVE or MENU NOSAVE at the top of a (sub)menu affects + all entries underneath that (sub)menu except those that in + turn have MENU SAVE or MENU NOSAVE declared. This can be used + to only save certain entires when selected. + + +INCLUDE filename [tagname] +MENU INCLUDE filename [tagname] + + Include the contents of the configuration file filename at + this point. + + In the case of MENU INCLUDE, the included data is only seen by + the menu system; the core syslinux code does not parse this + command, so any labels defined in it are unavailable. + + If a tagname is included, the whole file is considered to have + been bracketed with a MENU BEGIN tagname ... MENU END pair, + and will therefore show up as a submenu. + + +MENU AUTOBOOT message + + Replaces the message "Automatic boot in # second{,s}...". The + symbol # is replaced with the number of seconds remaining. + The syntax "{singular,[dual,]plural}" can be used to conjugate + appropriately. + + +MENU TABMSG message + + Replaces the message "Press [Tab] to edit options". + + +MENU NOTABMSG message + + Takes the place of the TABMSG message if option editing is + disabled. Defaults to blank. + + +MENU PASSPROMPT message + + Replaces the message "Password required". + + +MENU COLOR element ansi foreground background shadow + + Sets the color of element "element" to the specified color + sequence: + + screen Rest of the screen + border Border area + title Title bar + unsel Unselected menu item + hotkey Unselected hotkey + sel Selection bar + hotsel Selected hotkey + disabled Disabled menu item + scrollbar Scroll bar + tabmsg Press [Tab] message + cmdmark Command line marker + cmdline Command line + pwdborder Password box border + pwdheader Password box header + pwdentry Password box contents + timeout_msg Timeout message + timeout Timeout counter + help Help text + msgXX Message (F-key) file attribute XX + + ... where XX is two hexadecimal digits (the "plain text" is 07). + + "ansi" is a sequence of semicolon-separated ECMA-48 Set + Graphics Rendition ([m) sequences: + + 0 reset all attributes to their defaults + 1 set bold + 4 set underscore (simulated with color on a color display) + 5 set blink + 7 set reverse video + 22 set normal intensity + 24 underline off + 25 blink off + 27 reverse video off + 30 set black foreground + 31 set red foreground + 32 set green foreground + 33 set brown foreground + 34 set blue foreground + 35 set magenta foreground + 36 set cyan foreground + 37 set white foreground + 38 set underscore on, set default foreground color + 39 set underscore off, set default foreground color + 40 set black background + 41 set red background + 42 set green background + 43 set brown background + 44 set blue background + 45 set magenta background + 46 set cyan background + 47 set white background + 49 set default background color + + These are used (a) in text mode, and (b) on the serial + console. + + "foreground" and "background" are color codes in #AARRGGBB + notation, where AA RR GG BB are hexadecimal digits for alpha + (opacity), red, green and blue, respectively. #00000000 + represents fully transparent, and #ffffffff represents opaque + white. + + "shadow" controls the handling of the graphical console text + shadow. Permitted values are "none" (no shadowing), "std" or + "standard" (standard shadowing - foreground pixels are + raised), "all" (both background and foreground raised), and + "rev" or "reverse" (background pixels are raised.) + + If any field is set to "*" or omitted (at the end of the line) + then that field is left unchanged. + + + The current defaults are: + + menu color screen 37;40 #80ffffff #00000000 std + menu color border 30;44 #40000000 #00000000 std + menu color title 1;36;44 #c00090f0 #00000000 std + menu color unsel 37;44 #90ffffff #00000000 std + menu color hotkey 1;37;44 #ffffffff #00000000 std + menu color sel 7;37;40 #e0000000 #20ff8000 all + menu color hotsel 1;7;37;40 #e0400000 #20ff8000 all + menu color disabled 1;30;44 #60cccccc #00000000 std + menu color scrollbar 30;44 #40000000 #00000000 std + menu color tabmsg 31;40 #90ffff00 #00000000 std + menu color cmdmark 1;36;40 #c000ffff #00000000 std + menu color cmdline 37;40 #c0ffffff #00000000 std + menu color pwdborder 30;47 #80ffffff #20ffffff std + menu color pwdheader 31;47 #80ff8080 #20ffffff std + menu color pwdentry 30;47 #80ffffff #20ffffff std + menu color timeout_msg 37;40 #80ffffff #00000000 std + menu color timeout 1;37;40 #c0ffffff #00000000 std + menu color help 37;40 #c0ffffff #00000000 std + menu color msg07 37;40 #90ffffff #00000000 std + + +MENU MSGCOLOR fg_filter bg_filter shadow + + Sets *all* the msgXX colors to a color scheme derived from the + fg_filter and bg_filter values. Background color zero is + always treated as transparent. The default corresponds to: + + menu msgcolor #90ffffff #80ffffff std + + This directive should come before any directive that + customizes individual msgXX colors. + + +MENU WIDTH 80 +MENU MARGIN 10 +MENU PASSWORDMARGIN 3 +MENU ROWS 12 +MENU TABMSGROW 18 +MENU CMDLINEROW 18 +MENU ENDROW -1 +MENU PASSWORDROW 11 +MENU TIMEOUTROW 20 +MENU HELPMSGROW 22 +MENU HELPMSGENDROW -1 +MENU HIDDENROW -2 +MENU HSHIFT 0 +MENU VSHIFT 0 + + These options control the layout of the menu on the screen. + The values above are the defaults. + + A negative value is relative to the calculated length of the + screen (25 for text mode, 28 for VESA graphics mode.) + + +F1 textfile [background] +... +F12 textfile [background] + + Displays full-screen help (also available at the command line.) + The same control code sequences as in the command line + interface are supported, although some are ignored. + + Additionally, a optional second argument allows a different + background image (see MENU BACKGROUND for supported formats) + to be displayed. + + +MENU HELP textfile [background] + + Creates a menu entry which, when selected, displays + full-screen help in the same way as the F-key help. + + +The menu system honours the TIMEOUT command; if TIMEOUT is specified +it will execute the ONTIMEOUT command if one exists, otherwise it will +pick the default menu option. WARNING: the timeout action will bypass +password protection even if one is set for the specified or default +entry! + +Normally, the user can press [Tab] to edit the menu entry, and [Esc] +to return to the Syslinux command line. However, if the configuration +file specifies ALLOWOPTIONS 0, these keys will be disabled, and if +MENU MASTER PASSWD is set, they require the master password. + +The simple menu system supports serial console, using the normal +SERIAL directive. However, it can be quite slow over a slow serial +link; you probably want to set your baudrate to 38400 or higher if +possible. It requires a Linux/VT220/ANSI-compatible terminal on the +other end. + + + +++ USING AN ALTERNATE CONFIGURATION FILE +++ + + +It is also possible to load a secondary configuration file, to get to +another menu. To do that, invoke menu.c32 with the name of the +secondary configuration file. + +LABEL othermenu + MENU LABEL Another Menu + KERNEL menu.c32 + APPEND othermenu.conf + +If you specify more than one file, they will all be read, in the order +specified. The dummy filename ~ (tilde) is replaced with the filename +of the main configuration file. + +# The file graphics.conf contains common color and layout commands for +# all menus. +LABEL othermenu + MENU LABEL Another Menu + KERNEL vesamenu.c32 + APPEND graphics.conf othermenu.conf + +# Return to the main menu +LABEL mainmenu + MENU LABEL Return to Main Menu + KERNEL vesamenu.c32 + APPEND graphics.conf ~ + +See also the MENU INCLUDE directive above. diff --git a/config/release/3rdparty/syslinux/doc/pxelinux.txt b/config/release/3rdparty/syslinux/doc/pxelinux.txt new file mode 100644 index 0000000000..47aea9038c --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/pxelinux.txt @@ -0,0 +1,418 @@ + PXELINUX + + A bootloader for Linux using the PXE network booting protocol + + Copyright 1994-2008 H. Peter Anvin - All Rights Reserved + +This program is provided under the terms of the GNU General Public +License, version 2 or, at your option, any later version. There is no +warranty, neither expressed nor implied, to the function of this +program. Please see the included file COPYING for details. + +---------------------------------------------------------------------- + +PXELINUX is a Syslinux derivative, for booting Linux off a network +server, using a network ROM conforming to the Intel PXE (Pre-Execution +Environment) specification. PXELINUX is *not* a program that is +intended to be flashed or burned into a PROM on the network card; if +you want that, check out Etherboot (http://www.etherboot.org/). +Etherboot 5.4 or later can also be used to create a PXE-compliant boot +PROM for many network cards. + + + ++++ HOW TO CONFIGURE PXELINUX ++++ + +PXELINUX operates in many ways like SYSLINUX. If you are not familiar +with SYSLINUX, read syslinux.txt first, since this documentation only +explains the differences. + +On the TFTP server, create the directory "/tftpboot", and copy the +following files to it: + + pxelinux.0 - from the Syslinux distribution + + any kernel or initrd images you want to boot + +Finally, create the directory "/tftpboot/pxelinux.cfg". The +configuration file (equivalent of syslinux.cfg -- see syslinux.txt for +the options here) will live in this directory. Because more than one +system may be booted from the same server, the configuration file name +depends on the IP address of the booting machine. PXELINUX will +search for its config file on the boot server in the following way: + + First, it will search for the config file using the client UUID, if + one is provided by the PXE stack (note, some BIOSes don't have a + valid UUID, and you might end up with something like all 1's.) This is + in the standard UUID format using lower case hexadecimal digits, e.g. + b8945908-d6a6-41a9-611d-74a6ab80b83d. + + Next, it will search for the config file using the hardware type + (using its ARP type code) and address, all in lower case hexadecimal + with dash separators; for example, for an Ethernet (ARP type 1) + with address 88:99:AA:BB:CC:DD it would search for the filename + 01-88-99-aa-bb-cc-dd. + + Next, it will search for the config file using its own IP address + in upper case hexadecimal, e.g. 192.0.2.91 -> C000025B + (you can use the included progam "gethostip" to compute the + hexadecimal IP address for any host.) + + If that file is not found, it will remove one hex digit and try + again. Ultimately, it will try looking for a file named "default" + (in lower case). + + As an example, if the boot file name is /mybootdir/pxelinux.0, the + UUID is b8945908-d6a6-41a9-611d-74a6ab80b83d, the Ethernet MAC + address is 88:99:AA:BB:CC:DD and the IP address 192.0.2.91, it will + try: + + /mybootdir/pxelinux.cfg/b8945908-d6a6-41a9-611d-74a6ab80b83d + /mybootdir/pxelinux.cfg/01-88-99-aa-bb-cc-dd + /mybootdir/pxelinux.cfg/C000025B + /mybootdir/pxelinux.cfg/C000025 + /mybootdir/pxelinux.cfg/C00002 + /mybootdir/pxelinux.cfg/C0000 + /mybootdir/pxelinux.cfg/C000 + /mybootdir/pxelinux.cfg/C00 + /mybootdir/pxelinux.cfg/C0 + /mybootdir/pxelinux.cfg/C + /mybootdir/pxelinux.cfg/default + + ... in that order. + +Note that all filename references are relative to the directory +pxelinux.0 lives in. PXELINUX generally requires that filenames +(including any relative path) are 127 characters or shorter in length. + +Starting in release 3.20, PXELINUX will no longer apply a built-in +default if it cannot find any configuration file at all; instead it +will reboot after the timeout interval has expired. This keeps a +machine from getting stuck indefinitely due to a boot server failure. + +Starting in release 3.50, PXELINUX displays network information at +the boot prompt pressing . + +PXELINUX does not support MTFTP, and I have no plans of doing so, as +MTFTP is inherently broken for files more than 65535 packets (about +92 MB) in size. It is of course possible to use MTFTP for the initial +boot, if you have such a setup. MTFTP server setup is beyond the +scope of this document. + + + ++++ SETTING UP THE TFTP SERVER ++++ + +PXELINUX currently requires that the boot server has a TFTP server +which supports the "tsize" TFTP option (RFC 1784/RFC 2349). The +"tftp-hpa" TFTP server, which support options, is available at: + + http://www.kernel.org/pub/software/network/tftp/ + ftp://www.kernel.org/pub/software/network/tftp/ + +... and on any kernel.org mirror (see http://www.kernel.org/mirrors/). + +Another TFTP server which supports this is atftp by Jean-Pierre +Lefebvre: + + ftp://ftp.mamalinux.com/pub/atftp/ + +If your boot server is running Windows (and you can't fix that), try +tftpd32 by Philippe Jounin (you need version 2.11 or later; previous +versions had a bug which made it incompatible with PXELINUX): + + http://tftpd32.jounin.net/ + + + ++++ SETTING UP THE DHCP SERVER ++++ + +The PXE protocol uses a very complex set of extensions to DHCP or +BOOTP. However, most PXE implementations -- this includes all Intel +ones version 0.99n and later -- seem to be able to boot in a +"conventional" DHCP/TFTP configuration. Assuming you don't have to +support any very old or otherwise severely broken clients, this is +probably the best configuration unless you already have a PXE boot +server on your network. + +A sample DHCP setup, using the "conventional TFTP" configuration, +would look something like the following, using ISC dhcp 2.0 dhcpd.conf +syntax: + + allow booting; + allow bootp; + + # Standard configuration directives... + + option domain-name ""; + option subnet-mask ; + option broadcast-address ; + option domain-name-servers ; + option routers ; + + # Group the PXE bootable hosts together + group { + # PXE-specific configuration directives... + next-server ; + filename "/tftpboot/pxelinux.0"; + + # You need an entry like this for every host + # unless you're using dynamic addresses + host { + hardware ethernet ; + fixed-address ; + } + } + +Note that if your particular TFTP daemon runs under chroot (tftp-hpa +will do this if you specify the -s (secure) option; this is highly +recommended), you almost certainly should not include the /tftpboot +prefix in the filename statement. + +If this does not work for your configuration, you probably should set +up a "PXE boot server" on port 4011 of your TFTP server; a free PXE +boot server is available at: + + http://www.kano.org.uk/projects/pxe/ + +With such a boot server defined, your DHCP configuration should look +the same except for an "option dhcp-class-identifier" ("option +vendor-class-identifier" if you are using DHCP 3.0): + + allow booting; + allow bootp; + + # Standard configuration directives... + + option domain-name ""; + option subnet-mask ; + option broadcast-address ; + option domain-name-servers ; + option routers ; + + # Group the PXE bootable hosts together + group { + # PXE-specific configuration directives... + option dhcp-class-identifier "PXEClient"; + next-server ; + + # You need an entry like this for every host + # unless you're using dynamic addresses + host { + hardware ethernet ; + fixed-address ; + } + } + +Here, the boot file name is obtained from the PXE server. + +If the "conventional TFTP" configuration doesn't work on your clients, +and setting up a PXE boot server is not an option, you can attempt the +following configuration. It has been known to boot some +configurations correctly; however, there are no guarantees: + + allow booting; + allow bootp; + + # Standard configuration directives... + + option domain-name ""; + option subnet-mask ; + option broadcast-address ; + option domain-name-servers ; + option routers ; + + # Group the PXE bootable hosts together + group { + # PXE-specific configuration directives... + option dhcp-class-identifier "PXEClient"; + option vendor-encapsulated-options 09:0f:80:00:0c:4e:65:74:77:6f:72:6b:20:62:6f:6f:74:0a:07:00:50:72:6f:6d:70:74:06:01:02:08:03:80:00:00:47:04:80:00:00:00:ff; + next-server ; + filename "/tftpboot/pxelinux.0"; + + # You need an entry like this for every host + # unless you're using dynamic addresses + host { + hardware ethernet ; + fixed-address ; + } + } + +Note that this *will not* boot some clients that *will* boot with the +"conventional TFTP" configuration; Intel Boot Client 3.0 and later are +known to fall into this category. + + + ++++ SPECIAL DHCP OPTIONS ++++ + +PXELINUX (starting with version 1.62) supports the following +nonstandard DHCP options, which depending on your DHCP server you may +be able to use to customize the specific behaviour of PXELINUX. See +RFC 5071 for some additional information about these options. + +Option 208 pxelinux.magic + - Earlier versions of PXELINUX required this to be set to + F1:00:74:7E (241.0.116.126) for PXELINUX to + recognize any special DHCP options whatsoever. As of + PXELINUX 3.55, this option is deprecated and is no longer + required. + +Option 209 pxelinux.configfile + - Specifies the PXELINUX configuration file name. + +Option 210 pxelinux.pathprefix + - Specifies the PXELINUX common path prefix, instead of + deriving it from the boot file name. This almost certainly + needs to end in whatever character the TFTP server OS uses + as a pathname separator, e.g. slash (/) for Unix. + +Option 211 pxelinux.reboottime + - Specifies, in seconds, the time to wait before reboot in the + event of TFTP failure. 0 means wait "forever" (in reality, + it waits approximately 136 years.) + +ISC dhcp 3.0 supports a rather nice syntax for specifying custom +options; you can use the following syntax in dhcpd.conf if you are +running this version of dhcpd: + + option space pxelinux; + option pxelinux.magic code 208 = string; + option pxelinux.configfile code 209 = text; + option pxelinux.pathprefix code 210 = text; + option pxelinux.reboottime code 211 = unsigned integer 32; + + NOTE: In earlier versions of PXELINUX, this would only work as a + "site-option-space". Since PXELINUX 2.07, this will work both as a + "site-option-space" (unencapsulated) and as a "vendor-option-space" + (type 43 encapsulated.) This may avoid messing with the + dhcp-parameter-request-list, as detailed below. + +Then, inside your PXELINUX-booting group or class (whereever you have +the PXELINUX-related options, such as the filename option), you can +add, for example: + + # Always include the following lines for all PXELINUX clients + site-option-space "pxelinux"; + option pxelinux.magic f1:00:74:7e; + if exists dhcp-parameter-request-list { + # Always send the PXELINUX options (specified in hexadecimal) + option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3); + } + # These lines should be customized to your setup + option pxelinux.configfile "configs/common"; + option pxelinux.pathprefix "/tftpboot/pxelinux/files/"; + option pxelinux.reboottime 30; + filename "/tftpboot/pxelinux/pxelinux.bin"; + +Note that the configfile is relative to the pathprefix: this will look +for a config file called /tftpboot/pxelinux/files/configs/common on +the TFTP server. + +The "option dhcp-parameter-request-list" statement forces the DHCP +server to send the PXELINUX-specific options, even though they are not +explicitly requested. Since the DHCP request is done before PXELINUX +is loaded, the PXE client won't know to request them. + +Using ISC dhcp 3.0 you can create a lot of these strings on the fly. +For example, to use the hexadecimal form of the hardware address as +the configuration file name, you could do something like: + + site-option-space "pxelinux"; + option pxelinux.magic f1:00:74:7e; + if exists dhcp-parameter-request-list { + # Always send the PXELINUX options (specified in hexadecimal) + option dhcp-parameter-request-list = concat(option dhcp-parameter-request-list,d0,d1,d2,d3); + } + option pxelinux.configfile = + concat("pxelinux.cfg/", binary-to-ascii(16, 8, ":", hardware)); + filename "/tftpboot/pxelinux.bin"; + +If you used this from a client whose Ethernet address was +58:FA:84:CF:55:0E, this would look for a configuration file named +"/tftpboot/pxelinux.cfg/1:58:fa:84:cf:55:e". + + + ++++ ALTERNATE TFTP SERVERS ++++ + +PXELINUX supports the following special pathname conventions: + +::filename + + Suppresses the common filename prefix, i.e. passes the string + "filename" unmodified to the server. + +IP address::filename (e.g. 192.0.2.1::filename) + + Suppresses the common filename prefix, *and* sends a request + to an alternate TFTP server. Instead of an IP address, a + DNS name can be used. It will be assumed to be fully + qualified if it contains dots; otherwise the local domain as + reported by the DHCP server (option 15) will be added. + +:: was chosen because it is unlikely to conflict with operating system +usage. However, if you happen to have an environment for which the +special treatment of :: is a problem, please contact the Syslinux +mailing list. + + + ++++ SOME NOTES ++++ + +If the boot fails, PXELINUX (unlike SYSLINUX) will not wait forever; +rather, if it has not received any input for approximately five +minutes after displaying an error message, it will reset the machine. +This allows an unattended machine to recover in case it had bad enough +luck of trying to boot at the same time the TFTP server goes down. + +Lots of PXE stacks, especially old ones, have various problems of +varying degrees of severity. Please see: + + http://syslinux.zytor.com/hardware.php + +... for a list of currently known hardware problems, with workarounds +if known. + + + ++++ KEEPING THE PXE STACK AROUND ++++ + +Normally, PXELINUX will unload the PXE and UNDI stacks before invoking +the kernel. In special circumstances (for example, when using MEMDISK +to boot an operating system with an UNDI network driver) it might be +desirable to keep the PXE stack in memory. If the option "keeppxe" +is given on the kernel command line, PXELINUX will keep the PXE and +UNDI stacks in memory. (If you don't know what this means, you +probably don't need it.) + + + ++++ PROBLEMS WITH YOUR PXE STACK ++++ + +There are a number of extremely broken PXE stacks in the field. The +gPXE project (formerly known as Etherboot) provides an open-source PXE +stack that works with a number of cards, and which can be loaded from +a CD-ROM, USB key, or floppy if desired. + +Information on gPXE is available from: + + http://www.etherboot.org/ + +... and ready-to-use ROM or disk images from: + + http://www.rom-o-matic.net/ + +Some cards, like may systems with the SiS 900, has a PXE stack which +works just barely well enough to load a single file, but doesn't +handle the more advanced items required by PXELINUX. If so, it is +possible to use the built-in PXE stack to load gPXE, which can then +load PXELINUX. See: + + http://www.etherboot.org/wiki/pxechaining + + + ++++ CURRENTLY KNOWN PROBLEMS ++++ + +The following problems are known with PXELINUX, so far: + ++ The error recovery routine doesn't work quite right. For right now, + it just does a hard reset - seems good enough. ++ We should probably call the UDP receive function in the keyboard + entry loop, so that we answer ARP requests. ++ Boot sectors/disk images are not supported yet. + +If you have additional problems, please contact the Syslinux mailing +list (see syslinux.txt for the address.) diff --git a/config/release/3rdparty/syslinux/doc/rfc5071.txt b/config/release/3rdparty/syslinux/doc/rfc5071.txt new file mode 100644 index 0000000000..68f6f5a84e --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/rfc5071.txt @@ -0,0 +1,787 @@ + + + + + + +Network Working Group D. Hankins +Request for Comments: 5071 ISC +Category: Informational December 2007 + + + Dynamic Host Configuration Protocol Options Used by PXELINUX + +Status of This Memo + + This memo provides information for the Internet community. It does + not specify an Internet standard of any kind. Distribution of this + memo is unlimited. + +Abstract + + This document describes the use by PXELINUX of some DHCP Option Codes + numbering from 208-211. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hankins Informational [Page 1] + +RFC 5071 PXELINUX Options December 2007 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 3. MAGIC Option . . . . . . . . . . . . . . . . . . . . . . . . . 4 + 3.1. Description . . . . . . . . . . . . . . . . . . . . . . . 4 + 3.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 5 + 3.3. Applicability . . . . . . . . . . . . . . . . . . . . . . 5 + 3.4. Response to RFC 3942 . . . . . . . . . . . . . . . . . . . 5 + 4. Configuration File Option . . . . . . . . . . . . . . . . . . 5 + 4.1. Description . . . . . . . . . . . . . . . . . . . . . . . 5 + 4.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 6 + 4.3. Applicability . . . . . . . . . . . . . . . . . . . . . . 6 + 4.4. Response to RFC 3942 . . . . . . . . . . . . . . . . . . . 6 + 4.5. Client and Server Behaviour . . . . . . . . . . . . . . . 6 + 5. Path Prefix Option . . . . . . . . . . . . . . . . . . . . . . 7 + 5.1. Description . . . . . . . . . . . . . . . . . . . . . . . 7 + 5.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 7 + 5.3. Applicability . . . . . . . . . . . . . . . . . . . . . . 7 + 5.4. Response to RFC 3942 . . . . . . . . . . . . . . . . . . . 8 + 5.5. Client and Server Behaviour . . . . . . . . . . . . . . . 8 + 6. Reboot Time Option . . . . . . . . . . . . . . . . . . . . . . 9 + 6.1. Description . . . . . . . . . . . . . . . . . . . . . . . 9 + 6.2. Packet Format . . . . . . . . . . . . . . . . . . . . . . 9 + 6.3. Applicability . . . . . . . . . . . . . . . . . . . . . . 10 + 6.4. Response to RFC 3942 . . . . . . . . . . . . . . . . . . . 10 + 6.5. Client and Server Behaviour . . . . . . . . . . . . . . . 10 + 7. Specification Conformance . . . . . . . . . . . . . . . . . . 11 + 8. Security Considerations . . . . . . . . . . . . . . . . . . . 11 + 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 + 10. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . 12 + 11. References . . . . . . . . . . . . . . . . . . . . . . . . . . 12 + 11.1. Normative References . . . . . . . . . . . . . . . . . . . 12 + 11.2. Informative References . . . . . . . . . . . . . . . . . . 12 + + + + + + + + + + + + + + + + + +Hankins Informational [Page 2] + +RFC 5071 PXELINUX Options December 2007 + + +1. Introduction + + PXE, the Preboot eXecution Environment, is a first-stage network + bootstrap agent. PXE is loaded out of firmware on the client host, + and performs DHCP [3] queries to obtain an IP address. + + Once on the network, it loads a second-stage bootstrap agent as + configured by DHCP header and option contents. + + PXELINUX is one such second-stage bootstrap agent. Once PXE has + passed execution to it, PXELINUX seeks its configuration from a cache + of DHCP options supplied to the PXE first-stage agent, and then takes + action based upon those options. + + Most frequently, this implies loading via Trivial File Transfer + Protocol (TFTP) [6] one or more images that are decompressed into + memory, then executed to pass execution to the final Host Operating + System. + + PXELINUX uses DHCP options 208-211 to govern parts of this bootstrap + process, but these options are not requested by the PXE DHCP client + at the time it acquires its lease. At that time, the PXE bootloader + has no knowledge that PXELINUX is going to be in use, and even so, + would have no way to know what option(s) PXELINUX might digest. + Local installations that serve this PXELINUX image to its clients + must also configure their DHCP servers to provide these options even + though they are not on the DHCP Parameter Request List [4]. + + These options are: + + o "MAGIC" - 208 - An option whose presence and content verifies to + the PXELINUX bootloader that the options numbered 209-211 are for + the purpose as described herein. + + o "ConfigFile" - 209 - Configures the path/filename component of the + configuration file's location, which this bootloader should use to + configure itself. + + o "PathPrefix" - 210 - Configures a value to be prepended to the + ConfigFile to discern the directory location of the file. + + o "RebootTime" - 211 - Configures a timeout after which the + bootstrap program will reboot the system (most likely returning it + to PXE). + + Historically, these option codes numbering from 208-211 were + designated 'Site Local', but after publication of RFC3942 [8], they + were made available for allocation as new standard DHCP options. + + + +Hankins Informational [Page 3] + +RFC 5071 PXELINUX Options December 2007 + + + This document marks these codes as assigned. + + This direct assignment of option code values in the option + definitions below is unusual as it is not mentioned in DHCP Option + Code assignment guidelines [5]. This document's Option Code + assignments are done within RFC 3942's provisions for documenting + prior use of option codes within the new range (128-223 inclusive). + +2. Terminology + + o "first-stage bootloader" - Although a given bootloading order may + have many stages, such as where a BIOS boots a DOS Boot Disk, + which then loads a PXE executable, it is, in this example, only + the PXE executable that this document describes as the "first- + stage bootloader" -- in essence, this is the first stage of + booting at which DHCP is involved. + + o "second-stage bootloader" - This describes a program loaded by the + first-stage bootloader at the behest of the DHCP server. + + o "bootloader" and "network bootstrap agent" - These are synonyms, + excepting that "bootloader" is intentionally vague in that its + next form of bootstrapping may not in fact involve network + resources. + + The key words "MAY", "MUST", "MUST NOT", "SHOULD", and "SHOULD NOT" + in this document are to be interpreted as described in RFC 2119 [2]. + +3. MAGIC Option + +3.1. Description + + If this option is provided to the PXE bootloader, then the value is + checked by PXELINUX to match the octet string f1:00:74:7e. If this + matches, then PXELINUX bootloaders will also consume options 209-211, + as described below. Otherwise, they are ignored. + + This measure was intended to ensure that, as the 'Site Local' option + space is not allocated from a central authority, no conflict would + result in a PXELINUX bootloader improperly digesting options intended + for another purpose. + + + + + + + + + + +Hankins Informational [Page 4] + +RFC 5071 PXELINUX Options December 2007 + + +3.2. Packet Format + + The MAGIC Option format is as follows: + + Code Length m1 m2 m3 m4 + +--------+--------+--------+--------+--------+--------+ + | 208 | 4 | 0xF1 | 0x00 | 0x74 | 0x7E | + +--------+--------+--------+--------+--------+--------+ + + The code for this option is 208. The length is always four. + +3.3. Applicability + + This option is absolutely inapplicable to any other purpose. + +3.4. Response to RFC 3942 + + The option code 208 will be adopted for this purpose and immediately + deprecated. Future standards action may return this option to an + available status should it be necessary. + + A collision of the use of this option is harmless (at least from + PXELINUX' point of view) by design: if it does not match the + aforementioned magic value, the PXELINUX bootloader will take no + special action. + + The PXELINUX project will deprecate the use of this option; future + versions of the software will not evaluate its contents. + + It is reasonable to utilize this option code for another purpose, but + it is recommended to do this at a later time, given the desire to + avoid potential collisions in legacy user bases. + +4. Configuration File Option + +4.1. Description + + Once the PXELINUX executable has been entered from the PXE + bootloader, it evaluates this option and loads a file of that name + via TFTP. The contents of this file serve to configure PXELINUX in + its next stage of bootloading (specifying boot image names, + locations, boot-time flags, text to present the user in menu + selections, etc). + + In the absence of this option, the PXELINUX agent will search the + TFTP server (as determined by PXE prior to this stage) for a config + file of several default names. + + + + +Hankins Informational [Page 5] + +RFC 5071 PXELINUX Options December 2007 + + +4.2. Packet Format + + The Configuration File Option format is as follows: + + Code Length Config-file... + +--------+--------+--------+--------+--------+--------+ + | 209 | n | c1 | c2 | ... | c(n) | + +--------+--------+--------+--------+--------+--------+ + + The code for this option is 209. The Config-file (c1..c(n)) is an + NVT-ASCII [1] printable string; it is not terminated by a zero or any + other value. + +4.3. Applicability + + Any bootloader, PXE or otherwise, that makes use of a separate + configuration file rather than containing all configurations within + DHCP options (which may be impossible due to the limited space + available for DHCP options) may conceivably make use of this option. + +4.4. Response to RFC 3942 + + The code 209 will be adopted for this purpose. + +4.5. Client and Server Behaviour + + The Config File Option MUST be supplied by the DHCP server if it + appears on the Parameter Request List, but MUST also be supplied if + the server administrator believed it would later be useful to the + client (such as because the server is configured to offer a second- + stage boot image, which they know will make use of it). The option + MUST NOT be supplied if no value has been configured for it, or if a + value of zero length has been configured. + + The DHCP client MUST only cache this option in a location the second- + stage bootloader may access. + + The second-stage bootloader MUST, in concert with other DHCP options + and fields, use this option's value as a filename to be loaded via + TFTP and read for further second-stage-loader-specific configuration + parameters. The format and content of such a file is specific to the + second-stage bootloader, and as such, is out of scope of this + document. + + + + + + + + +Hankins Informational [Page 6] + +RFC 5071 PXELINUX Options December 2007 + + +5. Path Prefix Option + +5.1. Description + + In PXELINUX' case, it is often the case that several different + environments would have the same TFTP path prefix, but would have + different filenames (for example: hosts' bootloader images and config + files may be kept in a directory structure derived from their Media + Access Control (MAC) address). Consequently, it was deemed + worthwhile to deliver a TFTP path prefix configuration option, so + that these two things could be configured separately in a DHCP Server + configuration: the prefix and the possibly host-specific file + location. + + The actual filename that PXELINUX requests from its TFTP server is + derived by prepending this value to the Config File Option above. + Once this config file is loaded and during processing, any TFTP file + paths specified within it are similarly processed -- prepending the + contents of this option. + +5.2. Packet Format + + The Path Prefix Option format is as follows: + + Code Length Path-Prefix... + +--------+--------+--------+--------+--------+--------+ + | 210 | n | p1 | p2 | ... | p(n) | + +--------+--------+--------+--------+--------+--------+ + + The code for this option is 210. The Path Prefix is an NVT-ASCII + printable string; it is not terminated by zero or any other value. + +5.3. Applicability + + This option came into existence because server administrators found + it useful to configure the prefix and suffix of the config file path + separately. A group of different PXE booting clients may use the + same path prefix, but different filenames, or vice versa. + + The 'shortcut' this represents is worthwhile, but it is questionable + whether that needs to manifest itself on the protocol wire. + + + + + + + + + + +Hankins Informational [Page 7] + +RFC 5071 PXELINUX Options December 2007 + + + It only becomes interesting from a protocol standpoint if other + options are adopted that prefix this value as well -- performing a + kind of string compression is highly beneficial to the limited + available DHCP option space. + + But it's clearly inapplicable to any current use of, e.g., the + FILENAME header contents or the DHCP Boot File Name option (#67). + Use of these fields is encoded on firmware of thousands of devices + that can't or are not likely to be upgraded. Altering any behaviour + here is likely to cause severe compatibility problems. + + Although compression of the TFTP-loaded configuration file contents + is not a compelling factor, contrived configurations using these + values may also exist: where each of a large variety of different + clients load the same configuration file, with the same contents, but + due to a differently configured path prefix actually load different + images. Whether this sort of use is truly needed remains unproven. + +5.4. Response to RFC 3942 + + The code 210 will be adopted for this purpose. + +5.5. Client and Server Behaviour + + The Path Prefix option MUST be supplied by the DHCP server if it + appears on the Parameter Request List, but MUST also be supplied if + the server administrator believed it would later be useful to the + client (such as because the server is configured to offer a second- + stage boot image that they know will make use of it). The option + MUST NOT be supplied if no value has been configured for it, or if a + value of zero length has been configured. + + The DHCP client MUST only cache this option in a location where the + second-stage bootloader may access it. + + The second-stage bootloader MUST prepend this option's value, if any, + to the contents of the ConfigFile option prior to obtaining the + resulting value via TFTP, or the default 'Config File Search Path', + which the second-stage bootloader iterates in the absence of a Config + File Option. The client MAY prepend the value to other configuration + directives within that file once it has been loaded. The client MUST + NOT prepend this option's value to any other DHCP option contents or + field, unless explicitly stated in a document describing that option + or field. + + + + + + + +Hankins Informational [Page 8] + +RFC 5071 PXELINUX Options December 2007 + + +6. Reboot Time Option + +6.1. Description + + Should PXELINUX be executed, and then for some reason, be unable to + reach its TFTP server to continue bootstrapping, the client will, by + default, reboot itself after 300 seconds have passed. This may be + too long, too short, or inappropriate behaviour entirely, depending + on the environment. + + By configuring a non-zero value in this option, admins can inform + PXELINUX of which specific timeout is desired. The client will + reboot itself if it fails to achieve its configured network resources + within the specified number of seconds. + + This reboot will run through the system's normal boot-time execution + path, most likely leading it back to PXE and therefore PXELINUX. So, + in the general case, this is akin to returning the client to the DHCP + INIT state. + + By configuring zero, the feature is disabled, and instead the client + chooses to remove itself from the network and wait indefinitely for + operator intervention. + + It should be stressed that this is in no way related to configuring a + lease time. The perceived transition to INIT state is due to client + running state -- reinitializing itself -- not due to lease timer + activity. That is, it is not safe to assume that a PXELINUX client + will abandon its lease when this timer expires. + +6.2. Packet Format + + The Reboot Time Option format is as follows: + + Code Length + +--------+--------+--------+--------+--------+--------+ + | 211 | 4 | Reboot Time | + +--------+--------+--------+--------+--------+--------+ + + The code for this option is 211. The length is always four. The + Reboot Time is a 32-bit (4 byte) integer in network byte order. + + + + + + + + + + +Hankins Informational [Page 9] + +RFC 5071 PXELINUX Options December 2007 + + +6.3. Applicability + + Any network bootstrap program in any sufficiently complex networking + environment could conceivably enter into such a similar condition, + either due to having its IP address stolen out from under it by a + rogue client on the network, by being moved between networks where + its PXE-derived DHCP lease is no longer valid, or any similar means. + + It seems desirable for any network bootstrap agent to implement an + ultimate timeout for it to start over. + + The client may, for example, get different working configuration + parameters from a different DHCP server upon restarting. + +6.4. Response to RFC 3942 + + The code 211 will be adopted for this purpose. + +6.5. Client and Server Behaviour + + The Reboot Time Option MUST be supplied by the DHCP server if it + appears on the Parameter Request List, but MUST also be supplied if + the server administrator believed it would later be useful to the + client (such as because the server is configured to offer a second- + stage boot image that they know will make use of it). The option + MUST NOT be supplied if no value has been configured for it, or if it + contains a value of zero length. + + The DHCP client MUST only cache this option in a location the second- + stage bootloader may access. + + If the value of this option is nonzero, the second-stage bootloader + MUST schedule a timeout: after a number of seconds equal to this + option's value have passed, the second-stage bootloader MUST reboot + the system, ultimately returning the path of execution back to the + first-stage bootloader. It MUST NOT reboot the system once the + thread of execution has been passed to the host operating system (at + which point, this timeout is effectively obviated). + + If the value of this option is zero, the second-stage bootloader MUST + NOT schedule such a timeout at all. Any second-stage bootloader that + finds it has encountered excessive timeouts attempting to obtain its + host operating system SHOULD disconnect itself from the network to + wait for operator intervention, but MAY continue to attempt to + acquire the host operating system indefinitely. + + + + + + +Hankins Informational [Page 10] + +RFC 5071 PXELINUX Options December 2007 + + +7. Specification Conformance + + To conform to this specification, clients and servers MUST implement + the Configuration File, Path Prefix, and Reboot Time options as + directed. + + The MAGIC option MAY NOT be implemented, as it has been deprecated. + +8. Security Considerations + + PXE and PXELINUX allow any entity acting as a DHCP server to execute + arbitrary code upon a system. At present, no PXE implementation is + known to implement authentication mechanisms [7] so that PXE clients + can be sure they are receiving configuration information from the + correct, authoritative DHCP server. + + The use of TFTP by PXE and PXELINUX also lacks any form of + cryptographic signature -- so a 'Man in the Middle' attack may lead + to an attacker's code being executed on the client system. Since + this is not an encrypted channel, any of the TFTP loaded data may + also be exposed (such as in loading a "RAMDISK" image, which contains + /etc/passwd or similar information). + + The use of the Ethernet MAC Address as the client's unique identity + may allow an attacker who takes on that identity to gain + inappropriate access to a client system's network resources by being + given by the DHCP server whatever 'keys' are required, in fact, to be + the target system (to boot up as though it were the target). + + Great care should be taken to secure PXE and PXELINUX installations, + such as by using IP firewalls, to reduce or eliminate these concerns. + + A nearby attacker might feed a "Reboot Time" option value of 1 second + to a mass of unsuspecting clients, to effect a Denial Of Service + (DoS) upon the DHCP server, but then again it may just as easily + supply these clients with rogue second-stage bootloaders that simply + transmit a flood of packets. + + This document in and by itself provides no security, nor does it + impact existing DCHP security as described in RFC 2131 [3]. + +9. IANA Considerations + + IANA has done the following: + + 1. Moved DHCPv4 Option code 208 from 'Tentatively Assigned' to + 'Assigned', referencing this document. IANA has marked this same + option code, 208, as Deprecated. + + + +Hankins Informational [Page 11] + +RFC 5071 PXELINUX Options December 2007 + + + 2. Moved DHCPv4 Option code 209 from 'Tentatively Assigned' to + 'Assigned', referencing this document. + + 3. Moved DHCPv4 Option code 210 from 'Tentatively Assigned' to + 'Assigned', referencing this document. + + 4. Moved DHCPv4 Option code 211 from 'Tentatively Assigned' to + 'Assigned', referencing this document. + +10. Acknowledgements + + These options were designed and implemented for the PXELINUX project + by H. Peter Anvin, and he was instrumental in producing this + document. Shane Kerr has also provided feedback that has improved + this document. + +11. References + +11.1. Normative References + + [1] Postel, J. and J. Reynolds, "Telnet Protocol Specification", + STD 8, RFC 854, May 1983. + + [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + [3] Droms, R., "Dynamic Host Configuration Protocol", RFC 2131, + March 1997. + + [4] Alexander, S. and R. Droms, "DHCP Options and BOOTP Vendor + Extensions", RFC 2132, March 1997. + + [5] Droms, R., "Procedures and IANA Guidelines for Definition of New + DHCP Options and Message Types", BCP 43, RFC 2939, + September 2000. + +11.2. Informative References + + [6] Sollins, K., "The TFTP Protocol (Revision 2)", STD 33, RFC 1350, + July 1992. + + [7] Droms, R. and W. Arbaugh, "Authentication for DHCP Messages", + RFC 3118, June 2001. + + [8] Volz, B., "Reclassifying Dynamic Host Configuration Protocol + version 4 (DHCPv4) Options", RFC 3942, November 2004. + + + + + +Hankins Informational [Page 12] + +RFC 5071 PXELINUX Options December 2007 + + +Author's Address + + David W. Hankins + Internet Systems Consortium, Inc. + 950 Charter Street + Redwood City, CA 94063 + US + + Phone: +1 650 423 1307 + EMail: David_Hankins@isc.org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Hankins Informational [Page 13] + +RFC 5071 PXELINUX Options December 2007 + + +Full Copyright Statement + + Copyright (C) The IETF Trust (2007). + + This document is subject to the rights, licenses and restrictions + contained in BCP 78, and except as set forth therein, the authors + retain all their rights. + + This document and the information contained herein are provided on an + "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS + OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND + THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS + OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF + THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED + WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Intellectual Property + + The IETF takes no position regarding the validity or scope of any + Intellectual Property Rights or other rights that might be claimed to + pertain to the implementation or use of the technology described in + this document or the extent to which any license under such rights + might or might not be available; nor does it represent that it has + made any independent effort to identify any such rights. Information + on the procedures with respect to rights in RFC documents can be + found in BCP 78 and BCP 79. + + Copies of IPR disclosures made to the IETF Secretariat and any + assurances of licenses to be made available, or the result of an + attempt made to obtain a general license or permission for the use of + such proprietary rights by implementers or users of this + specification can be obtained from the IETF on-line IPR repository at + http://www.ietf.org/ipr. + + The IETF invites any interested party to bring to its attention any + copyrights, patents or patent applications, or other proprietary + rights that may cover technology that may be required to implement + this standard. Please address the information to the IETF at + ietf-ipr@ietf.org. + + + + + + + + + + + + +Hankins Informational [Page 14] + diff --git a/config/release/3rdparty/syslinux/doc/sdi.txt b/config/release/3rdparty/syslinux/doc/sdi.txt new file mode 100644 index 0000000000..cf9b73f4c2 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/sdi.txt @@ -0,0 +1,149 @@ + SDI files + + +Syslinux supports SDI files ( *.sdi ). + +Features: + * Support for gzipped SDI images + * When used with gpxelinux.0, images can be downloaded by HTTP or FTP, + leading to fastest boot times. + +"System Deployment Image" is a file format created by Microsoft and mostly used +in its products to provide in a single file a boot loader, an OS loader +(like NTLDR) and a disk or partition image to boot from it without any +other installed program. This is typically used in a PXE environment to boot +embedded Windows versions without boot disk support. + +The support of SDI images in Syslinux is based on a white +paper from Saad Syed. You can find the paper here: + +http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxpesp1/html/ram_sdi.asp + +SDI support has been only been tested with SDI v1.0 with Windows XP Embedded +images and may not work with later versions or alternative uses. + + + ++++ Supported SDI images ++++ + +To make a SDI image supported by pxelinux/isolinux/syslinux, you need to +follow the steps below (detailed instructions are in the white paper +cited above): + +You need to install "Windows Embedded Studio" and to run the +"Remote Boot Service Setup". + +1) Create a new SDI file (eg: sdimgr /new xpe.sdi). + +2) Before importing your target partition, add the following files +in the root folder: + * ntdetect.com + * boot.ini + Its content should be: + [boot loader] + default=ramdisk(0)\WINDOWS + [operating systems] + ramdisk(0)\WINDOWS="Windows XPE From RAM" /fastdetect +(you can customize the name and add options like /debug) + +Note: Your partition may be compressed (using compressed NTFS), but these two +files need to be uncompressed. + +3) Import the partition in the SDI file (eg: sdimgr xpe.sdi /readpart:D:). +The size of the partition must be less than 500 MB. + +4) Import the boot program STARTROM.COM +(eg: sdimgr xpe.sdi /import:BOOT,0,C:\Program Files\Windows Embedded\Remote Boot Service\Downloads\startrom.com) + +5) Import the nt loader NTLDR in the SDI file +(eg: sdimgr xpe.sdi /import:LOAD,0,C:\Program Files\Windows Embedded\Remote Boot Service\Downloads\ntldr) + +Note: only the version of NTLDR provided by Remote Boot Service Setup +and located in this directory has been tested. According to +"http://skolk.livejournal.com/667.html", "osloader.exe" from retail XP +can also be used to replace this NTLDR version. + +6) Pack the SDI file (eg: sdimgr xpe.sdi /pack) + +7) Gzip your image +If you want to speed the download time, you can gzip the image as it will +be uncompressed by syslinux during the loading. You can use some programs +like ntfsclone ("http://www.linux-ntfs.org/doku.php?id=ntfsclone") to +remove unused blocks from the NTFS filesystem before deploying your image. + +8) You are now ready to boot your image. +Unlike the traditional way of using SDI images (startrom.n12), you don't need +other files than your SDI image in the tftpboot (for pxelinux), the CD +(for isolinux), or the hard disk for syslinux. + +* You can use the usual options of pxelinux/isolinux/syslinux (config file, +config path, reboot time...) + +For example, a simple configuration with pxelinux: +/tftpboot/xpe.sdi +/tftpboot/pxelinux.0 +/tftpboot/pxelinux.cfg/default with the following content: + + DEFAULT 0 + label 0 [WinXpe] + KERNEL sdi.c32 + APPEND xpe.sdi + + + ++++ Error messages ++++ + +* No $SDI signature in file + A SDI image should begin by a signature "$SDI", the signature has not +been found in your file. Perhaps your file is corrupted or has not been created +correctly. Run sdimgr on it to see if everything is correct. + +* No BOOT BLOB in image + You have to import a boot program (eg: startrom.com) when you make +your SDI image (see above). The offset of this program in the SDI file +is in the SDI header (begining of the file). However, the offset +found in your SDI file is null. +You probably forgot to include the boot program. Run the sdimgr program +and look if you see a line like: +BOOT 0x00000000.00001000 0x00000000.00005EC2... + -------- + This is the + offset and + should not + be null + +* BOOT BLOB is empty + See above. The size of your boot program included in the SDI +is null. You probably imported a corrupted version of startrom.com. +Run sdimgr and check the size in the following line: +BOOT 0x00000000.00001000 0x00000000.00005EC2... + -------- + this is the + size and + should not + be null + +* BOOT BLOB extends beyond file + You have a BOOT BLOB in your SDI file, but its size is invalid +because its goes beyond the total image size. Check the tools you used +to build the image file. + +* BOOT BLOB too large for memory + Your BOOT BLOB seems correct, however there is not enough memory +to load it. Increase your RAM or reduce the SDI size. This is a very +abnormal situation as the BOOT BLOB is usually very small. Your SDI +file might be corrupted. + +* Image too large for memory + Your SDI file seems correct, however there is not enough memory +to load it. Increase your RAM or reduce the SDI size. + +* SDI header is corrupted + Your SDI file seems correct, but its header contains a checksum +that is invalid. You most likely have a corrupted SDI file. + + + ++++ Warning messages ++++ + +* Warning: unknown SDI version +You are using a newer version of SDI than the one with which this program +has been tested. It may not work. Please give feedback and provide your +SDI version. diff --git a/config/release/3rdparty/syslinux/doc/syslinux.txt b/config/release/3rdparty/syslinux/doc/syslinux.txt new file mode 100644 index 0000000000..51d1332cd8 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/syslinux.txt @@ -0,0 +1,788 @@ + The Syslinux Project + + A suite of bootloaders for Linux + + Copyright 1994-2010 H. Peter Anvin and contributors + +This program is provided under the terms of the GNU General Public +License, version 2 or, at your option, any later version. There is no +warranty, neither expressed nor implied, to the function of this +program. Please see the included file COPYING for details. + +---------------------------------------------------------------------- + + Syslinux now has a home page at http://syslinux.zytor.com/ + +---------------------------------------------------------------------- + +The Syslinux suite contains the following boot loaders +("derivatives"), for their respective boot media: + + SYSLINUX - MS-DOS/Windows FAT filesystem + PXELINUX - PXE network booting + ISOLINUX - ISO9660 CD-ROM + EXTLINUX - Linux ext2/ext3 filesystem + +For historical reasons, some of the sections in this document applies +to the FAT loader (SYSLINUX) only; see pxelinux.txt, isolinux.txt and +extlinux.txt for what differs in these versions. The all-caps term +"SYSLINUX" generally refers to the FAT loader, whereas "Syslinux" +refers to the project as a whole. + +Help with cleaning up the docs would be greatly appreciated. + + + ++++ Options ++++ + +These are the options common to all versions of Syslinux: + + -s Safe, slow, stupid; uses simpler code that boots better + -f Force installing + -r Raid mode. If boot fails, tell the BIOS to boot the next + device in the boot sequence (usually the next hard disk) + instead of stopping with an error message. + This is useful for RAID-1 booting. + +These are only in the Windows version: + + -m Mbr; install a bootable MBR sector to the beginning of the + drive. + -a Active; marks the partition used active (=bootable) + + + ++++ CREATING A BOOTABLE LINUX FLOPPY +++ + +In order to create a bootable Linux floppy using SYSLINUX, prepare a +normal MS-DOS formatted floppy. Copy one or more Linux kernel files to +it, then execute the DOS command: + + syslinux [-sfrma][-d directory] a: [bootsecfile] + +(or whichever drive letter is appropriate; the [] meaning optional.) + +Use "syslinux.com" (in the dos subdirectory of the distribution) for +plain DOS (MS-DOS, DR-DOS, PC-DOS, FreeDOS...) or Win9x/ME. + +Use "syslinux.exe" (in the win32 subdirectory of the distribution) for +WinNT/2000/XP. + +Under Linux, execute the command: + + syslinux [-sfr][-d directory][-o offset] /dev/fd0 + +(or, again, whichever device is the correct one.) + +This will alter the boot sector on the disk and copy a file named +LDLINUX.SYS into its root directory (or a subdirectory, if the -d +option is specified.) + +The -s option, if given, will install a "safe, slow and stupid" +version of SYSLINUX. This version may work on some very buggy BIOSes +on which SYSLINUX would otherwise fail. If you find a machine on +which the -s option is required to make it boot reliably, please send +as much info about your machine as you can, and include the failure +mode. + +The -o option is used with a disk image file and specifies the byte +offset of the filesystem image in the file. + +For the DOS and Windows installers, the -m and -a options can be used +on hard drives to write a Master Boot Record (MBR), and to mark the +specific partition active. + +If the Shift or Alt keys are held down during boot, or the Caps or Scroll +locks are set, Syslinux will display a LILO-style "boot:" prompt. The +user can then type a kernel file name followed by any kernel parameters. +The Syslinux loader does not need to know about the kernel file in +advance; all that is required is that it is a file located in the root +directory on the disk. + +There are two versions of the Linux installer; one in the "mtools" +directory which requires no special privilege (other than write +permission to the device where you are installing) but requires the +mtools program suite to be available, and one in the "unix" directory +which requires root privilege. + + + ++++ CONFIGURATION FILE ++++ + +All the configurable defaults in SYSLINUX can be changed by putting a +file called "syslinux.cfg" in the root directory of the boot disk. + +This is a text file in either UNIX or DOS format, containing one or +more of the following items (case is insensitive for keywords; upper +case is used here to indicate that a word should be typed verbatim): + +Starting with version 3.35, the configuration file can also be in +either the /boot/syslinux or /syslinux directories (searched in that +order.) If that is the case, then all filenames are assumed to be +relative to that same directory, unless preceded with a slash or +backslash. + +All options here applies to PXELINUX, ISOLINUX and EXTLINUX as well as +SYSLINUX unless otherwise noted. See the respective .txt files. + +# comment + A comment line. The whitespace after the hash mark is mandatory. + +INCLUDE filename + Inserts the contents of another file at this point in the + configuration file. Files can currently be nested up to 16 + levels deep, but it is not guaranteed that more than 8 levels + will be supported in the future. + +DEFAULT kernel options... + Sets the default command line. If Syslinux boots automatically, + it will act just as if the entries after DEFAULT had been typed + in at the "boot:" prompt. + + If no configuration file is present, or no DEFAULT entry is + present in the config file, an error message is displayed and + the boot: prompt is shown. + +UI module options... + Selects a specific user interface module (typically menu.c32 + or vesamenu.c32). The command-line interface treats this as a + directive that overrides the DEFAULT and PROMPT directives. + +APPEND options... + Add one or more options to the kernel command line. These are + added both for automatic and manual boots. The options are + added at the very beginning of the kernel command line, + usually permitting explicitly entered kernel options to override + them. This is the equivalent of the LILO "append" option. + +IPAPPEND flag_val [PXELINUX only] + The IPAPPEND option is available only on PXELINUX. The + flag_val is an OR of the following options: + + 1: indicates that an option of the following format + should be generated and added to the kernel command line: + + ip=::: + + ... based on the input from the DHCP/BOOTP or PXE boot server. + + NOTE: The use of this option is no substitute for running a + DHCP client in the booted system. Without regular renewals, + the lease acquired by the PXE BIOS will expire, making the + IP address available for reuse by the DHCP server. + + 2: indicates that an option of the following format + should be generated and added to the kernel command line: + + BOOTIF= + + ... in dash-separated hexadecimal with leading hardware type + (same as for the configuration file; see pxelinux.txt.) + + This allows an initrd program to determine from which + interface the system booted. + + 4: indicates that an option of the following format + should be generated and added to the kernel command line: + + SYSUUID= + + ... in lower case hexadecimal in the format normally used for + UUIDs (same as for the configuration file; see pxelinux.txt.) + +LABEL label + KERNEL image + APPEND options... + IPAPPEND flag_val [PXELINUX only] + Indicates that if "label" is entered as the kernel to boot, + Syslinux should instead boot "image", and the specified APPEND + and IPAPPEND options should be used instead of the ones + specified in the global section of the file (before the first + LABEL command.) The default for "image" is the same as + "label", and if no APPEND is given the default is to use the + global entry (if any). + + Starting with version 3.62, the number of LABEL statements is + virtually unlimited. + + Note that LILO uses the syntax: + image = mykernel + label = mylabel + append = "myoptions" + + ... whereas Syslinux uses the syntax: + label mylabel + kernel mykernel + append myoptions + + Note: The "kernel" doesn't have to be a Linux kernel; it can + be a boot sector or a COMBOOT file (see below.) + + Since version 3.32 label names are no longer mangled into DOS + format (for SYSLINUX.) + + The following commands are available after a LABEL statement: + + LINUX image - Linux kernel image (default) + BOOT image - Bootstrap program (.bs, .bin) + BSS image - BSS image (.bss) + PXE image - PXE Network Bootstrap Program (.0) + FDIMAGE image - Floppy disk image (.img) + COMBOOT image - COMBOOT program (.com, .cbt) + COM32 image - COM32 program (.c32) + CONFIG image - New configuration file + Using one of these keywords instead of KERNEL forces the + filetype, regardless of the filename. + + CONFIG means restart the boot loader using a different + configuration file. + + APPEND - + Append nothing. APPEND with a single hyphen as argument in a + LABEL section can be used to override a global APPEND. + + LOCALBOOT type [ISOLINUX, PXELINUX] + On PXELINUX, specifying "LOCALBOOT 0" instead of a "KERNEL" + option means invoking this particular label will cause a local + disk boot instead of booting a kernel. + + The argument 0 means perform a normal boot. The argument 4 + will perform a local boot with the Universal Network Driver + Interface (UNDI) driver still resident in memory. Finally, + the argument 5 will perform a local boot with the entire PXE + stack, including the UNDI driver, still resident in memory. + All other values are undefined. If you don't know what the + UNDI or PXE stacks are, don't worry -- you don't want them, + just specify 0. + + On ISOLINUX, the "type" specifies the local drive number to + boot from; 0x00 is the primary floppy drive and 0x80 is the + primary hard drive. The special value -1 causes ISOLINUX to + report failure to the BIOS, which, on recent BIOSes, should + mean that the next boot device in the boot sequence should be + activated. + + INITRD initrd_file + Starting with version 3.71, an initrd can be specified in a + separate statement (INITRD) instead of as part of the APPEND + statement; this functionally appends "initrd=initrd_file" to + the kernel command line. + + It supports multiple filenames separated by commas. + This is mostly useful for initramfs, which can be composed of + multiple separate cpio or cpio.gz archives. + Note: all files except the last one are zero-padded to a + 4K page boundary. This should not affect initramfs. + +IMPLICIT flag_val + If flag_val is 0, do not load a kernel image unless it has been + explicitly named in a LABEL statement. The default is 1. + +ALLOWOPTIONS flag_val + If flag_val is 0, the user is not allowed to specify any + arguments on the kernel command line. The only options + recognized are those specified in an APPEND statement. The + default is 1. + +TIMEOUT timeout + Indicates how long to wait at the boot: prompt until booting + automatically, in units of 1/10 s. The timeout is cancelled as + soon as the user types anything on the keyboard, the assumption + being that the user will complete the command line already + begun. A timeout of zero will disable the timeout completely, + this is also the default. + +TOTALTIMEOUT timeout + Indicates how long to wait until booting automatically, in + units of 1/10 s. This timeout is *not* cancelled by user + input, and can thus be used to deal with serial port glitches + or "the user walked away" type situations. A timeout of zero + will disable the timeout completely, this is also the default. + + Both TIMEOUT and TOTALTIMEOUT can be used together, for + example: + + # Wait 5 seconds unless the user types something, but + # always boot after 15 minutes. + TIMEOUT 50 + TOTALTIMEOUT 9000 + +ONTIMEOUT kernel options... + Sets the command line invoked on a timeout. Normally this is + the same thing as invoked by "DEFAULT". If this is specified, + then "DEFAULT" is used only if the user presses to + boot. + +ONERROR kernel options... + If a kernel image is not found (either due to it not existing, + or because IMPLICIT is set), run the specified command. The + faulty command line is appended to the specified options, so + if the ONERROR directive reads as: + + ONERROR xyzzy plugh + + ... and the command line as entered by the user is: + + foo bar baz + + ... Syslinux will execute the following as if entered by the + user: + + xyzzy plugh foo bar baz + +SERIAL port [[baudrate] flowcontrol] + Enables a serial port to act as the console. "port" is a + number (0 = /dev/ttyS0 = COM1, etc.) or an I/O port address + (e.g. 0x3F8); if "baudrate" is omitted, the baud rate defaults + to 9600 bps. The serial parameters are hardcoded to be 8 + bits, no parity, 1 stop bit. + + "flowcontrol" is a combination of the following bits: + 0x001 - Assert DTR + 0x002 - Assert RTS + 0x008 - Enable interrupts + 0x010 - Wait for CTS assertion + 0x020 - Wait for DSR assertion + 0x040 - Wait for RI assertion + 0x080 - Wait for DCD assertion + 0x100 - Ignore input unless CTS asserted + 0x200 - Ignore input unless DSR asserted + 0x400 - Ignore input unless RI asserted + 0x800 - Ignore input unless DCD asserted + + All other bits are reserved. + + Typical values are: + + 0 - No flow control (default) + 0x303 - Null modem cable detect + 0x013 - RTS/CTS flow control + 0x813 - RTS/CTS flow control, modem input + 0x023 - DTR/DSR flow control + 0x083 - DTR/DCD flow control + + For the SERIAL directive to be guaranteed to work properly, it + should be the first directive in the configuration file. + + NOTE: "port" values from 0 to 3 means the first four serial + ports detected by the BIOS. They may or may not correspond to + the legacy port values 0x3F8, 0x2F8, 0x3E8, 0x2E8. + + Enabling interrupts (setting the 0x008 bit) may give better + responsiveness without setting the NOHALT option, but could + potentially cause problems with buggy BIOSes. + +NOHALT flag_val + If flag_val is 1, don't halt the processor while idle. + Halting the processor while idle significantly reduces the + power consumption, but can cause poor responsiveness to the + serial console, especially when using scripts to drive the + serial console, as opposed to human interaction. + +CONSOLE flag_val + If flag_val is 0, disable output to the normal video console. + If flag_val is 1, enable output to the video console (this is + the default.) + + Some BIOSes try to forward this to the serial console and + sometimes make a total mess thereof, so this option lets you + disable the video console on these systems. + +FONT filename + Load a font in .psf format before displaying any output + (except the copyright line, which is output as ldlinux.sys + itself is loaded.) Syslinux only loads the font onto the + video card; if the .psf file contains a Unicode table it is + ignored. This only works on EGA and VGA cards; hopefully it + should do nothing on others. + +KBDMAP keymap + Install a simple keyboard map. The keyboard remapper used is + *very* simplistic (it simply remaps the keycodes received from + the BIOS, which means that only the key combinations relevant + in the default layout -- usually U.S. English -- can be + mapped) but should at least help people with AZERTY keyboard + layout and the locations of = and , (two special characters + used heavily on the Linux kernel command line.) + + The included program keytab-lilo.pl from the LILO distribution + can be used to create such keymaps. The file keytab-lilo.txt + contains the documentation for this program. + +DISPLAY filename + Displays the indicated file on the screen at boot time (before + the boot: prompt, if displayed). Please see the section below + on DISPLAY files. + + NOTE: If the file is missing, this option is simply ignored. + +SAY message + Prints the message on the screen. + +PROMPT flag_val + If flag_val is 0, display the boot: prompt only if the Shift or Alt + key is pressed, or Caps Lock or Scroll lock is set (this is the + default). If flag_val is 1, always display the boot: prompt. + +NOESCAPE flag_val + If flag_val is set to 1, ignore the Shift/Alt/Caps Lock/Scroll + Lock escapes. Use this (together with PROMPT 0) to force the + default boot alternative. + +NOCOMPLETE flag_val + If flag_val is set to 1, the Tab key does not display labels + at the boot: prompt. + +F1 filename +F2 filename + ...etc... +F9 filename +F10 filename +F11 filename +F12 filename + Displays the indicated file on the screen when a function key is + pressed at the boot: prompt. This can be used to implement + pre-boot online help (presumably for the kernel command line + options.) Please see the section below on DISPLAY files. + + When using the serial console, press to get to + the help screens, e.g. <2> to get to the F2 screen. + For F10-F12, hit , B, C. For + compatibility with earlier versions, F10 can also be entered as + 0. + +Blank lines are ignored. + +Note that the configuration file is not completely decoded. Syntax +different from the one described above may still work correctly in this +version of Syslinux, but may break in a future one. + + + ++++ DISPLAY FILE FORMAT ++++ + +DISPLAY and function-key help files are text files in either DOS or UNIX +format (with or without ). In addition, the following special codes +are interpreted: + + = = ASCII 12 + Clear the screen, home the cursor. Note that the screen is + filled with the current display color. + + = = ASCII 15 + Set the display colors to the specified background and + foreground colors, where and are hex digits, + corresponding to the standard PC display attributes: + + 0 = black 8 = dark grey + 1 = dark blue 9 = bright blue + 2 = dark green a = bright green + 3 = dark cyan b = bright cyan + 4 = dark red c = bright red + 5 = dark purple d = bright purple + 6 = brown e = yellow + 7 = light grey f = white + + Picking a bright color (8-f) for the background results in the + corresponding dark color (0-7), with the foreground flashing. + + Colors are not visible over the serial console. + +filename = = ASCII 24 + If a VGA display is present, enter graphics mode and display + the graphic included in the specified file. The file format + is an ad hoc format called LSS16; the included Perl program + "ppmtolss16" can be used to produce these images. This Perl + program also includes the file format specification. + + The image is displayed in 640x480 16-color mode. Once in + graphics mode, the display attributes (set by code + sequences) work slightly differently: the background color is + ignored, and the foreground colors are the 16 colors specified + in the image file. For that reason, ppmtolss16 allows you to + specify that certain colors should be assigned to specific + color indicies. + + Color indicies 0 and 7, in particular, should be chosen with + care: 0 is the background color, and 7 is the color used for + the text printed by Syslinux itself. + + = = ASCII 25 + If we are currently in graphics mode, return to text mode. + +.. .. = ASCII 16-23 + These codes can be used to select which modes to print a + certain part of the message file in. Each of these control + characters select a specific set of modes (text screen, + graphics screen, serial port) for which the output is actually + displayed: + + Character Text Graph Serial + ------------------------------------------------------ + = = ASCII 16 No No No + = = ASCII 17 Yes No No + = = ASCII 18 No Yes No + = = ASCII 19 Yes Yes No + = = ASCII 20 No No Yes + = = ASCII 21 Yes No Yes + = = ASCII 22 No Yes Yes + = = ASCII 23 Yes Yes Yes + + For example: + + Text modeGraphics modeSerial port + + ... will actually print out which mode the console is in! + + = = ASCII 26 + End of file (DOS convention). + + = = ASCII 7 + Beep the speaker. + + + ++++ COMMAND LINE KEYSTROKES ++++ + +The command line prompt supports the following keystrokes: + + boot specified command line + erase one character + erase the whole line + display the current Syslinux version + erase one word + force text mode + list matching labels +.. help screens (if configured) + equivalent to F1..F10 + interrupt boot in progress + interrupt boot in progress + display network information (PXELINUX only) + + + ++++ COMBOOT IMAGES AND OTHER OPERATING SYSTEMS ++++ + +This version of Syslinux supports chain loading of other operating +systems (such as MS-DOS and its derivatives, including Windows 95/98), +as well as COMBOOT-style standalone executables (a subset of DOS .COM +files; see separate section below.) + +Chain loading requires the boot sector of the foreign operating system +to be stored in a file in the root directory of the filesystem. +Because neither Linux kernels, boot sector images, nor COMBOOT files +have reliable magic numbers, Syslinux will look at the file extension. +The following extensions are recognized (case insensitive): + + none or other Linux kernel image + .0 PXE bootstrap program (NBP) [PXELINUX only] + .bin "CD boot sector" [ISOLINUX only] + .bs Boot sector [SYSLINUX only] + .bss Boot sector, DOS superblock will be patched in [SYSLINUX only] + .c32 COM32 image (32-bit COMBOOT) + .cbt COMBOOT image (not runnable from DOS) + .com COMBOOT image (runnable from DOS) + .img Disk image [ISOLINUX only] + +For filenames given on the command line, Syslinux will search for the +file by adding extensions in the order listed above if the plain +filename is not found. Filenames in KERNEL statements must be fully +qualified. + +If this is specified with one of the keywords LINUX, BOOT, BSS, +FDIMAGE, COMBOOT, COM32, or CONFIG instead of KERNEL, the filetype is +considered to be the one specified regardless of the filename. + + + ++++ BOOTING DOS (OR OTHER SIMILAR OPERATING SYSTEMS) ++++ + +This section applies to SYSLINUX only, not to PXELINUX or ISOLINUX. +See isolinux.txt for an equivalent procedure for ISOLINUX. + +This is the recommended procedure for creating a SYSLINUX disk that +can boot either DOS or Linux. This example assumes the drive is A: in +DOS and /dev/fd0 in Linux; for other drives, substitute the +appropriate drive designator. + + ---- Linux procedure ---- + +1. Make a DOS bootable disk. This can be done either by specifying + the /s option when formatting the disk in DOS, or by running the + DOS command SYS (this can be done under DOSEMU if DOSEMU has + direct device access to the relevant drive): + + format a: /s + or + sys a: + +2. Boot Linux. Copy the DOS boot sector from the disk into a file: + + dd if=/dev/fd0 of=dos.bss bs=512 count=1 + +3. Run SYSLINUX on the disk: + + syslinux /dev/fd0 + +4. Mount the disk and copy the DOS boot sector file to it. The file + *must* have extension .bss: + + mount -t msdos /dev/fd0 /mnt + cp dos.bss /mnt + +5. Copy the Linux kernel image(s), initrd(s), etc to the disk, and + create/edit syslinux.cfg and help files if desired: + + cp vmlinux /mnt + cp initrd.gz /mnt + +6. Unmount the disk (if applicable.) + + umount /mnt + + ---- DOS/Windows procedure ---- + +To make this installation in DOS only, you need the utility copybs.com +(included with Syslinux) as well as the syslinux.com installer. If +you are on an WinNT-based system (WinNT, Win2k, WinXP or later), use +syslinux.exe instead. + +1. Make a DOS bootable disk. This can be done either by specifying + the /s option when formatting the disk in DOS, or by running the + DOS command SYS: + + format a: /s + or + sys a: + +2. Copy the DOS boot sector from the disk into a file. The file + *must* have extension .bss: + + copybs a: a:dos.bss + +3. Run SYSLINUX on the disk: + + syslinux a: + +4. Copy the Linux kernel image(s), initrd(s), etc to the disk, and + create/edit syslinux.cfg and help files if desired: + + copy vmlinux a: + copy initrd.gz a: + + + ++++ COMBOOT EXECUTABLES ++++ + +Syslinux supports simple standalone programs, using a file format +similar to DOS ".com" files. A 32-bit version, called COM32, is also +provided. A simple API provides access to a limited set of filesystem +and console functions. + +See the file comboot.txt for more information on COMBOOT and COM32 +programs. + + + ++++ NOVICE PROTECTION ++++ + +Syslinux will attempt to detect booting on a machine with too little +memory, which means the Linux boot sequence cannot complete. If so, a +message is displayed and the boot sequence aborted. Holding down the +Ctrl key while booting disables this feature. + +Any file that SYSLINUX uses can be marked hidden, system or readonly +if so is convenient; SYSLINUX ignores all file attributes. The +SYSLINUX installed automatically sets the readonly/hidden/system +attributes on LDLINUX.SYS. + + + ++++ NOTES ON BOOTABLE CD-ROMS ++++ + +SYSLINUX can be used to create bootdisk images for El +Torito-compatible bootable CD-ROMs. However, it appears that many +BIOSes are very buggy when it comes to booting CD-ROMs. Some users +have reported that the following steps are helpful in making a CD-ROM +that is bootable on the largest possible number of machines: + + a) Use the -s (safe, slow and stupid) option to SYSLINUX; + b) Put the boot image as close to the beginning of the + ISO 9660 filesystem as possible. + +A CD-ROM is so much faster than a floppy that the -s option shouldn't +matter from a speed perspective. + +Of course, you probably want to use ISOLINUX instead. See isolinux.txt. + + + ++++ BOOTING FROM A FAT FILESYSTEM PARTITION ON A HARD DISK ++++ + +SYSLINUX can boot from a FAT filesystem partition on a hard disk +(including FAT32). The installation procedure is identical to the +procedure for installing it on a floppy, and should work under either +DOS or Linux. To boot from a partition, SYSLINUX needs to be launched +from a Master Boot Record or another boot loader, just like DOS itself +would. + +Under DOS, you can install a standard simple MBR on the primary hard +disk by running the command: + + FDISK /MBR + +Then use the FDISK command to mark the appropriate partition active. + +A simple MBR, roughly on par with the one installed by DOS (but +unencumbered), is included in the SYSLINUX distribution. To install +it under Linux, simply type: + + cat mbr.bin > /dev/XXX + +... where /dev/XXX is the device you wish to install it on. + +Under DOS or Win32, you can install the SYSLINUX MBR with the -m +option to the SYSLINUX installer, and use the -a option to mark the +current partition active: + + syslinux -ma c: + +Note that this will also install SYSLINUX on the specified partition. + + + ++++ HARDWARE INFORMATION +++ + +I have started to maintain a web page of hardware with known +problems. There are, unfortunately, lots of broken hardware out +there; especially early PXE stacks (for PXELINUX) have lots of +problems. + +A list of problems, and workarounds (if known), is maintained at: + + http://syslinux.zytor.com/hardware.php + + + ++++ BOOT LOADER IDS USED ++++ + +The Linux boot protocol supports a "boot loader ID", a single byte +where the upper nybble specifies a boot loader family (3 = Syslinux) +and the lower nybble is version or, in the case of Syslinux, media: + + 0x31 (49) = SYSLINUX + 0x32 (50) = PXELINUX + 0x33 (51) = ISOLINUX + 0x34 (52) = EXTLINUX + +In recent versions of Linux, this ID is available as +/proc/sys/kernel/bootloader_type. + + + ++++ BUG REPORTS ++++ + +I would appreciate hearing of any problems you have with Syslinux. I +would also like to hear from you if you have successfully used Syslinux, +*especially* if you are using it for a distribution. + +If you are reporting problems, please include all possible information +about your system and your BIOS; the vast majority of all problems +reported turn out to be BIOS or hardware bugs, and I need as much +information as possible in order to diagnose the problems. + +There is a mailing list for discussion among Syslinux users and for +announcements of new and test versions. To join, or to browse the +archive, go to: + + http://www.zytor.com/mailman/listinfo/syslinux + +Please DO NOT send HTML messages or attachments to the mailing list +(including multipart/alternative or similar.) All such messages will +be bounced. diff --git a/config/release/3rdparty/syslinux/doc/usbkey.txt b/config/release/3rdparty/syslinux/doc/usbkey.txt new file mode 100644 index 0000000000..33613d6963 --- /dev/null +++ b/config/release/3rdparty/syslinux/doc/usbkey.txt @@ -0,0 +1,47 @@ +The proper mode to boot a USB key drive in is "USB-HDD". That is the +ONLY mode in which the C/H/S geometry encoded on the disk itself +doesn't have to match what the BIOS thinks it is. Since geometry on +USB drives is completely arbitrary, and can vary from BIOS to BIOS, +this is the only mode which will work in general. + +Some BIOSes have been reported (in particular, certain versions of the +Award BIOS) that cannot boot USB keys in "USB-HDD" mode. This is a +very serious BIOS bug, but it is unfortunately rather typical of the +kind of quality we're seeing out of major BIOS vendors these days. On +these BIOSes, you're generally stuck booting them in USB-ZIP mode. + +THIS MEANS THE FILESYSTEM IMAGE ON THE DISK HAS TO HAVE A CORRECT +ZIPDRIVE-COMPATIBLE GEOMETRY. + +A standard zipdrive (both the 100 MB and the 250 MB varieties) have a +"geometry" of 64 heads, 32 sectors, and are partitioned devices with a +single partition 4 (unlike most other media of this type which uses +partition 1.) The 100 MB variety has 96 cylinders, and the 250 MB +variety has 239 cylinders; but any number of cylinders will do as +appropriate for the size device you have. For example, if your device +reports when inserted into a Linux system: + +usb-storage: device found at 4 + Vendor: 32MB Model: HardDrive Rev: 1.88 + Type: Direct-Access ANSI SCSI revision: 02 +SCSI device sda: 64000 512-byte hdwr sectors (33 MB) + +... you would have 64000/(64*32) = 31.25 cylinders; round down to 31. + +The script "mkdiskimage" which is supplied with the syslinux +distribution can be used to initialize USB keys in a Zip-like fashion. +To do that, calculate the correct number of cylinders (31 in the +example above), and, if your USB key is /dev/sda (CHECK THE KERNEL +MESSAGES CAREFULLY - IF YOU ENTER THE WRONG DISK DRIVE IT CANNOT BE +RECOVERED), run: + + mkdiskimage -4 /dev/sda 0 64 32 + +(The 0 means automatically determine the size of the device, and -4 +means mimic a zipdisk by using partition 4.) + +Then you should be able to run + + syslinux /dev/sda4 + +... and mount /dev/sda4 and put your files on it as needed. diff --git a/config/release/3rdparty/syslinux/dos/syslinux.com b/config/release/3rdparty/syslinux/dos/syslinux.com new file mode 100755 index 0000000000000000000000000000000000000000..32dd49c6dbc559814db87ca21eb1d194fee66472 GIT binary patch literal 33735 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 z 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 H28jke$&-6I literal 0 HcmV?d00001 diff --git a/config/release/3rdparty/syslinux/win32/syslinux.exe b/config/release/3rdparty/syslinux/win32/syslinux.exe new file mode 100755 index 0000000000000000000000000000000000000000..fc5b6a5f7c653a7cb414bfaeb9cc904907d15089 GIT binary patch literal 68608 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