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