可执行文件由许多链接在一起的对象文件组成。对象文件有许多节,如文本、数据、init 数据、bss等。这些对象文件都是由一个称为 链接器脚本(*lds)的文件链接并装入的。这个链接器脚本的功能是将输入对象文件的各节映射到输出文件中;换句话说,它将所有输入对象文件都链接到单一的可执行文件中,将该可执行文件的各节装入到指定地址处。 因此在分析u-boot代码是,首先应关注的是u-boot.lds文件,它位于$(U-BOOT_SRC_ROOT)/board/$(BOARD_NAME)目录下。

 1 /*
 2 * OUTPUT_FORMAT(default, big, little),在链接的时候,如果使用了-EB的命令行参数,则使用这里的big
 3 * 参数指定的字节序,如果使用了-EL;的命令行参数,则使用这里的little参数指定的字节序,如果没有使用
 4 * 任何命令行参数,则使用这里的default参数指定的字节序。
 5 * 由$(SRC_ROOT)/board/samsung/smdk6410/u-boot.lds中的定义可见,不管在链接的时候使用了何种命令行参数,
 6 * 输出的目标文件都是使用elf32-littlearm方式的字节序。
 7 */
 8 /*以下语句是指定输出可执行文件是elf格式,32位ARM指令,小端 */
 9 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
10 /*指定输出可执行文件的平台为ARM*/
11 OUTPUT_ARCH(arm)
12 /*指定输出可执行文件的起始代码段为_start.*/
13 ENTRY(_start)
14 SECTIONS
15 {
16     . = 0x00000000;  /*定位当前地址为0x0地址*/
17
18     . = ALIGN(4);  /*指定代码以4字节对齐*/
19     .text      :   /*指定代码段  */
20     {
21       arch/arm/cpu/arm1176/start.o    (.text)
22     board/samsung/smdk6410/libsmdk6410.o (.text)
23       *(.text)
24     }
25
26     . = ALIGN(4);
27     .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } /*指定只读数据段 */
28
29     . = ALIGN(4);
30     .data : { *(.data) }  /*指定读写数据段*/
31
32     . = ALIGN(4);
33     .got : { *(.got) }   /*指定got段, got段式是uboot自定义的一个段, 非标准段*/
34
35
36     . = ALIGN(4);
37     .u_boot_list : {
38         #include <u-boot.lst>
39     }
40
41     . = ALIGN(4);
42     .mmudata : { *(.mmudata) }
43
44     . = ALIGN(4);
45
46     .rel.dyn : {
47         __rel_dyn_start = .;
48         *(.rel*)
49         __rel_dyn_end = .;
50     }
51
52     .dynsym : {
53         __dynsym_start = .;
54         *(.dynsym)
55     }
56
57     _end = .;
58
59     .bss __rel_dyn_start (OVERLAY) : {
60         __bss_start = .;
61         *(.bss)
62         . = ALIGN(4);
63         __bss_end__ = .;
64     }
65
66     /DISCARD/ : { *(.dynstr*) }
67     /DISCARD/ : { *(.dynamic*) }
68     /DISCARD/ : { *(.plt*) }
69     /DISCARD/ : { *(.interp*) }
70     /DISCARD/ : { *(.gnu*) }
71 }

转载于:https://www.cnblogs.com/laojie4321/p/4248531.html

u-boot.lds文件简介相关推荐

  1. 链接器lds文件简介

    lds后缀的文件是一个linker script,是一个链接器脚本文件.它用来描述链接器要如何链接生成一个目标执行文件,一般我们在编译C语言程序时,都不会创建lds文件,那是因为libc中已经暗含了链 ...

  2. U-Boot的LDS文件分析

    U-Boot.lds文件分析: OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32- ...

  3. 第64节:Java中的Spring Boot 2.0简介笔记

    Java中的Spring Boot 2.0简介笔记 spring boot简介 依赖java8的运行环境 多模块项目 打包和运行 spring boot是由spring framework构建的,sp ...

  4. Spring Boot - Thymeleaf模板简介以及集成

    文章目录 Spring Boot - Thymeleaf模板简介以及集成 1.什么是Thymeleaf? 2.标准表达式 2.1 变量表达式 2.2 选择表达式/星号表达式 2.3 URL表达式 2. ...

  5. 双系统启动boot.ini文件的秘密

    Windows NT类的操作系统,也就是Windows NT/2000/XP中,有一个特殊文件,也就是"BOOT.INI"文件,这个文件会很轻松地按照我们的需求设置好多重启动系统. ...

  6. 三代测序原理与数据文件简介(SMRT+Nanopore)

    三代测序原理与数据文件简介(SMRT+Nanopore) 一生雾梦 2019-12-03 20:48:42  1578  收藏 2 分类专栏: 前沿文献分析 文章标签: 三代测序(SMS) SMRT  ...

  7. 全志H3 uboot传参到内核分析,boot.scr文件分析

    传参过程 uboot倒计时结束,默认以bootcmd来启动内核,它等于 fatload mmc 0:1 ${scriptaddr} boot.scr; source ${scriptaddr} 上面两 ...

  8. 【Android 逆向】ELF 文件格式 ( ELF 文件简介 | ELF 文件结构 )

    文章目录 一.ELF 文件简介 二.ELF 文件结构 一.ELF 文件简介 ELF 文件是 Executable and Linkable Format ( 可执行 和 可链接 格式 ) 的文件 ; ...

  9. boot.asm文件注释

    ; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;                           ...

最新文章

  1. aix-syslog
  2. iBatis应用之获取表的元数据
  3. 根据json文件读取json信息
  4. JavaScript 验证API
  5. python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
  6. UAC绕过思路(未完)
  7. cam350怎么看顶层_CAM350软件怎么查看gerber文件 cam350导出gerber教程
  8. 国内的一个不错的ftp搜索引擎
  9. php 显示探针_X 探针(刘海探针)-免费开源 PHP 探针
  10. Mac连接Windows共享的老式打印机
  11. c语言max函数和min,使用函数获取值,查找max,查找min并以C语言显示
  12. Linux之nslookup命令使用详解—网络故障定位(一)
  13. VR全景智慧城市三维实景的建设和呈现目标
  14. 中南大学2019计算机研究生分数线,2019中南大学研究生分数线(含2016-2019历年复试)...
  15. mysql egt_ThinkPHP常用的运算符介绍eq|neq|gt|egt|lt|elt|heq|nheq
  16. 实现透明效果时,开启深度测试,关闭深度写入
  17. TikTok搬运视频怎么做,搬运怎样的视频最好
  18. 修改人人商城支付后报错“服务器暂时无法处理您的请求,请稍后重试“
  19. R语言实现单因素方差分析
  20. 为什么国产操作系统要基于linux,解说国产Linux操作系统为什么都模仿Windows桌面...

热门文章

  1. android 构造xml,android 中生成xml文件
  2. php 通知数据库,如何通过php通知我的iPhone应用程序名称已添加到数据库?
  3. java md5运算_java实现计算MD5
  4. android多屏应用程序,微软也尝试“多屏协同” Windows系统可以运行安卓程序
  5. python自己的模块_Python--构建发布自己的模块
  6. mysql 5.6.29.tar.gz_编译安装mysql5.6.29及安装报错的解决方法
  7. 二分法查找平方和_面试手撕系列:二分法
  8. sql中当前日期加2个月_一文搞定Mysql日期时间函数
  9. 写程序中的16张趣图。
  10. verilog对YCrCb转换灰度设计及仿真