As per the Linux kernel documentation https://www.kernel.org/doc/Documentation/x86/boot.txt
, there is a kernel real mode code from X+10000
to X+08000
. There are two question I have;
For a modern bzImage kernel with boot protocol version >= 2.02, a
memory layout like the following is suggested:
~ ~
| Protected-mode kernel |
100000 +------------------------+
| I/O memory hole |
0A0000 +------------------------+
| Reserved for BIOS | Leave as much as possible unused
~ ~
| Command line | (Can also be below the X+10000 mark)
X+10000 +------------------------+
| Stack/heap | For use by the kernel real-mode code.
X+08000 +------------------------+
| Kernel setup | The kernel real-mode code.
| Kernel boot sector | The kernel legacy boot sector.
X +------------------------+
| Boot loader | <- Boot sector entry point 0000:7C00
001000 +------------------------+
| Reserved for MBR/BIOS |
000800 +------------------------+
| Typically used by MBR |
000600 +------------------------+
| BIOS use only |
000000 +------------------------+
1.Is the real mode code is part of GRUB or it is part of bzImage.
2.If the real mode code is in between X+10000
to X+08000
where is the physical location of the long mode/64 bit
mode kernel code?