1. vmlinux.lds.S用于对ld的输出进行组版,这个文件的格式在ld.info手册中有详细的说明。vmlinu
  2. x.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名,以下是简要注释。
  3. /* ld script to make i386 Linux kernel
  4. * Written by Martin Mares ;
  5. */
  6. OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
  7. OUTPUT_ARCH(i386)        /* 输出格式 */
  8. ENTRY(_start)            /* 定义_start作为入口点 */
  9. SECTIONS
  10. {
  11. . = PAGE_OFFSET_RAW + 0x100000; /* 定义当前段的偏移量(.代表当前计数器) */
  12. _text = .;            /* 定义符号_text为当前位置 */
  13. .text : {        /* 定义段.text (": {"是段定义符)*/
  14. *(.text)    /* 将所有输入文件中.text段合并到这里 */
  15. *(.fixup)    /* 将所有输入文件中的.fixup段合并到这里 */
  16. *(.gnu.warning) /* 将所有输入文件中的.gnu.warning段合并到这里 */
  17. } = 0x9090    /* 合并中的空隙用0x9090填充 */
  18. /* 以下的语法含义可以类推 */
  19. .text.lock : { *(.text.lock) }    /* out-of-line lock text */
  20. .rodata : { *(.rodata) }
  21. .kstrtab : { *(.kstrtab) }
  22. . = ALIGN(16);        /* Exception table */
  23. __start___ex_table = .;    /* 定义__start_ex_table符号为当前位置 */
  24. __ex_table : { *(__ex_table) }
  25. __stop___ex_table = .;
  26. __start___ksymtab = .;    /* Kernel symbol table */
  27. __ksymtab : { *(__ksymtab) }
  28. __stop___ksymtab = .;
  29. _etext = .;            /* End of text section */
  30. .data : {            /* Data */
  31. *(.data)
  32. CONSTRUCTORS        /* 将C++的构造函数指针段合并到这里 */
  33. }
  34. _edata = .;            /* End of data section */
  35. . = ALIGN(8192);        /* init_task */
  36. .data.init_task : { *(.data.init_task) }
  37. . = ALIGN(4096);        /* Init code and data */
  38. __init_begin = .;
  39. .text.init : { *(.text.init) }
  40. .data.init : { *(.data.init) }
  41. . = ALIGN(4096);        /* 输出计数器在页边界上对齐 */
  42. __init_end = .;
  43. . = ALIGN(32);
  44. .data.cacheline_aligned : { *(.data.cacheline_aligned) }
  45. . = ALIGN(4096);
  46. .data.page_aligned : { *(.data.idt) }
  47. __bss_start = .;        /* BSS */
  48. .bss : {
  49. *(.bss)
  50. }
  51. _end = . ;
  52. /* Stabs debugging sections. */
  53. .stab 0 : { *(.stab) }    /* 0 是段属性,代表段的起始地址 */
  54. .stabstr 0 : { *(.stabstr) }
  55. .stab.excl 0 : { *(.stab.excl) }
  56. .stab.exclstr 0 : { *(.stab.exclstr) }
  57. .stab.index 0 : { *(.stab.index) }
  58. .stab.indexstr 0 : { *(.stab.indexstr) }
  59. .comment 0 : { *(.comment) }
  60. }

编译内核生成vmlinux 
 objdump --headers vmlinux 可以对照着看一下。

