u-boot.lds分析

不明白就去明白 不明白就去明白     2022-09-23     647

关键词:

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") /*指定输出的格式是32bits ARM 小端*/
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")指定输出的格式是32bits ARM 小端。
OUTPUT_FORMAT原型为 OUTPUT_FORMAT(default, big, little),在链接的时候,如果使用了-EB的命令行参数,则使用这里的big参数指定的字节序,
如果使用了-EL的命令行参数,则使用这里的little参数指定的字节序,如果没有使用任何命令行参数,则使用这里的default参数指定的字节序。
由uboot.lds中的定义可见,不管在链接的时候使用了何种命令行参数,输出的目标文件都是使用elf32-littlearm方式的字节序。
* OUTPUT_ARCH(arm)/*指出输出可执行文件的平台是arm*/ ENTRY(_start)/*指定输出可执行文件的起始代码段是_start,_start在cpu/arm920t/Start.S,
正的启动运行地址段在编译时在u-boot-1.1.6oard100ask24x0config.mk中由CONFIG_SYSTEXT_BASE宏定义,即TEXT_BASE = 0x33F80000
查看Makefile中的LDFLAGS变量,发现一条指令LDFLAGS += -Ttext $(TEXT_BASE) 
其中TEXT_BASE 是在u-boot根目录的board文件夹的对应的开发板名字的子目录下的config.mk文件中定义的0x33F80000*/
SECTIONS {
/*指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成*/ .
= 0x00000000;/*这里的点”.”,是定位器符号(GNU风格的一个典型),把定位器符号置为0x00000000 (若不指定, 则该符号的初始值为0)。
指定系统启动从偏移地址零处开始。注意这只是个代码地址偏移值,真正的起始地址是由编译时指定的LDFLAGS指定的。实际中改动这个值对输出没有影响
*/ . = ALIGN(4);/*调整定位符号,使其4字节对齐*/ .text :/*.text为段名,这段脚本的意思是将所有输入文件的.text section,
以及cpu/arm920t/start.o、 board/100ask24x0/boot_init.o 合并成一个.text section,该section的地址由定位器符号的值指定
*/
{ cpu
/arm920t/start.o (.text) board/100ask24x0/boot_init.o (.text) *(.text) } . = ALIGN(4);/*修改当前定位寄存器,使的下面的.rodata输出节与4bytes对齐,定义.rodata输出节为所有文件的.rodata输入节,*表示通配符,(.rodata*)为所有rodata开头的段。*/ .rodata : { *(.rodata) } . = ALIGN(4); .data : { *(.data) } . = ALIGN(4); .got : { *(.got) }/*指定got段, got段是uboot自定义的一个段, 非标准段*/ . = .; __u_boot_cmd_start = .;/*把__u_boot_cmd_start赋值为当前位置, 即起始位置*/ .u_boot_cmd : { *(.u_boot_cmd) } /*指定u_boot_cmd段, uboot把所有的uboot命令放在该段.*/ __u_boot_cmd_end = .; /*把__u_boot_cmd_end赋值为当前位置,即结束位置*/ . = ALIGN(4); __bss_start = .; /*把__bss_start赋值为当前位置,即bss段的开始位置*/ .bss : { *(.bss) } _end = .;/*把_end赋值为当前位置,即bss段的结束位置*/ }

 

u-boot启动流程---u-boot.lds(代码片段)

5.1u-boot.lds 链接脚本分析  uboot编译出来的第一个链接脚本就是执行u-boot.lds链接脚本,去掉里面无用的和没有定义的,进行分析。1/*配置头文件,自动生成的,包含芯片SOC相关的头文件*/2#include<config.h>3/*主要是做一些32... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情

linux系统移植:u-boot链接脚本(代码片段)

文章目录Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍二、u-boot.lds分析Linux系统移植:U-Boot链接脚本一、u-boot.lds介绍前面提到的U-Boot的本质就是一个大的裸机程序,执行的时候需要先找到程序入口,而程序的链接... 查看详情

armv8架构u-boot启动流程详细分析(代码片段)

1.u-bootarmv8链接脚本在进行源码分析之前,首先看看u-boot的链接脚本,通过链接脚本可以从整体了解一个u-boot的组成,并且可以在启动分析中知道某些逻辑是在完成什么工作。在armv8中,u-boot使用arch/arm/cpu/armv8/u-boot... 查看详情

