1. 内核文件布局

首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局。

/*
 * setup.ld
 *
 * Linker script for the i386 setup code
 */
)
   7: OUTPUT_ARCH(i386)
   8: ENTRY(_start)
   9:  
  10: SECTIONS
  11: {
  12:     . = 0;
  13:     .bstext        : { *(.bstext) }
  14:     .bsdata        : { *(.bsdata) }
  15:  
  16:     . = 497;
  17:     .header        : { *(.header) }
  18:     .entrytext    : { *(.entrytext) }
  19:     .inittext    : { *(.inittext) }
  20:     .initdata    : { *(.initdata) }
  21:     __end_init = .;
  22:  
  23:     .text        : { *(.text) }
  24:     .text32        : { *(.text32) }
  25:  
  26:     . = ALIGN(16);
  27:     .rodata        : { *(.rodata*) }
  28:  
  29:     .videocards    : {
  30:         video_cards = .;
  31:         *(.videocards)
  32:         video_cards_end = .;
  33:     }
  34:  
  35:     . = ALIGN(16);
  36:     .data        : { *(.data*) }
  37:  
  38:     .signature    : {
  39:         setup_sig = .;
  40:         LONG(0x5a5aaa55)
  41:     }
  42:  
  43:  
  44:     . = ALIGN(16);
  45:     .bss        :
  46:     {
  47:         __bss_start = .;
  48:         *(.bss)
  49:         __bss_end = .;
  50:     }
  51:     . = ALIGN(16);
  52:     _end = .;
  53:  
  54:     /DISCARD/ : { *(.note*) }
  55:  
/*
     * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility:
     */
);
);
/* Necessary for the very-old-loader check to work... */
);
  63:  
  64: }

相关文章: