[IMX6Q]flash_header.S分析

本文介绍了u-boot版本v2009.08在IMX6Q平台上启动过程,特别是flash_header.S的作用。内容涉及到链接脚本u-boot.lds和Program Image的概念。在系统上电后,ROM读取并执行flash_header.S,初始化DDR并加载u-boot到内存中。虽然没有直接的ROM代码分析,但通过修改TEXT_BASE观察系统仍能正常运行,推测ROM可能依据boot_data_ptr来确定u-boot的运行地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

u-boot版本: v2009.08


在分析代码前,我们需要先了解两个知识点。

1. 链接脚本

路径: uboot-imx/board/freescale/mx6q_sabresd/u-boot.lds

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
	. = 0x00000000;

	. = ALIGN(4);
	.text	   :
	{
	  /* WARNING - the following is hand-optimized to fit within	*/
	  /* the sector layout of our flash chips!	XXX FIXME XXX	*/
	  board/freescale/mx6q_sabresd/flash_header.o	(.text.flasheader)
	  cpu/arm_cortexa8/start.o
	  board/freescale/mx6q_sabresd/libmx6q_sabresd.a	(.text)
	  lib_arm/libarm.a		(.text)
	  net/libnet.a			(.text)
	  drivers/mtd/libmtd.a		(.text)
	  drivers/mmc/libmmc.a		(.text)

	  . = DEFINED(env_offset) ? env_offset : .;
	  common/env_embedded.o(.text)

	  *(.text)
	}
......
}

有看到flash_header.S被作为u-boot运行的第一个文件,而不是start.S,请注意这点。


2. Program Image

听标题名字有点抽象,其实就是IMX平台内部自带ROM, 然后CPU从ROM开始运行,接着ROM会读取u-boot,

它需要知道当前u-boot的信息,所以默认规定了编译出来都需要一个所谓的Program Image, 由以下几部分组成:




Program Image的布局格式如下:


格式说明如下:


从上面第一条分析可知,ROM会先去执行flash_header.S里,来看flash_header.S.

#include <config.h>
#include <asm/arch/mx6.h>

#ifdef	CONFIG_FLASH_HEADER
#ifndef CONFIG_FLASH_HEADER_OFFSET
# error "Must define the offset of flash header"
#endif

#define CPU_2_BE_32(l) \
       ((((l) & 0x000000FF) << 24) | \
	(((l) & 0x0000FF00) << 8)  | \
	(((l) & 0x00FF000
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值