uboot启动流程

Posted 四季帆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uboot启动流程相关的知识,希望对你有一定的参考价值。

1. S5pv210 uboot启动分析

版本号:1.3.4

1.1 分析uboot顶层目录下的连接脚本 u-boot.lds

OUTPUT_ARCH(arm)
ENTRY(_start)      //指定uboot的入口
······

1.2 S5pv210 uboot主脉络

.globl _start(uboot/cpu/s5pv210/start.S)
    -->cpu_init_crit
		-->lowlevel_init(uboot/board/samsung/x210/lowlevel_init.S)
            -->start_armboot(lib_arm/board.c)
                    -->for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
                    -->main_loop()  //进入死循环  

2. exynos4412 uboot主脉络

这个版本的uboot流程总结,是我根据网络上别人的分析归纳总结的,我自己没有这份源码,所以我不知道这个uboot的版本号。

.globl _start(uboot/arch/arm/cpu/armv7/start.S)
	-->cpu_init_crit
		-->lowlevel_init(uboot/arch/arm/cpu/armv7/lowlevel_init.S)
	-->_main(uboot/arch/arm/lib/crt0.S)
		-->board_init_f(uboot/arch/arm/lib/board.c)
			-->for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) //遍历执行init_sequence数组
		-->board_init_r(uboot/arch/arm/lib/board.c)
			-->main_loop() //进入死循环

3. Imx6dl uboot主脉络

版本号:2014.04

.globl _start(uboot/arch/arm/cpu/armv7/start.S)
	-->cpu_init_crit
		-->lowlevel_init(uboot/arch/arm/cpu/armv7/lowlevel_init.S)
	-->_main(uboot/arch/arm/lib/crt0.S)
		-->board_init_f(uboot/common/board_f.c)
			-->initcall_run_list(init_sequence_f)
		-->board_init_r(uboot/common/board_r.c)
			-->initcall_run_list(init_sequence_r)
				-->run_main_loop(数组最后一项)
					-->main_loop(进入死循环)

3.1 陷阱

在这份源码中【arch/arm/lib/board.c】和【common/board_f.c】都存在,所以一开始的时候小编还分析错了,后来根据打印信息才慢慢找到正确调用流程和路径。在这份源码中,前者并没有被编译为.o文件。

 

总结

本章归纳总结了三个不同SOC对应的uboot启动流程,从总体的流程上来看,不同版本、不同SOC的uboot启动过程大同小异,其中这一小部分的不同,可能是因为uboot架构升级导致的,也可能是SOC厂商做了改动。

仔细对比三个版本的uboot可以发现,其实在代码主体上没有特别大的变动,主要不同在于函数调用的位置有所变化,函数内容有点儿变化。所以研究一两个uboot之后,就熟悉它的套路了,熟悉以后,有改动的地方经过研究源码也可以比较快地理解。

版本越新,分层却多了,很明显的可以感觉到1.3.4版本和后面两个版本相比,前者在一个函数中实现的功能,在后者里面分成了两部分,这样做有什么深意呢?我个人认为是为了将函数变短,使一个函数没那么长、易读、易理解,层次也更清晰,比如需要提前初始化的部分就放到第一部分进行初始化,其余的放到第二部分进行初始化。在1.3.4版本中的start_armboot()函数有接近500行(如下图,该函数折叠以后的样子,444行到909行,有没有吓到你?),我觉得分两段还不够,哈哈哈!

 

以上是关于uboot启动流程的主要内容,如果未能解决你的问题,请参考以下文章

系统篇: uboot 启动流程

系统篇: uboot 启动流程

uboot研读笔记 | 14 - uboot启动流程分析(2016.03版本)

展讯平台uboot启动流程

uboot启动流程

新版本uboot启动流程分析