嵌入式Linux开发——(十一)u-boot源码分析

1、U-Boot的特性:

    ①开放源码

    ②支持多种嵌入式操作系统内核:Linux、NetBSD、VxWorks、QNx、RTEMS、ARTOS、 LynxOS

    ③支持多种架构的CPU:PowerPC、ARM、x86、MIPS、XScale

    ④丰富的设备驱动源码,如:串口、以太网、SDRAM、Flash等

    ⑤支持的目标板环境变量多种存储方式:Flash、EEPROM、RAM

    ⑥CRC32检验,检验Flash中内核,RAMDISK镜像是否损坏

    ⑦上电自检功能:SDRAM、FLASH大小检测、故障检测,CPU型号

    ⑧特殊功能:XIP内核引导

      获取最新U-Boot网址:http://sourceforge.net/project/U-Boot

2、U-Boot源码结构(基于U-Boot-1.1.6)

    1)U-Boot-1.1.6根目录下共有26个子目录,可分为4类

        ①平台相关的或开发板相关的

        ②通用的函数

        ③通用设备驱动程序

        ④U-Boot工具示例程序、文档

          相应文件夹:

 

 

    2)“CONFIG_”除了设置一些参数外,主要用来设置U-Boot的功能,选择使用文件的哪一部分。而“CFG_”用来设置细节的参                数。

3、U-Boot编译流程

 

4、U-Boot的启动过程源码分析

    1)U-Boot第一阶段代码分析

       文件:cpu/arm920t/start.S   和   board/smdk2410/lowlevel_init.S

        ①硬件设备初始化:设置为管理模式(SVC)、关闭WATCHDOG、设置时钟、 关闭MMU、CACHE

        ②为加载Bootloader的第二阶段代码尊卑RAM空间:初始化内存芯片,使它使能

        ③复制整个U-Boot代码到SDRAM空间中

        ④设置好栈

            栈的设置灵活性很大,只要让SP寄存器指向一段没有被使用的内存即可。

        ⑤跳转到第二阶段代码的C入口点

            在跳转之前,还要清楚BSS段(初始值为0,无初始值的全局变量、静态变量)。

    2)U-Boot第二阶段代码分析

       文件:Lib_arm/board.c  中 start_armboot函数开始。

       ①初始化本阶段用到的硬件设备

          最主要是设置系统时钟、初始化串口。

      ②检测系统内存映射(memory map)

      ③U-Boot命令的格式

         即使是内核的启动,也是通过U-Boot命令来实现的,U-Boot中每个命令都是通过U_BOOT_CMD宏来定义。

         U_BOOT_CMD(name,  maxargs,  repetable,  command, “usage”, “help”)

     ④为内核设置启动参数

        Boot通过标记列表向内核传递参数。

 

猜你喜欢

转载自blog.csdn.net/qq_38677310/article/details/82634511