linux内核启动地址,解压缩,启动参数_绿色软件之家

绿色软件之家:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置: 首页操作系统LINUX → linux内核启动地址,解压缩,启动参数

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

时间:2015-06-28 00:00:00 来源:绿色软件之家 作者:网管联盟 我要评论(0)

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

相关阅读

文章评论
发表评论

热门文章 安装红帽子RedHat Linux9.0操作系统教程 安装红帽子RedHat Linux9.0操作系统教程 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 Tomcat9.0如何安装_Tomcat9.0环境变量配置方法 多种操作系统NTP客户端配置 多种操作系统NTP客户端配置 Linux操作系统修改IP Linux操作系统修改IP

相关下载

    人气排行 Linux下获取CPUID、硬盘序列号与MAC地址 dmidecode命令查看内存型号 linux tc实现ip流量限制 安装红帽子RedHat Linux9.0操作系统教程 linux下解压rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 关机、重启、注销 命令 查看linux服务器硬盘IO读写负载