链接脚本u-boot.lds、Systemp.map和u-boot.map分析

  • 1、u-boot.lds
  • 2、System.map和u-boot.map

1、u-boot.lds

以下为IMX6ULL的u-boot.lds源文件:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{. = 0x00000000;. = ALIGN(4);.text :{*(.__image_copy_start)*(.vectors)arch/arm/cpu/armv7/start.o (.text*)*(.text*)}. = ALIGN(4);.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }. = ALIGN(4);.data : {*(.data*)}. = ALIGN(4);. = .;. = ALIGN(4);.u_boot_list : {KEEP(*(SORT(.u_boot_list*)));}. = ALIGN(4);.image_copy_end :{*(.__image_copy_end)}.rel_dyn_start :{*(.__rel_dyn_start)}.rel.dyn : {*(.rel*)}.rel_dyn_end :{*(.__rel_dyn_end)}.end :{*(.__end)}_image_binary_end = .;. = ALIGN(4096);.mmutable : {*(.mmutable)}.bss_start __rel_dyn_start (OVERLAY) : {KEEP(*(.__bss_start));__bss_base = .;}.bss __bss_base (OVERLAY) : {*(.bss*). = ALIGN(4);__bss_limit = .;}.bss_end __bss_limit (OVERLAY) : {KEEP(*(.__bss_end));}.dynsym _image_binary_end : { *(.dynsym) }.dynbss : { *(.dynbss) }.dynstr : { *(.dynstr*) }.dynamic : { *(.dynamic*) }.plt : { *(.plt*) }.interp : { *(.interp*) }.gnu.hash : { *(.gnu.hash) }.gnu : { *(.gnu*) }.ARM.exidx : { *(.ARM.exidx*) }.gnu.linkonce.armexidx : { *(.gnu.linkonce.armexidx.*) }
}

入口函数为_start,(_start函数内容很多,以后分析)SECTIONS描述了文件的内存布局,所有文件的不同段一次放入text、data、rodat、bss等。

2、System.map和u-boot.map

u-boot 2016.03版本在编译之后会在其顶级目录中生成System.map和u-boot.map两个文件
Systemp.map文件部分截图如下,该文件按链接地址由小到大的顺序列出了所有符号。

由上面信息可知, _start 符号被链接在最前面的地址 0x87800000 ,它是U-Boot的入口。SDRAM初始化完成 后,需要将U-Boot加载到上述地址(SDRAM初始化前,U-Boot在Nor Flash或者芯片内部RAM中运行)。

u-boot.map文件部分截图如下,该文件包含了链接过程中涉及的目标文件将其所依赖的库文件,然后所链接的目标文件的先后顺序列出各目标文件中各符号所链接的地址。


u-boot.lds文件分析才是万一长征第一步,加油!!!

IMX6ULL-UBOOT分析(1):链接脚本u-boot.lds、Systemp.map和u-boot.map分析相关推荐

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

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

  2. imx6ull:uboot的make xxx_defconfig 过程分析

    相关代码 414 # To make sure we do not include .config for any of the *config targets 415 # catch them ea ...

  3. RT1176-2(链接脚本)

    从链接脚本开始. 以hello_world工程为例:构建完工程打开Debug目录下的evkmimxrt1170_hello_world_demo_cm7_Debug.ld . INCLUDE &quo ...

  4. STM32链接脚本STM32F407ZETx_FLASH.ld

    目录 环境 参考 链接脚本简介 STM32F407ZETx_FLASH.ld文件分析 控制输出文件中内存布局 SECTIONS 环境 代码:STM32CUBEMX-linux版V6.5.0 + STM ...

  5. FreeNOS-kernel目录下boot.S、链接脚本kernel.ld文件分析(四)

    上节提到过引导程序在将控制权交给内核时,相关寄存器状态已确定,并且程序入口地址为boot.S文件中的_start,下个面就来看看boot.S文件. kernel目录下文件如下: 其中Sconscrip ...

  6. uboot.lds链接脚本分析

     LDFLAGS += -Bstatic -T /board/smdk2410/u-boot.lds -Ttext 0x33F80000中-Ttext 0x33F80000是指定代码段text的首地址 ...

  7. U-Boot 之五 详解 U-Boot 及 SPL 的链接脚本、启动流程

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,在之前的博文 Linux 之八 完整嵌入式 Linux 环境.(交叉)编译工具链.CPU 体系架构.嵌入式系统构建工具 中详细介绍了嵌 ...

  8. STM32跑MicroPython的链接脚本分析

    一.链接脚本的简单常识   有时候我们很多文件需要链接到指定的区域,或者叫做段里面,比如在 Linux 里面初始化函数就会放到 init 段里面.因此我们需要能够自定义一些段,这些段的起始地址我们可以 ...

  9. imx6ull:uboot顶层Makefile分析

    版本号 MAKEFLAGES变量 20 MAKEFLAGS += -rR --include-dir=$(CURDIR) Makefile有两个特殊的变量:"SHELL"和&quo ...

最新文章

  1. easyui的datagrid
  2. 简单时间复杂度大O记法
  3. 什么是公网IP、内网IP和NAT转换?
  4. 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
  5. 53.连续分区分配vs分连续分区分配
  6. 你知道钓鱼网站的形成步骤吗?一次网络钓鱼演练带你了解(增强安全意识)
  7. 【通俗易懂】C语言中,for循环中i++与++i的区别
  8. 【剑指offer】——【python中return函数中的and和or表达式的返回值】
  9. 17 张程序员专属壁纸,有你喜欢的吗?
  10. 笨办法学 Python · 续 第四部分:进阶项目
  11. 【JAVA】Maven profiles控制多环境数据源日志打包(转载)
  12. 用网速作为手机信号强度
  13. C# 自定义控件基础知识
  14. Oracle数据库进行简单优化,Oracle数据库性能优化
  15. ppt如何替换其他mo ban_超实用办公软件小技巧之PPT~
  16. 显示器3d测试软件,IPS显示屏/裸眼3D显示原理及3D应用
  17. Linux 之系统美化
  18. m.2槽分类_什么是M.2扩展槽,如何使用?
  19. 【反演复习计划】【COGS2433】【bzoj3930,CQOI2015选数】爱蜜莉雅的冰魔法
  20. text-overflow属性的使用

热门文章

  1. k8s节点变为NotReady状态
  2. 联想V310-14ISK硬件升级
  3. wamp打开之后变黄色
  4. torch.diag_embed代码测试
  5. 【共享农场】智慧农业众筹,共享农场土地租赁,家禽认养小程序源码UI设计功能
  6. Linux系统编程(三) --进程间通信
  7. 内存转储文件调试系统崩溃bug
  8. SCHURTER推出微型高性能三相电源滤波器
  9. 【Database System Concept 7th】Chapter 2读书笔记
  10. 拼多多告诉你,什么才是百分比