Uboot 介绍

Uboot 官方
Uboot 在线源码
Uboot 参考手册
Uboot 下载地址

开源bootloader 软件,和mcu 里的bootloader 性致一样,主要加载操作系统,支持Linux、VxWorks、QNX、android

为何需要Uboot?
一般复杂系统,镜像比较大,像Linux 内核3 Mb 左右,芯片内部资源(ram)比较小,无法直接启动,需要加载到外部RAM运行,比如DDR 1G 内存,同时初使化一部份硬件,在加载内核之前提前处理一些事务。另外还支持多种升级功能,所以诞生了通用的bootloader

Uboot 分析

了解更多案例
很多企业都有自己的一套boot 设计,整体来讲是一个比较复杂的裸机程序

  • 源码下载编译

    1. Uboot 下载地址
      选择一个下载,比如 u-boot-2020.04.tar.bz2, 放在Linux环境下
      解压指令: tar xvf u-boot-2020.04.tar.bz2

    2. 选择一个开发板编译,这里选择 vexpress 开发板,在config 目录下查看支持的开发板

      • 设置编译工具
        export CROSS_COMPILE=arm-none-eabi-
        export ARCH=arm

      • 查看编译帮助
        make help

      • 编译并输出详细信息保存在build.log,编译结果放在out目录,通过分析 build.log 分析编译过程
        make vexpress_ca9x4_defconfig
        make 或者 make V=1 O=out | tee build.log

      • 生成文件
        u-boot elf文件
        u-boot.bin 二进制文件,烧写镜像
        u-boot.sym 符号表

  • 源码目录结构
    uboot 源码结构复杂,并非所有源码都会被编译,只有指定的CPU,电路板相关代码,公共代码 会被编译。这里介绍开发人员关注的目录。

    • arch
      支持多种cpu 架构,比如arm,mips,powerpc。 这里vexpress 开发板是ARM 架构
    • configs
      列出支持开发板的配制文件
    • board
      支持开发板相关的代码。这里编译 board/armltd/vexpress/*.c文件。
    • doc
      uboot 相关说明文档
    • cmd
      uboot 命令实现
    • common
      uboot 核心逻辑代码,包括 board_r.c main.c
    • scripts
      uboot 有用的脚本
    • test
      测试相关代码
    • tools
      工具类实现
    • 其它文件

流程分析

了解更多案例