免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 698 | 回复: 0
打印 上一主题 下一主题

vmlinux.lds解读[转] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-13 16:50 |只看该作者 |倒序浏览
vmlinux.lds.S用于对ld的输出进行组版,这个文件的格式在ld.info手册中有详细的说明。vmlinu
x.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名,以下是简要注释。
/* ld script to make i386 Linux kernel
* Written by Martin Mares ;
*/
OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
OUTPUT_ARCH(i386)        /* 输出格式 */
ENTRY(_start)            /* 定义_start作为入口点 */
SECTIONS
{
  . = PAGE_OFFSET_RAW + 0x100000; /* 定义当前段的偏移量(.代表当前计数器) */
  _text = .;            /* 定义符号_text为当前位置  */
  .text : {        /* 定义段.text (": {"是段定义符)*/
    *(.text)    /* 将所有输入文件中.text段合并到这里 */
    *(.fixup)    /* 将所有输入文件中的.fixup段合并到这里 */
    *(.gnu.warning) /* 将所有输入文件中的.gnu.warning段合并到这里 */
    } = 0x9090    /* 合并中的空隙用0x9090填充 */
            /* 以下的语法含义可以类推 */
  .text.lock : { *(.text.lock) }    /* out-of-line lock text */
  .rodata : { *(.rodata) }
  .kstrtab : { *(.kstrtab) }
  . = ALIGN(16);        /* Exception table */
  __start___ex_table = .;    /* 定义__start_ex_table符号为当前位置 */
  __ex_table : { *(__ex_table) }
  __stop___ex_table = .;
  __start___ksymtab = .;    /* Kernel symbol table */
  __ksymtab : { *(__ksymtab) }
  __stop___ksymtab = .;
  _etext = .;            /* End of text section */
  .data : {            /* Data */
    *(.data)
    CONSTRUCTORS        /* 将C++的构造函数指针段合并到这里 */
    }
  _edata = .;            /* End of data section */
  . = ALIGN(8192);        /* init_task */
  .data.init_task : { *(.data.init_task) }
  . = ALIGN(4096);        /* Init code and data */
  __init_begin = .;
  .text.init : { *(.text.init) }
  .data.init : { *(.data.init) }
  . = ALIGN(4096);        /* 输出计数器在页边界上对齐 */
  __init_end = .;
  . = ALIGN(32);
  .data.cacheline_aligned : { *(.data.cacheline_aligned) }
  . = ALIGN(4096);
  .data.page_aligned : { *(.data.idt) }
  __bss_start = .;        /* BSS */
  .bss : {
    *(.bss)
    }
  _end = . ;
  /* Stabs debugging sections.  */
  .stab 0 : { *(.stab) }    /* 0 是段属性,代表段的起始地址 */
  .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) }
}
以下是用"objdump --headers vmlinux"得到的组版结果:
vmlinux:     file format elf32-i386
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0009ccb8  c0100000  c0100000  00001000  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .text.lock    00000622  c019ccc0  c019ccc0  0009dcc0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .rodata       0000f4ab  c019d2e4  c019d2e4  0009e2e4  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .kstrtab      00002d9c  c01ac78f  c01ac78f  000ad78f  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 __ex_table    00000ba8  c01af530  c01af530  000b0530  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab     00001870  c01b00d8  c01b00d8  000b10d8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 .data         000133c0  c01b1950  c01b1950  000b2950  2**4
                  CONTENTS, ALLOC, LOAD, DATA
  7 .data.init_task 00002000  c01c6000  c01c6000  000c6000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  8 .text.init    0000868e  c01c8000  c01c8000  000c8000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  9 .data.init    00003220  c01d0690  c01d0690  000d0690  2**2
                  CONTENTS, ALLOC, LOAD, DATA
10 .data.cacheline_aligned 00001c20  c01d4000  c01d4000  000d4000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
11 .data.page_aligned 00000800  c01d6000  c01d6000  000d6000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
12 .bss          0001f324  c01d6800  c01d6800  000d6800  2**4
                  ALLOC
13 .comment      000011d0  00000000  00000000  000d6800  2**0
                  CONTENTS, READONLY
14 .note         000011d0  000011d0  000011d0  000d79d0  2**0
                  CONTENTS, READONLY


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/17660/showart_277333.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP