硬件平台:飞思卡尔iMX258 ARM9 CPU +256MB的Nand Flash(uboot存放在此中)
首先通过uboot的链接文件,其中text段为uboot的代码段,:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
. = 0x00000000;
. = ALIGN(4); //于4个字节对齐
.text : //代码段
{
cpu/arm926ejs/ (.text)
*(.text)
}
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } //只读数据段
. = ALIGN(4);
.data : { *(.data) } //读写数据段
. = ALIGN(4);
.got : { *(.got) } //uboot特有段
. = .;
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) } //uboot命令段
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss (NOLOAD) : { *(.bss) . = ALIGN(4); } // bss段
_end = .;
}
,以这个文件为起点看uboot的启动流程。这里我通过一个图来说明这个过程。
由于iMX258内部具有有32KB的ROM(包括HAB)和128KB的RAM,在uboot加载前,CPU先运行iROM里面的一部分代码,这部分代码为芯片出厂时固化,它根据相关引脚的配置值(NF8BOOT or NF16BOOT为低)可以检测到CPU从外部Nand Flash进行引导,先copy 4KB的uboot代码()到NFC的内部RAM Buffer运行,copy完成后,会产生一个中断信号IPI_INT_NFC,以上过程CPU上电后就会自动执行。以下是时序图:
G870 uboot启动流程 来自淘豆网m.daumloan.com转载请标明出处.