以下:

  1. [root@localhost linux-2.6.18.i686]# objdump --headers vmlinux
  2. vmlinux: file format elf32-i386
  3. Sections:
  4. Idx Name Size VMA LMA File off Algn
  5. 0 .text.head 000000a4 c0400000 00400000 00001000 2**2
  6. CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  7. 1 .text 0021f9e6 c0401000 00401000 00002000 2**12
  8. CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  9. 2 __ex_table 00000ea0 c06209f0 006209f0 002219f0 2**3
  10. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  11. 3 .rodata 0004da85 c0622000 00622000 00223000 2**5
  12. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  13. 4 .pci_fixup 00000608 c066fa88 0066fa88 00270a88 2**2
  14. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  15. 5 __ksymtab 00005310 c0670090 00670090 00271090 2**2
  16. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  17. 6 __ksymtab_gpl 000015b0 c06753a0 006753a0 002763a0 2**2
  18. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  19. 7 __ksymtab_gpl_future 00000018 c0676950 00676950 00277950 2**2
  20. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  21. 8 __kcrctab 00002988 c0676968 00676968 00277968 2**2
  22. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  23. 9 __kcrctab_gpl 00000ad8 c06792f0 006792f0 0027a2f0 2**2
  24. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  25. 10 __kcrctab_gpl_future 0000000c c0679dc8 00679dc8 0027adc8 2**2
  26. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  27. 11 __ksymtab_strings 0000ea6c c0679de0 00679de0 0027ade0 2**5
  28. CONTENTS, ALLOC, LOAD, READONLY, DATA
  29. 12 __param 0000080c c0689000 00689000 0028a000 2**2
  30. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  31. 13 .data 00069248 c068a000 0068a000 0028b000 2**7
  32. CONTENTS, ALLOC, LOAD, RELOC, DATA
  33. 14 .data_nosave 00002000 c06f4000 006f4000 002f5000 2**12
  34. CONTENTS, ALLOC, LOAD, DATA
  35. 15 .data.page_aligned 00000800 c06f6000 006f6000 002f7000 2**5
  36. CONTENTS, ALLOC, LOAD, DATA
  37. 16 .data.cacheline_aligned 0000c400 c06f6800 006f6800 002f7800 2**7
  38. CONTENTS, ALLOC, LOAD, RELOC, DATA
  39. 17 .data.read_mostly 00000dfc c0702c00 00702c00 00303c00 2**7
  40. CONTENTS, ALLOC, LOAD, RELOC, DATA
  41. 18 .data.init_task 00001000 c0704000 00704000 00305000 2**5
  42. CONTENTS, ALLOC, LOAD, RELOC, DATA
  43. 19 .smp_locks 000039d0 c0705000 00705000 00306000 2**2
  44. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  45. 20 .init.text 0001f9fa c0709000 00709000 0030a000 2**0
  46. CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  47. 21 .init.data 0000e453 c0729000 00729000 0032a000 2**12
  48. CONTENTS, ALLOC, LOAD, RELOC, DATA
  49. 22 .init.setup 000006a8 c0737460 00737460 00338460 2**2
  50. CONTENTS, ALLOC, LOAD, RELOC, DATA
  51. 23 .initcall.init 00000458 c0737b08 00737b08 00338b08 2**2
  52. CONTENTS, ALLOC, LOAD, RELOC, DATA
  53. 24 .con_initcall.init 0000000c c0737f60 00737f60 00338f60 2**2
  54. CONTENTS, ALLOC, LOAD, RELOC, DATA
  55. 25 .security_initcall.init 00000008 c0737f6c 00737f6c 00338f6c 2**2
  56. CONTENTS, ALLOC, LOAD, RELOC, DATA
  57. 26 .altinstructions 00002b1f c0737f74 00737f74 00338f74 2**2
  58. CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
  59. 27 .altinstr_replacement 00000bf3 c073aa93 0073aa93 0033ba93 2**0
  60. CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  61. 28 .exit.text 00000b31 c073b686 0073b686 0033c686 2**0
  62. CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
  63. 29 .init.ramfs 00000086 c073d000 0073d000 0033e000 2**0
  64. CONTENTS, ALLOC, LOAD, READONLY, DATA
  65. 30 .data.percpu 00004e44 c073d100 0073d100 0033e100 2**7
  66. CONTENTS, ALLOC, LOAD, RELOC, DATA
  67. 31 .bss 000b7000 c0742000 00742000 00342f44 2**12
  68. ALLOC
  69. 32 .comment 0000b188 00000000 00000000 00342f44 2**0
  70. CONTENTS, READONLY
  71. 33 .debug_aranges 00009898 00000000 00000000 0034e0cc 2**0
  72. CONTENTS, RELOC, READONLY, DEBUGGING
  73. 34 .debug_pubnames 000322f6 00000000 00000000 00357964 2**0
  74. CONTENTS, RELOC, READONLY, DEBUGGING
  75. 35 .debug_info 022f80a7 00000000 00000000 00389c5a 2**0
  76. CONTENTS, RELOC, READONLY, DEBUGGING
  77. 36 .debug_abbrev 001115b5 00000000 00000000 02681d01 2**0
  78. CONTENTS, READONLY, DEBUGGING
  79. 37 .debug_line 001db4e8 00000000 00000000 027932b6 2**0
  80. CONTENTS, RELOC, READONLY, DEBUGGING
  81. 38 .debug_frame 0008f154 00000000 00000000 0296e7a0 2**2
  82. CONTENTS, RELOC, READONLY, DEBUGGING
  83. 39 .debug_str 000dac29 00000000 00000000 029fd8f4 2**0
  84. CONTENTS, READONLY, DEBUGGING
  85. 40 .debug_loc 00322d57 00000000 00000000 02ad851d 2**0
  86. CONTENTS, RELOC, READONLY, DEBUGGING
  87. 41 .debug_ranges 0006d9f8 00000000 00000000 02dfb274 2**0
  88. CONTENTS, RELOC, READONLY, DEBUGGING

