uboot启动之uboot第二阶段(BL2)

本文详细分析了UBoot第二阶段的启动过程,包括硬件初始化、全局变量分配、内存布局、定时器初始化、串口与控制台设置、DDR内存配置以及自动更新功能等。通过对start_armboot函数的解读,揭示了UBoot如何准备进入命令行并为加载内核做好准备。
摘要由CSDN通过智能技术生成

uboot第二阶段分析主要是start_armboot的分析

一、这个函数是uboot/lib_arm/board.c的444行开始到908行结束。

    1、首先分析一下uboot第二阶段应该做些什么?

        (1)、第一阶段主要初始化SoC内部的一些部件(看门狗,时钟等)

        (2)、uboot第二阶段就是初始化剩下的还没被初始的硬件。(譬如iNand,网卡芯片....)、uboot本身的一些

         东西(uboot的命令、环境变量等....)。最终初始化完成必要的东西后进入uboot的命令行准备接收命令。

     2、uboot第二阶段完结于何处?

        (1)、uboot启动后自动运行打印出很多信息(这些信息就是uboot在第一和第二阶段不断进行初始化时,打印出

            来的信息)。然后uboot进入了倒数bootdelay秒然后执行bootcmd对应的启动命令。

        (2)、如果用户没有干涉则会执行bootcmd进入自动启动内核流程(uboot死掉);若你在bootdelay秒前按下回

            车则进入uboot命令行中,可以执行ubootcmd对应的命令。

        (3)、uboot的命令行就是一个死循环,循环体内不断重复:接收命令,解析命令,执行命令。这就是uboot最终

            的归宿。

    3、start_armboot解析

        (1)、typedef int (init_fnc_t) (void); 这是一个函数类型

        (2)、init_fnc_ptr是一个二重函数指针:二重指针的作用有2个(其中一个是用来 指向一重指针),一个是用来

         指向指针数组。因此这里的init_fuc_ptr可以用来指向一个函数指针数组。

    4、DECLARE_GLOBAL_DATA_PTR

        (1)#define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")

        定义了一个全局变量名字叫gd,这个全局变量是一个指针类型,占4字节。用volatile修饰表示可变的,用register

        修饰表示这个变量要尽量放到寄存器中,后面的asm("r8")是gcc支持的一种语法,意思就是要把gd放到寄存器r8中。

        (2)综合分析,DECLARE_GLOBAL_DATA_PTR就是定义了一个要放在寄存器r8中的全局变量,名字叫gd,类型是

        一个指向gd_t类型变量的指针。

        (3)为什么要定义为register?因为这个全局变量gd(global data的简称)是uboot中很重要的一个全局变量

      (准确的说这个全局变量是一个结构体,里面有很多内容,这些内容加起来构成的结构体就是uboot中常用的所有

        的全局变量),这个gd在程序中经常被访问,因此放在register中提升效率。因此纯粹是运行效率方面考虑,和功

        能要求无关。并不是必须的。

        (4)gd_t定义在include/asm-arm/global_data.h中。

        gd_t中定义了很多全局变量,都是整个uboot使用的;其中有一个bd_t类型的指针,指向一个bd_t类型的变量,

        这个bd是开发板的板级信息的结构体,里面有不少硬件相关的参数,譬如波特率、IP地址、机器码、DDR内存分布。

    5、为什么要分配内存

        (1)DECLARE_GLOBAL_DATA_PTR只能定义了一个指针,也就是说gd里的这些全局变量并没有被分配内存,

        我们在使用gd之前要给他分配内存,否则gd也只是一个野指针而已。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值