mini2440系统移植篇之kernel链接

来源:互联网 发布:软件专利说明书 编辑:程序博客网 时间:2024/05/16 18:52

链接文件在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) }

0 0
原创粉丝点击