1. 内核文件布局
首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局。
/*
* setup.ld
*
* Linker script for the i386 setup code
*/
)
7: OUTPUT_ARCH(i386)
8: ENTRY(_start)
9:
10: SECTIONS
11: {
12: . = 0;
13: .bstext : { *(.bstext) }
14: .bsdata : { *(.bsdata) }
15:
16: . = 497;
17: .header : { *(.header) }
18: .entrytext : { *(.entrytext) }
19: .inittext : { *(.inittext) }
20: .initdata : { *(.initdata) }
21: __end_init = .;
22:
23: .text : { *(.text) }
24: .text32 : { *(.text32) }
25:
26: . = ALIGN(16);
27: .rodata : { *(.rodata*) }
28:
29: .videocards : {
30: video_cards = .;
31: *(.videocards)
32: video_cards_end = .;
33: }
34:
35: . = ALIGN(16);
36: .data : { *(.data*) }
37:
38: .signature : {
39: setup_sig = .;
40: LONG(0x5a5aaa55)
41: }
42:
43:
44: . = ALIGN(16);
45: .bss :
46: {
47: __bss_start = .;
48: *(.bss)
49: __bss_end = .;
50: }
51: . = ALIGN(16);
52: _end = .;
53:
54: /DISCARD/ : { *(.note*) }
55:
/*
* The ASSERT() sink to . is intentional, for binutils 2.14 compatibility:
*/
);
);
/* Necessary for the very-old-loader check to work... */
);
63:
64: }