Memory Map (Segment 0)
From Syslinux Wiki
Contents |
General Overview
Segment 0 (the first 64K of RAM) contain the SYSLINUX core image, which is composed out of various ELF segments (.data, .text etc.) loaded in different places into memory. This page will describe the organization and functions of each SYSLINUX image segment.
Segment Organization
The image below presents the detailed map of segment 0:
0x0000 - 0x0800
The first 2K of RAM are reserved for the system. They contain, in this order, the IVT (Interrupt Vector Table), a part of the BIOS, and a copy of the MBR of the boot hard drive.
0x0800 - 0x7C00
This section contains SYSLINUX data segments, as follows:
- .earlybss, which contain uninitialized data to be used by the .bcopy32 segment.
- .bcopy32 is a text segment containing code used to copy regions of memory from one place to another.
- .config contains the current runtime configuration of SYSLINUX. SYSLINUX maintains two copies of configuration: this one, and a master copy in the .data section of the core. The .config configuration is initially copied from the master configuration, then it can be modified at runtime.
- .bss, together with .bss1 make the uninitialized data area of the SYSLINUX core.
At the end of this section there is 4 KB of memory reserved for the SYSLINUX core stack. The rest of the space between the stack and the data segments is unused.
0x7C00 - 0x8000
0x7C00 is the SYSLINUX entry point, and initially it executes a 512 byte sector called Boot sector. The code in the boot sector then loads another 512 byte sector, called Sector 1. This initial image then loads the rest of the executable segments from disk or from the network.
0x8000 - 0x10000
The rest of the 64K segment contains the SYSLINUX main image and some other global data. The image is composed out of the following segments:
- .text contains the image code.
- .data contains the image initialized global data.
- .adv (Auxiliary Data Vector), used for boot-once support.
The other data segments are:
- .uibss is an uninitialized data segment that can be used by the core only after it is fully initialized. Its main use is for user interface (hence its name).
- .bss1 is the second part of the core BSS segment (the first part is .bss itself).
See also
This page is known to be best accurate as of SYSLINUX version 3.70. Minor modifications may have occurred in subsequent versions, but the general idea presented in this page remains the same.