如何解读vmlinux.lds.S文件相关推荐

  1. 【linux kernel】基于ARM64分析linux内核的链接脚本vmlinux.lds.S

    文章目录 一.导读 二.链接器是什么 三.链接脚本 四.linux内核的链接脚本 4-1 头文件包含描述 4-2 参数设置和宏定义描述 4-3 SECTIONS内容分析 五.linux内核的" ...

  2. linux内核链接脚本vmlinux.lds分析(十一)

    vmlinux.lds.S主要是用来组织内核的每个函数存放在内核镜像文件的位置.编译内核源码生成内核文件的过程分两步,一个是"编译",另一个是"链接"的过程,v ...

  3. [kernel 启动流程] 前篇——vmlinux.lds分析

    https://blog.csdn.net/ooonebook/article/details/52690132 以下例子都以project X项目tiny210(s5pv210平台,armv7架构) ...

  4. 基于现有工程解读stm32的工程文件

    文章目录 解读32的工程文件 常用工具栏介绍 杨桃32学习笔记,本文图片文字皆为转述 解读32的工程文件 (1)CMSIS文件夹下包含两个c文件,对arm内核和整个单片机系统的基础文件,官方提供的不需 ...

  5. 解读多重启动引导文件——BOOT.INI

    解读多重启动引导文件--BOOT.INI 日期:2002-7-3 9:19:29 出处:电脑爱好者 作者:- <script language=JavaScript src="/ad/ ...

  6. 嵌入式C语言编程中经验教训总结(二)LDS链接文件解析

    目录 为什么要用到lds链接脚本? lds文件语法结构 lds文件实例解析 好的朋友已经做过好多年的arm开发,却对底层的编译链接逻辑很少接触,主要原因在于现在大多数应用层的开发不需要从裸板开始,工程 ...

  7. uboot.lds 链接文件分析

    lds文件与scatter文件相似都是决定一个可执行程序的各个段的存储位置,以及入口地址,这也是链接定位的作用. U-boot的lds文件说明如下: SECTIONS{...secname start ...

  8. 35.FFmpeg学习笔记 - ffplay源码解读3之读文件

    本篇文章看看ffplay是如何读取packet放入队列中的. 一.先看入口函数: int main(int argc, char **argv) {VideoState *is;...av_init_ ...

  9. jpcsp源码解读6:PSF文件

    当你运行了模拟器,通过模拟器菜单选择并加载一个umd镜像,模拟器就用这个umd镜像实例化一个UmdIsoReader(见上一篇,源码解读5). 通过这个UmdIsoReader,从光盘提取的第一个文件 ...

  10. [转贴]内核版之OS设计

    hyl (enthusiast) 10/06/02 10:28 [精华] 内核版之OS设计   本贴是索引页, 其回贴是早期系统的一些介绍. 了解最新进展 新闻和进展 Join us 参与问题的解决 ...

最新文章

  1. 知识星球!!!!!!
  2. python第七章_python 第七章 模块
  3. pelco协议及其实现的简单认识
  4. java 线程池 复用机制,java的线程池框架及线程池的原理
  5. NSArray 的遍历
  6. ocx在我indows7无法注册
  7. 祝各位朋友元旦快乐,新年大发!!!
  8. java8 treemap 排序_java中TreeMap排序的示例代码
  9. 我的个人博客是如何申请百度联盟通过的?
  10. python汉语词典_Python 字典(Dictionary)
  11. python批量下载网页文件夹_Python抓取网页批量下载文件方法初探(正则表达式+BeautifulSoup) (转)...
  12. 用 TableModel Free 框架简化 Swing 开发——JTable
  13. 【大话Java面试】-如何通俗易懂的理解Redis的回收算法LRU?
  14. 君正JZ4775芯片处理器介绍
  15. 基于Apache Hudi构建智能湖仓实践(附亚马逊工程师代码)
  16. 技能高考模拟试题三计算机类,计算机技能高考2016模拟试卷3
  17. 我,31岁,写了100篇原创文章!
  18. cesium城市建筑物贴图(地图数据篇.12)
  19. Win10无法更新系统保留分区解决办法
  20. 信捷PLC如何使用c函数

热门文章

  1. FREESPACE 发布 logo v1.1
  2. 所有快捷方式失效的解决方法
  3. 使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
  4. tomcat利用setenv对内存的限制和docker中tomcat内存的优雅配置
  5. 【软硬链接总结】描述linux下软链接和硬链接的区别(面试题)
  6. 精益企业中架构师的角色
  7. 在eclipse中创建web项目
  8. 理解委托的两类必要方法
  9. RHEL5 配置yum
  10. 高并发架构消息队列面试题解析