buildroot构建项目---u-boot2017.11适配开发板修改1

...并不太适用。还得做一系列得修改。一、lds文件分析  u-boot中最重要得链接文件即是,u-boot.lds。我们可以查看我们编译出来得u-boot.lds文件进行分析,原始文件在arch/arm/cpu/下,编译出来得去掉了不想关得选项。  u-boot.lds脚... 查看详情

嵌入式linux8.链接脚本u-boot.lds(代码片段)

...序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下uboot,编译完成以后就会在uboot根目录下生成u-boot.lds文件,如图... 查看详情

嵌入式linux8.链接脚本u-boot.lds(代码片段)

...序的入口。如果没有编译过uboot的话链接脚本为arch/arm/cpu/u-boot.lds。但是这个不是最终使用的链接脚本,最终的链接脚本是在这个链接脚本的基础上生成的。编译一下uboot,编译完成以后就会在uboot根目录下生成u-boot.lds文件,如图... 查看详情

u-boot顶层目录链接脚本文件(u-boot.lds)介绍(*)

参考:U-Boot顶层目录链接脚本文件(u-boot.lds)介绍作者:一只青木呀发布时间:2020-10-2313:52:23网址:https://blog.csdn.net/weixin_45309916/article/details/109240625目录1、u-boot.lds文件2、arch/arm/l 查看详情

u-boot移植---修改前工作:代码流程分析1

一、代码执行总体流程图1.1代码路径 U-boot.lds(archarmcpu) vectors.S(archarmlib) start.S(archarmcpuarm920t) lowlevel_init.S(boardsamsungjz2440) crt0.S(archarmlib)relocate.S(archarmlib) 查看详情

u-boot移植---修改前工作:代码流程分析3---代码重定位

...链接时候的地址就会生成,然后存储在段里面,如下段(u-boot.lds):     查看详情

基于海思hi3516dv300的u-boot-2016.11分析(代码片段)

1.先看链接脚本文件u-boot.lds,文件位于u-boot-2016.11\arch\arm\cpu\armv7\hi3516dv300\hw_compressedOUTPUT_FORMAT("elf32-littlearm","elf32-littlearm","elf32-littlearm")OUTPUT_ARCH(arm)/*设置输出文件的架构体系为arm架构*/ENTRY(_star 查看详情

uboot源码简要分析

...关的文件。每个子目录中都包括cpu.c和interrupt.c、start.S、u-boot.lds。cpu.c:初始化CPU、设置指令Cache和数据Cache等interrupt.c:设置系统的各种中断和异常start.S:是U-boot启动时执行的第一个文件, 查看详情

uboot

查找文件位置1:U-boot有几千个文件,所以要通过makfile来查找文U-boot文件的入口。2:查看芯片的配置文件smdk24403:在board目录里面的sumsing目录里面查找smdk2440目录里面存放的就是开发板相关的配置文件,其中最重要的是名字叫u-bo... 查看详情

uboot移植之start.s分析

...ENTTRY的入口参数,我们这里的链接脚本在board/samsung/x210/u-boot.lds,这个文件里面的开头有一句ENTRY(_start),所以uboot的入口就是在_start这个标识的地方。 * Base codes by scsuh (sc.suh) *///x210_s 查看详情

u-boot之启动第一阶段(代码片段)

基于samsung的Exynos4412从链接脚本u-boot.lds中我们知道u-boot是从start.s这个汇编文件开始的,所以u-boot启动的第一阶段肯定也是从这里开始的,这个文件在cpu/arm_cortexa9/文件夹下,下面我们依照这个文件一步一步分析u-boot启动的第一阶... 查看详情

bootloader(代码片段)

...夹中->board文件夹->samsung文件夹->smdk2440文件夹->u-boot.lds;  在u-boot.lds中找到start文件的位置: (3)uboot文件夹->cpu文件夹->s3c24xx文件夹->start.S3第一阶段程序分析.globl_start_start:breset/*以下语句都是用来设置... 查看详情

嵌入式linux9.u-boot启动流程详解

1.reset函数源码从u-boot.lds中我们已经知道了入口点是arch/arm/lib/vectors.S文件中的_start,代码如下 第48行_start开始的是中断向量表,其中54~61行就是中断向量表,和我们裸机例程里面一样。54行跳转到reset函数里面,reset函数在arch/... 查看详情