u引导系统启动过程
大多数引导加载器分为stage1和stage2两大部分,u-boot也不例外。 依赖于CPU体系结构的代码(如设备初始化代码)通常放在stage1中,可以用汇编语言实现。 另一方面,stage2通常用c语言实施,提供复杂的功能,提高可读性和可移植性。
2.1stage1(start.s代码结构)。
u-boot的stage1代码通常放置在start.s文件中,并以汇编语言编写。 主要代码部分为以下:
)1)条目定义)由于可执行Image需要入口点,而且只有一个全局入口,因此该条目通常位于rom(flash )0x0地址。 因此,必须通知编译器知道这个条目。 可以通过修改连接器脚本来执行此操作。
)2)设定异常向量(Exception Vector )。
(3)设置CPU的速度、时钟频率和中断控制寄存器。
(4)存储器控制器初始化
)5)将ROM内的程序复制到RAM中。
(6)初始化堆栈
(7)传输到RAM执行。 此工作可以使用命令ldr pc完成。
2.2 stage2 C语言代码部分
lib_arm/board.c中的start_armboot是以c语言开头的函数,是整个启动代码中c语言的主函数,也是整个u-boot(armboot )的主函数。 此函数主要执行以下操作:
(1)调用一系列初始化函数。
)2)初始化闪存设备。
(3)初始化系统的内存分配函数。
)4)如果目标系统上有NAND设备,请初始化NAND设备。
)5)如果目标系统上有显示设备,则初始化该设备。
)6)初始化相关网络设备,填写IP、MAC地址等。
)7)进入命令环(即整个引导的工作环),接收用户通过串行端口输入的命令并进行相应的工作