诚捷手游网:专为(Android)安卓手机用户量身打造的安卓游戏、APK游戏下载平台!
网站地图
你的位置: 首页 > 游戏资讯 > 操作系统

linux内核启动地址,解压缩,启动参数

  • 2023-08-01 05:04:49
  • 来源:网络
  • 在手机上看

    扫一扫立即进入手机端

  内核编译链接过程是依靠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)

  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);

  .data : {

  /*

  * first, the init task union, aligned

  * to an 8192 byte boundary.

  */

  *(.init.task)

  /*

  * then the cacheline aligned data

  */

  . = ALIGN(32);

  *(.data.cacheline_aligned)

  /*

  * and the usual data section

  */

  *(.data)

  CONSTRUCTORS

  _edata = .;

  }

  .bss : {

  __bss_start = .; /* BSS */

  *(.bss)

  *(COMMON)

  _end = . ;

  }

  /* 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) }

  }

  arch/arm/Makefile中:

  vmlinux: arch/arm/vmlinux.lds

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

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

  MAKEBOOT = $(MAKE) -C arch/$(ARCH)/boot

  bzImage zImage zinstall Image bootpImage install: vmlinux

  @$(MAKEBOOT) $@

  但在kernel/arch/arm/boot/Makefile

  ifeq ($(CONFIG_ARCH_S3C2410),y)

  ZTEXTADDR = 0x30008000

  ZRELADDR = 0x30008000

  endif

  zImage: $(CONFIGURE) compressed/vmlinux

  $(OBJCOPY) -O binary -R .note -R .comment -S compressed/vmlinux $@

  compressed/vmlinux: $(TOPDIR)/vmlinux dep

  @$(MAKE) -C compressed vmlinux

  在compressed目录下的Makefile中

  ZLDFLAGS = -p -X -T vmlinux.lds

  SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/LOAD_ADDR/$(ZRELADDR)/;s/BSS_START/$(ZBSSADDR)/

  all: vmlinux

  vmlinux: $(HEAD) $(OBJS) piggy.o vmlinux.lds

  $(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o $(LIBGCC) -o vmlinux

  vmlinux.lds: vmlinux.lds.in Makefile $(TOPDIR)/arch/$(ARCH)/boot/Makefile $(TOPDIR)/.config

  @sed “$(SEDFLAGS)“ $@

#p#副标题#e#

  vmlinux-armv.lds.in文件的内容:

  OUTPUT_ARCH(arm)

  ENTRY(_start)

  SECTIONS

  {

  . = LOAD_ADDR;

  _load_addr = .;

  . = TEXT_START;

  _text = .;

  .text : {

  _start = .;

  *(.start)

  *(.text)

  *(.fixup)

  *(.gnu.warning)

  *(.rodata)

  *(.rodata.*)

  *(.glue_7)

  *(.glue_7t)

  input_data = .;

  piggy.o

  input_data_end = .;

  . = ALIGN(4);

  }

  _etext = .;

  _got_start = .;

  .got : { *(.got) }

  _got_end = .;

  .got.plt : { *(.got.plt) }

  .data : { *(.data) }

  _edata = .;

  . = BSS_START;

  __bss_start = .;

  .bss : { *(.bss) }

  _end = .;

  .stack (NOLOAD) : { *(.stack) }

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

  }

  vmlinux.lds内容为

  OUTPUT_ARCH(arm)

  ENTRY(_start)

  SECTIONS

  {

  . = 0x30008000;

  _load_addr = .;

  . = 0;

  _text = .;

  .text : {

  _start = .;

  *(.start)

  *(.text)

  *(.fixup)

  *(.gnu.warning)

  *(.rodata)

  *(.rodata.*)

  *(.glue_7)

  *(.

游戏推荐

linux内核 linux内核启动地址 解压缩 启动参数
更多

手机游戏排行榜