Linux 커널 문서에 따르면 에서 https://www.kernel.org/doc/Documentation/x86/boot.txt
까지의 커널 커널 모드 코드가 있습니다 . 두 가지 질문이 있습니다.X+10000
X+08000
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. GRUB의 리얼 모드 코드 부분이거나 bzImage의 일부입니다. 2. 리얼 모드 코드가 중간에 있는 경우 X+10000
모드 커널 코드 X+08000
의 물리적 위치는 어디에 있습니까 ?long mode/64 bit
답변1
(최신 버전을 참고하겠습니다.프로토콜 문서 시작, 보고 있는 문서는 오래되었습니다. )
리얼 모드 커널 부트 섹터와 설정 코드는 커널의 일부입니다.섹션 1.2. 그들은 살고있다엑스그리고엑스+0x08000.
보호 모드 커널은 위 표의 첫 번째 항목인 0x100000에 로드됩니다.