[xboard]11 uboot通用启动流程
文章目录
-
-
- 一 入口地址
- 二 _start定义
- 三 reset详细分析
- 四 lowlevel_init.S实现
- 五 _main实现
-
- 宏观概念
- 细节分析
- 六 loop_main实现
- 七 引导内核
- 参考
-
一 入口地址
程序的入口,即程序的第一行执行程序,由程序的链接脚本决定,一般位于arch/arm/cpu/u-boot.lds
最开始的代码,如下所示:
1 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") 指定
2 OUTPUT_ARCH(arm)
3 ENTRY(_start)
4 SECTIONS
5 {
6 . = 0x00000000;
7
8 . = ALIGN(4);
9 .text :
10 {
11 *(.__image_copy_start)
12 *(.vectors)
13 CPUDIR/start.o (.text*)
14 }
其中:
- 第1行,指定输出文件的格式
- 第2行,指定输出文件的目标架构为ARM
- 第3行,定义程序的入口点是_start符号
- 第6行,设置当前位置计数器的初始值为0x000000
- 第8行,定义段地址是4字节对齐
- 第9行,定义.text段,即代码段,程序的执行代码
- 第11行,包含所有__image_copy_start段的内容,该段定义在
…/arch/arm/lib/sections.c:23:char __image_copy_start[0] attribute((section(“.__image_copy_start”)));
即定义了一个