mirror of
https://github.com/ipxe/ipxe
synced 2026-01-27 01:53:22 +03:00
a32f3c2bc4299097408b6e97bc711b4b86a8217b
Paging provides an alternative to using relocations: instead of applying relocation fixups to the runtime addresses, we can set up virtual addressing so that the runtime addresses match the link-time addresses. This opens up the possibility of running portions of iPXE directly from read-only memory (such as a memory-mapped flash device), subject to the caveats that .data is not yet writable and .bss is not yet zeroed. This should allow us to run enough code to parse the memory map from the FDT, identify a suitable RAM block, and physically relocate ourselves there. Add code to construct a 64-bit page table (in a single 4kB buffer) to identity-map as much of the physical address space as possible, to map iPXE itself at its link-time address, and to return with paging enabled and the program counter updated to a virtual address. We use the highest paging level supported by the CPU, to maximise the amount of the physical address space covered by the identity map. Signed-off-by: Michael Brown <mcb30@ipxe.org>
iPXE README File Quick start guide: cd src make For any more detailed instructions, see http://ipxe.org
Languages
C
97.3%
Assembly
1.5%
Perl
0.6%
Makefile
0.3%
Python
0.2%