首先分析 u-boot-spl.lds 链接文件 该文件决定了一个可执行程序的各个段的存储位置 及入口地址
文件内容如下:
MEMORY {
.sram : ORIGIN = CONFIG_SPL_TEXT_BASE,\
LENGTH = CONFIG_SPL_MAX_SIZE }
MEMORY {
.sdram : ORIGIN = CONFIG_SPL_BSS_START_ADDR, \
LENGTH = CONFIG_SPL_BSS_MAX_SIZE }
/* 内存分配 起始地址 和长度 */
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/* 定义输出文件格式为elf 32位 小端模式 */
OUTPUT_ARCH(arm)
/* 文件可用平台为ARM */
ENTRY(_start)
/* 文件入口 */
SECTIONS
{
.text :
{
__start = .;
arch/arm/cpu/armv7/start.o (.text)
*(.text*)
} > .sram
/* 代码段 存储在SRAM中 具体的入口程序在文件arch/arm/cpu/armv7/start.S中 */
. = ALIGN(4);
.rodata : {
*(SORT_BY_ALIGNMENT(.rodata*)) } >.sram
/* 4字节对齐 只读数据段 存储在SRAM中 */
. = ALIGN(4);
.data : {
*