uboot启动分两个阶段:
第一阶段:1.初始化CPU、内存
2.为加载bootloader的stage2准备RAM空间
3.拷贝bootloader的stage2代码到RAM空间
4.设置好堆栈
5.跳转到stage2的C入口点
第二阶段:1.初始化本阶段要使用的硬件设备
2.将内核映像和根文件系统映像从flash上读到RAM中,为内核设置启动参数
3.加载内核
Uboot.lds分析:
文件路径/home/mingming/ezsdk/board-support/u-boot-2010.06-psp04.07.00.02/arch/arm/cpu/arm_cortexa8/uboot.lds
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") //指定输出可执行文件是elf格式,32位ARM指令,小端模式
OUTPUT_ARCH(arm)//定义输出的架构为 arm 体系结构
ENTRY(_start)//u-boot 的入口地址为 _start ,定义在 /arch/arm/cpu/arm_cortexa8/start.S
SECTIONS
{
. = 0x00000000;
. = ALIGN(4);
.text :
{
arch/arm/cpu/arm_cortexa8/start.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) }
_end = .;
}