鏈接文件在arch/arm/kernel中,由vmlinux.S生成vmlinux.lds
SECTIONS
{
1、代碼起始段,head段對應arch/arm/kernel/head.o arm/arch/kernel/init_task.o
. = 0xC0000000 + 0x00008000; //代碼段起始地址,這是個虛擬地址
.text.head : {
_stext = .;
_sinittext = .;
*(.text.head)
}
2、內核初始化代碼,init段對應init/built-in.o
.init : { /* Init code and data */
*(.init.text) *(.cpuinit.text) *(.meminit.text)
_einittext = .;
__proc_info_begin = .;
*(.proc.info.init)
__proc_info_end = .;
...
__init_end = .;
}
3、真正的代碼段
.text : { /* Real text segment */
_text = .; /* Text and read-only data */
__exception_text_start = .;
*(.exception.text)
__exception_text_end = .;
. = ALIGN(8); *(.text.hot) *(.text) *(.ref.text) *(.text.init.refok) *(.exit.text.refok) *(.devinit.text) *(.devexit.text) *(.text.unlikely)
. = ALIGN(8); __sched_text_start = .; *(.sched.text) __sched_text_end = .;
. = ALIGN(8); __lock_text_start = .; *(.spinlock.text) __lock_text_end = .;
. = ALIGN(8); __kprobes_text_start = .; *(.kprobes.text) __kprobes_text_end = .;
*(.fixup)
*(.gnu.warning)
*(.rodata)
*(.rodata.*)
*(.glue_7)
*(.glue_7t)
*(.got) /* Global offset table */
}
4、只讀數據段
. = ALIGN((4096)); .rodata : AT(ADDR(.rodata) - 0) { __start_rodata = .;
...
etext = .; /* End of text and rodata section */
5、數據段
__data_loc = .;
.data : AT(__data_loc) {
_data = .; /* address in memory */
...
_edata = .;
}
_edata_loc = __data_loc + SIZEOF(.data);
6、BSS段
.bss : {
__bss_start = .; /* BSS */
*(.bss)
*(COMMON)
_end = .;
}
7、調試信息段
/* Stabs debugging sections. */
.stab 0 : { *(.stab) }
.stabstr 0 : { *(.stabstr) }
.stab.excl 0 : { *(.stab.excl) }
.stab.exclstr 0 : { *(.stab.exclstr) }
.stab.index 0 : { *(.stab.index) }
.stab.indexstr 0 : { *(.stab.indexstr) }
.comment 0 : { *(.comment) }