上文参考:http://www.cnblogs.com/long123king/p/3545991.html

 

先分析一下linker script的语法。

 


#ifdef CONFIG_X86_32
#define LOAD_OFFSET __PAGE_OFFSET
#else
#define LOAD_OFFSET __START_KERNEL_map
#endif

    /* Text and read-only data */
    .text :  AT(ADDR(.text) - LOAD_OFFSET) {
        _text = .;
        /* bootstrapping code */
        HEAD_TEXT
#ifdef CONFIG_X86_32
        . = ALIGN(PAGE_SIZE);
        *(.text..page_aligned)
#endif
        . = ALIGN(8);
        _stext = .;
        TEXT_TEXT
        SCHED_TEXT
        LOCK_TEXT
        KPROBES_TEXT
        ENTRY_TEXT
        IRQENTRY_TEXT
        *(.fixup)
        *(.gnu.warning)
        /* End of text section */
        _etext = .;
    } :text = 0x9090

这一段定义了.text section中的内容,AT(ADDR(.text) - LOAD_OFFSET)定义了这个section的LMA(Load Memory Address),说白了,而通过.定义的是VMA(Virtual Memory Address)。在x86平台,二者没有区别,都对应相对于加载起始点(LOAD_OFFSET,即0xC0000000, 3GB)的偏移地址。

:text = 0x9090指明这个.section要加载到text segment段中,0x9090指明了用于填充由于section对齐而产生的空隙。90是nop汇编语句。

