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

2019-07-12 16:14发布

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通过标记列表向内核传递参数。