start.S代码结构 u-boot的stage1代码一般放在start.S文件中,用汇编语言,主要实现功能以下: 网络
(1) 定义入口: 该工做经过修改链接器脚原本完成。 函数
(2)设置异常向量(Exception Vector)。 code
(3)设置CPU的速度、时钟频率及终端控制寄存器。内存
(4)初始化内存控制器。 it
(5)将ROM中的程序复制到RAM中。 io
(6)初始化堆栈。 ejs
(7)转到RAM中执行,该工做可以使用指令ldr pc来完成。循环
bl lowlevel_init
跳转到arm926ejs里面的spl.c
终端
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)