mirror of
https://github.com/xcat2/xNBA.git
synced 2025-03-12 07:06:54 +00:00
The standard option ROM format provides a header indicating the size of the entire ROM, which the BIOS will reserve space for, load, and call as necessary. However, this space is strictly limited to 128k for all ROMs. gPXE ameliorates this somewhat by reserving space for itself in high memory and relocating the majority of its code there, but on systems prior to PCI3 enough space must still be present to load the ROM in the first place. Even on PCI3 systems, the BIOS often limits the size of ROM it will load to a bit over 64kB. These space problems can be solved by providing an artificially small size in the ROM header: just enough to let the prefix code (at the beginning of the ROM image) be loaded by the BIOS. To the BIOS, the gPXE ROM will appear to be only a few kilobytes; it can then load the rest of itself by accessing the ROM directly using the PCI interface reserved for that task. There are a few problems with this approach. First, gPXE needs to find an unmapped region in memory to map the ROM so it can read from it; this is done using the crude but effective approach of scanning high memory (over 0xF0000000) for a sufficiently large region of all-ones (0xFF) reads. (In x86 architecture, all-ones is returned for accesses to memory regions that no mapped device can satisfy.) This is not provably valid in all situations, but has worked well in practice. More importantly, this type of ROM access can only work if the PCI ROM BAR exists at all. NICs on physical add-in PCI cards generally must have the BAR in order for the BIOS to be able to load their ROM, but ISA cards and LAN-on-Motherboard cards will both fail to load gPXE using this scheme. Due to these uncertainties, it is recommended that .xrom only be used when a regular .rom image is infeasible due to crowded option ROM space. However, when it works it could allow loading gPXE images as large as a flash chip one could find - 128kB or even higher. Signed-off-by: Marty Connor <mdc@etherboot.org>
…
gPXE README File gPXE is an implementation of the PXE specification for network booting, with extensions to allow additional features such as booting via HTTP, iSCSI, and AoE. In generally, gPXE is compatible with the industry-standard PXE specification, and also supports Etherboot .nbi file loading and some additional protocols and features. For more detailed information about gPXE, please visit our project website at: http://etherboot.org/ BUILDING gPXE IMAGE FROM SOURCE If you don't want to install development tools, and have access to the Web, you can get gPXE and Etherboot ROM images made on demand from http://rom-o-matic.net/ If you would like to compile gPXE images from source, here are some tips. We normally compile gPXE images on x86, 32-bit Linux machines. It is possible to also use x86-64 machines. We use gcc compiler options to create 32-bit output. It is important to have the necessary software packages installed. A gcc-based toolchain is required. The following packages (at least) are required: - a gcc tool chain (gcc 3.x or gcc 4.x) - binutils - perl - syslinux - mtools To test your environment, cd to the "src" directory and type: make You should see a lot of output, and when it stops, the "bin" directory should be populated with gPXE images and object files. To learn more about what to build and how to use gPXE, please visit our project website at http://etherboot.org/ , particularly the "howto" section. CONTACTING US Pointers to our project mailing lists are on http://etherboot.org/ Real-time help is often available on IRC on the #etherboot channel of irc.freenode.net.
Description
Languages
C
94.5%
Objective-C
2.1%
Assembly
1.3%
Perl
0.9%
Makefile
0.4%
Other
0.7%