基于u-boot2017和Rk3288产品板子
第一阶段:和架构相关的初始化
Start.S (/
arch/arm/cpu/armv7文件夹中)----------
-> bl
_main (start.S进入_main 入口在
\arch\arm\lib\crt0.S中
)------>
board_init_f
Start.S:保存重要寄存器、关闭中断、、初始化MMU、关看门狗等等
会跳出到其他文件夹执行例如:bowlevel_init()(关两只狗函数)
_main:
(相当重要)
建立C的执行环境,然后跳转至
board_init_f函数
================================================================================================
第二阶段:
板级
的初始化
_main (arch/arm/lib/crt0.S) ---->
board_init_f
(
位于\arch\arm\mach-omap2\hwinit-common)
-->
init_sequence_f (位于/common/board_f.c
会回调
一系列函数
)
---> (回到_main) 调用
board_init_r
( 位于common\spl\spl.c
)
--> init_sequence_r (位于/common/board_r.c会回调一系列函数)
-->
run_main_loop
(在
/common/board_r.c中
)
-->
main_loop
(common\main.c)
board_init_f:
![](https://i-blog.csdnimg.cn/blog_migrate/8102f2c8ff7e705ccfe15eda06e47185.jpeg)
其中sdram_init()是初始化SDRAM的关键代码,其调用关系如下:
Board_init_f--àhw_data_init() --àearly_system_init()àsdarm_init()
/
/初始化SDRAM
borad_init_r:(重要)
(位于common\spl\spl.c
):调用init_sequence_r执行内部函数完成:
初始化
NORFLASH, NANDFLASH,
初始化
ONENAND FLASH
初始化环境变量
初始化
PCI
设置
IP
地址
初始化各类外 设
:IIC
、
LCD
、键盘、
USB
初始化控制台
建立
IRQ
中断堆栈
初始化以太网
初始化跳转表(定义了
U-Boot
中基本的常用函数库)
![](https://i-blog.csdnimg.cn/blog_migrate/10912871f6c2e6ba4929e46671ac87ab.png)
遍历laoder,看哪个laoder和设备匹配,
将u-boot.img加载到内存,并进行解析
。
![](https://i-blog.csdnimg.cn/blog_migrate/743d3b9aa476b0c39c6bd6360c1aea03.png)
当镜像加载到内存时,此时SPL进行判断,加载的镜像时u-boot还是kernel然后便跳转到镜像的入口中进行执行。此时SPL的使命
便完成了.
通过验证,就board_init_r函数而言,在SPL中链接向SPL.c中的board_init_r函数,
而在u-boot中,是链接向board_r.c中的board_init_r函数,那么我就从board_init_r函数入手,
在board_init_r函数实现一个死循环,但是发现还是有信息能够输出,说明在board_init_r还进行了初始化的工作。
其实在board_init_f中都已经
链接在别的文件中
了,他是
位于board_f.c文
件中
![](https://i-blog.csdnimg.cn/blog_migrate/a121f96b50a521601f641aaf9e86821b.png)
init_sequence_f :
函数中最关键的是initcall_run_list(init_sequence_f);
init_sequence_r
:
initcall_run_list(
init_sequence_r);
![](https://i-blog.csdnimg.cn/blog_migrate/609965a35a20795d4b6d65000f0b268a.png)
这个数组的作用就是一个个的按顺序去调用这个数组里的函数。
main_loop: U-boot启动管理函数,关键函数
u-boot工作内容:
![](https://i-blog.csdnimg.cn/blog_migrate/e0e496ee7ac41d777b90eb06bc2e73ba.png)
U-boot存储器映射
![](https://i-blog.csdnimg.cn/blog_migrate/c356d6cf19aa9556590cbd8daa92a51c.png)
整体启动框架
![](https://i-blog.csdnimg.cn/blog_migrate/624c336856caad367df4c4ddcee10365.jpeg)