内核编译链接过程是依靠vmlinux。lds文件,以arm为例vmlinux。lds文件位于kernel/arch/arm /vmlinux。lds,

vmlinux-armv。lds的生成过程在kernel/arch/arm/Makefile中

ifeq ($(CONFIG_CPU_32),y)

PROCESSOR

= armv

TEXTADDR

= 0xC0008000

LDSCRIPT

= arch/arm/vmlinux-armv。

  lds。in

endif

arch/arm/vmlinux。lds: $(LDSCRIPT) dummy

@sed ’s/TEXTADDR/$(TEXTADDR)/;s/DATAADDR/$(DATAADDR)/’ $(LDSCRIPT) >$@

查看arch/arm/vmlinux。

  lds 中

OUTPUT_ARCH(arm)

ENTRY(stext)

linux内核启动地址 解压缩 启动参数有哪些?

SECTIONS

。 = 0xC0008000;

。init : {

/* Init code and data

_stext = 。;

__init_begin = 。

*(。text。init)

__proc_info_begin = 。;

*(。proc。info)

__proc_info_end = 。;

__arch_info_begin = 。;

*(。arch。info)

__arch_info_end = 。

__tagtable_begin = 。;

*(。taglist)

__tagtable_end = 。;

*(。data。init)

。 = ALIGN(16);

__setup_start = 。;

*(。setup。init)

__setup_end = 。

__initcall_start = 。;

*(。initcall。init)

__initcall_end = 。;

。 = ALIGN(4096);

__init_end = 。;

/DISCARD/ : {

/* Exit code and data

  text。exit)

*(。data。exit)

*(。exitcall。exit)

。text : {

/* Real text segment

_text = 。;

/* Text and read-only data

  text)

*(。fixup)

*(。gnu。warning)

*(。rodata)

*(。rodata。*)

*(。glue_7)

*(。glue_7t)

*(。got)

/* Global offset table

_etext = 。

/* End of text section

。kstrtab : { *(。kstrtab) }

。 = ALIGN(16);

__ex_table : {

/* Exception table

__start___ex_table = 。

*(__ex_table)

__stop___ex_table = 。;

__ksymtab : {

/* Kernel symbol table

__start___ksymtab = 。;

*(__ksymtab)

__stop___ksymtab = 。

。 = ALIGN(8192);。