我们看一下生成的内核映像文件vmlinux的布局

   1: daniel@ubuntu:~/linux-3.0$ objdump vmlinux -h
   2:  
   3: vmlinux:     file format elf32-i386
   4:  
   5: Sections:
   6: Idx Name                  Size      VMA       LMA       File off  Algn
   7:   0 .interp               00000013  08048114  08048114  00000114  2**0                  CONTENTS, ALLOC, LOAD, READONLY, DATA
   8:   1 .init.text            0000b35f  08049000  08049000  00001000  2**0                  CONTENTS, ALLOC, LOAD, READONLY, CODE
   9:   2 .gnu.hash             000002b0  08055000  08055000  0000d000  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  10:   3 .dynsym               00000b00  080552b0  080552b0  0000d2b0  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  11:   4 .dynstr               00000622  08055db0  08055db0  0000ddb0  2**0                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  12:   5 .gnu.version          00000160  080563d2  080563d2  0000e3d2  2**1                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  13:   6 .gnu.version_r        000000a0  08056534  08056534  0000e534  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  14:   7 .rel.got              00000008  080565d4  080565d4  0000e5d4  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  15:   8 .rel.bss              00000010  080565dc  080565dc  0000e5dc  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  16:   9 .rel.plt              00000460  080565ec  080565ec  0000e5ec  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  17:  10 .init                 0000002e  08056a4c  08056a4c  0000ea4c  2**2                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  18:  11 .plt                  000008d0  08056a80  08056a80  0000ea80  2**4                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  19:  12 .text                 0016bcb0  08057350  08057350  0000f350  2**4                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  20:  13 .syscall_stub         000000cc  081c3000  081c3000  0017b000  2**0                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  21:  14 .fini                 0000001a  081c30cc  081c30cc  0017b0cc  2**2                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  22:  15 .rodata               000592b0  081c4000  081c4000  0017c000  2**5                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  23:  16 .eh_frame_hdr         00012554  0821d2b0  0821d2b0  001d52b0  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  24:  17 __ksymtab             00004698  0822f808  0822f808  001e7808  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  25:  18 __ksymtab_gpl         00001598  08233ea0  08233ea0  001ebea0  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  26:  19 __ksymtab_strings     0000c299  08235438  08235438  001ed438  2**0                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  27:  20 __param               00000110  082416d4  082416d4  001f96d4  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  28:  21 __modver              0000081c  082417e4  082417e4  001f97e4  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  29:  22 .note                 00000044  08242000  08242000  001fa000  2**2                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  30:  23 __ex_table            00000130  08242044  08242044  001fa044  2**0                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  31:  24 .uml.setup.init       00000090  08242178  08242178  001fa178  2**2                  CONTENTS, ALLOC, LOAD, DATA
  32:  25 .uml.help.init        00000064  08242208  08242208  001fa208  2**2                  CONTENTS, ALLOC, LOAD, DATA
  33:  26 .init.setup           000002ac  0824226c  0824226c  001fa26c  2**2                  CONTENTS, ALLOC, LOAD, DATA
  34:  27 .initcall.init        00000270  08243000  08243000  001fb000  2**2                  CONTENTS, ALLOC, LOAD, DATA
  35:  28 .con_initcall.init    00000004  08243270  08243270  001fb270  2**2                  CONTENTS, ALLOC, LOAD, DATA
  36:  29 .exitcall             0000005c  08243274  08243274  001fb274  2**2                  CONTENTS, ALLOC, LOAD, DATA
  37:  30 .uml.exitcall         00000024  082432d0  082432d0  001fb2d0  2**2                  CONTENTS, ALLOC, LOAD, DATA
  38:  31 .altinstructions      00000030  082432f4  082432f4  001fb2f4  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  39:  32 .altinstr_replacement 0000000c  08243324  08243324  001fb324  2**0                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  40:  33 .exit.text            000002c3  08243330  08243330  001fb330  2**0                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  41:  34 init.data             00006ea0  08244000  08244000  001fc000  2**2                  CONTENTS, ALLOC, LOAD, DATA
  42:  35 .data                 00014460  0824aea0  0824aea0  00202ea0  2**5                  CONTENTS, ALLOC, LOAD, DATA
  43:  36 .eh_frame             0009fbc0  0825f300  0825f300  00217300  2**2                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  44:  37 .dynamic              000000d8  082feec0  082feec0  002b6ec0  2**2                  CONTENTS, ALLOC, LOAD, DATA
  45:  38 .ctors                00000008  082fef98  082fef98  002b6f98  2**2                  CONTENTS, ALLOC, LOAD, DATA
  46:  39 .dtors                00000008  082fefa0  082fefa0  002b6fa0  2**2                  CONTENTS, ALLOC, LOAD, DATA
  47:  40 .jcr                  00000004  082fefa8  082fefa8  002b6fa8  2**2                  CONTENTS, ALLOC, LOAD, DATA
  48:  41 .got                  00000240  082fefac  082fefac  002b6fac  2**2                  CONTENTS, ALLOC, LOAD, DATA
  49:  42 .bss                  0000d464  082ff200  082ff200  002b71ec  2**5                  ALLOC
  50:  43 .comment              0000002a  00000000  00000000  002b71ec  2**0                  CONTENTS, READONLY
  51:  44 .gnu_debuglink        00000024  00000000  00000000  002b7216  2**0                  CONTENTS, READONLY
  52:  45 .debug_aranges        00005950  00000000  00000000  002b7240  2**3                  CONTENTS, READONLY, DEBUGGING
  53:  46 .debug_info           01322c32  00000000  00000000  002bcb90  2**0                  CONTENTS, READONLY, DEBUGGING
  54:  47 .debug_abbrev         000a2c21  00000000  00000000  015df7c2  2**0                  CONTENTS, READONLY, DEBUGGING
  55:  48 .debug_line           0016b63c  00000000  00000000  016823e3  2**0                  CONTENTS, READONLY, DEBUGGING
  56:  49 .debug_str            0008d834  00000000  00000000  017eda1f  2**0                  CONTENTS, READONLY, DEBUGGING
  57:  50 .debug_loc            002823be  00000000  00000000  0187b253  2**0                  CONTENTS, READONLY, DEBUGGING
  58:  51 .debug_ranges         00058c80  00000000  00000000  01afd618  2**3                  CONTENTS, READONLY, DEBUGGING

相关文章: