mini2440系統移植篇之kernel鏈接

鏈接文件在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);

 

6BSS

 .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) }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章