展讯平台uboot启动流程

时间:2020-01-13 19:10:00 来源:互联网 作者: 神秘的大神 字体:

启动流程

1、 Stage1

start.S代码结构 u-boot的stage1代码通常放在start.S文件中,用汇编语言,主要实现功能如下: 

(1) 定义入口: 该工作通过修改连接器脚本来完成。 

(2)设置异常向量(Exception Vector)。 

(3)设置CPU的速度、时钟频率及终端控制寄存器。

(4)初始化内存控制器。 

(5)将ROM中的程序复制到RAM中。 

(6)初始化堆栈。 

(7)转到RAM中执行,该工作可使用指令ldr pc来完成。

bl lowlevel_init跳转到arm926ejs里面的spl.c

2、Stage2

C语言代码部分 lib_arm/board.c中的start arm boot是C语言开始的函数也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数只要完成如下操作:

(1)调用一系列的初始化函数。

(2)初始化Flash设备。 

(3)初始化系统内存分配函数。 

(4)如果目标系统拥有NAND设备,则初始化NAND设备。 

(5)如果目标系统有显示设备,则初始化该类设备。
//LCM 

(6)初始化相关网络设备,填写IP、MAC地址等。 

(7)进去命令循环(即整个boot的工作循环),接受用户从串口输入的命令,然后进行相应的工作。

u-boot\arch\arm\cpu\armv7\start.S
.globl _start
_start: b reset
… …
jump_2_ram:
… …
_board_init_r_ofs:
.word board_init_r - _start    //调用 uboot/arch/arm/lib/ board.c 是C 语言开始的函数也是整个启动代码中C语言的主函数,进入Stage2

u-boot\arch\arm\lib\board.c

一、初始化硬件

board_init_r() (u-boot15/arch/arm/board.c)
————>board_init()(sl8541e_1h10.c)
————>stdio_init()  
————>drv_lcd_init()  (common/lcd.c)