File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ENTRY (_start)
2+
13/* 高半区虚拟基址与物理加载基址 */
2- KERNEL_VMA = 0xFFFFFFFF80200000 ; /* 高半区虚拟地址(示例) */
3- KERNEL_LMA = 0x00200000 ; /* 物理加载地址 2MiB */
4+ KERNEL_VBASE = 0xFFFFFFFF80000000;
5+ KERNEL_LBASE = 0x00200000 ; /* 2MB对齐,适合大页 */
46
5- ENTRY (_start)
7+ /* VMA从虚拟基址开始 */
8+ . = KERNEL_VBASE;
69
710PHDRS
811{
@@ -13,27 +16,53 @@ PHDRS
1316
1417SECTIONS
1518{
16- /* 把链接地址(VMA)移动到高半区 */
17- . = KERNEL_VMA ;
19+ /* 内核物理起始地址 */
20+ kernel_physical_start = KERNEL_LBASE ;
1821
19- .text : ALIGN (16 )
22+ /* 代码段:VMA=虚拟地址, LMA=物理地址 */
23+ .text ALIGN (4K) : AT(KERNEL_LBASE)
2024 {
21- KEEP (*(.text ._start ))
25+ KEEP (*(.text ._start )) /* 确保_start在最前面 */
2226 *(.text .text .*)
23- } :text AT (ADDR (.text ) - KERNEL_VMA + KERNEL_LMA)
24-
25- .rodata : ALIGN (16 )
27+ } :text
28+
29+ /* RO数据紧接代码段 */
30+ .rodata ALIGN (4K) : AT(LOADADDR(.text) + SIZEOF (.text ))
2631 {
2732 *(.rodata .rodata .*)
28- } :rodata AT (ADDR (.rodata ) - KERNEL_VMA + KERNEL_LMA)
29-
30- .data : ALIGN (16 )
33+ *(.got .got .*) /* GOT表通常放在这里 */
34+ } :rodata
35+
36+ /* 数据段 */
37+ .data ALIGN (4K) : AT(LOADADDR(.rodata) + SIZEOF (.rodata ))
3138 {
3239 *(.data .data .*)
33- } :data AT (ADDR (.data ) - KERNEL_VMA + KERNEL_LMA)
34-
35- .bss : ALIGN (16 )
40+ } :data
41+
42+ /* BSS段:没有AT(),但需要设置加载地址到物理内存末尾 */
43+ .bss ALIGN (4K) :
3644 {
45+ __bss_start = . - KERNEL_VBASE; /* 物理地址 */
3746 *(.bss .bss .* COMMON)
38- } :data AT (ADDR (.bss ) - KERNEL_VMA + KERNEL_LMA)
47+ . = ALIGN (4K);
48+ __bss_end = . - KERNEL_VBASE; /* 物理地址 */
49+ } :data
50+
51+ /* 内核边界符号 */
52+ kernel_virtual_end = .;
53+ kernel_physical_end = LOADADDR (.data ) + SIZEOF (.data ) + SIZEOF (.bss );
54+
55+ /* 栈空间 */
56+ .stack ALIGN (4K) :
57+ {
58+ . += 64K;
59+ __stack_top = .;
60+ }
61+
62+ /* 丢弃不需要的段 */
63+ /DISCARD/ : {
64+ *(.comment )
65+ *(.note .gnu .property )
66+ *(.eh_frame )
67+ }
3968}
You can’t perform that action at this time.
0 commit comments