Linux 基础入门操作 第十四章 .U-Boot 编译 1

1 U-Bboot 编译

1.1 UBOOT 介绍

U-Boot,全称 Universal Boot Loader,是遵循 GPL 条款的开放源码项目。从 FADSROM、8xxROM、PPCBOOT 逐步发展演化而来。其源码目录、编译形式与 Linux 内核很相似,事实上,不少 U-Boot 源码就是相应的 Linux 内核源程序的简化,尤其是一些设备的驱动程序,这从 U-Boot 源码的注释中能体现这一点。但是 U-Boot 不仅仅支持嵌入式 Linux系统的引导,当前,它还支持 NetBSD, VxWorks, QNX, RTEMS, ARTOS,LynxOS 嵌入式操作系统。其目前要支持的目标操作系统是 OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux,SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。这是 U-Boot 中Universal 的一层含义,另外一层含义则是 U-Boot除了支持 PowerPC系列的处理器外,还能支持 MIPS、x86、ARM、NIOS、XScale 等诸多常用系列的处理器。这两个特点正是 U-Boot 项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。

就目前来看,U-Boot 对 PowerPC 系列处理器支持最为丰富,对 Linux 的支持最完善。其它系列的处理器和操作系统基本是在 2002 年 11 月 PPCBOOT 改名为U-Boot 后逐步扩充的。从 PPCBOOT 向 U-Boot 的顺利过渡,很大程度上归功于 U-Boot 的维护人德国 DENX 软件工程中心 Wolfgang Denk[以下简称 W.D]本人精湛专业水平和持着不懈的努力。当前,U-Boot 项目正在他的领军之下,众多有志于开放源码 BOOT LOADER 移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。

1.2 选择 U-Boot 的理由

①开放源码;
②支持多种嵌入式操作系统内核,如 Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS;
③支持多个处理器系列,如 PowerPC、ARM、x86、MIPS、XScale;
④较高的可靠性和稳定性;
④较高的可靠性和稳定性;
⑤高度灵活的功能设置,适合 U-Boot 调试、操作系统不同引导要求、产品发布等;
⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦较为丰富的开发调试文档与强大的网络技术支持

1.3 U-Boot 的主要功能

硬件初始化:初始化 CPU、内存控制器、串口、网络接口、存储设备(如 NAND、SD 卡、SPI Flash)。

引导操作系统:从各种存储设备(NAND、NOR Flash、SD 卡、网络)加载 Linux 内核镜像(如 zImage、uImage、FIT 等)。

环境变量管理:保存和修改启动参数,比如内核启动命令行参数(bootargs)。

网络启动:支持 TFTP 下载内核和文件系统,实现网络引导。

命令行接口:提供丰富的命令用于调试和配置。

支持多种文件系统:如 FAT、EXT 等,用于访问存储设备中的文件。

二级引导:可以加载其他引导程序。

1.4 U-Boot 在 Linux 系统中的应用

  1. 引导 Linux 内核

嵌入式设备上,CPU 上电后首先执行 U-Boot,U-Boot 初始化硬件后加载 Linux 内核镜像(通常是压缩格式的 zImage 或 uImage),再将控制权转交给内核。

  1. 传递启动参数

U-Boot 会通过环境变量设置内核启动参数(bootargs),如根文件系统位置(root=)、控制台信息(console=)、网络配置等。这些参数会传递给 Linux 内核,决定系统启动行为。

  1. 加载设备树(Device Tree Blob, DTB)

对于 ARM 等架构,U-Boot 负责加载设备树文件(*.dtb),告诉 Linux 内核硬件设备信息,实现内核与硬件的解耦。

  1. 启动文件系统

U-Boot 可以加载文件系统镜像(如 initramfs、根文件系统),也可以设置内核从网络或存储设备挂载根文件系统。

  1. 系统恢复和升级

利用 U-Boot 的命令行和环境变量功能,可以实现系统升级(刷写新内核、文件系统)、救援模式(进入命令行手动修复),提高设备的可靠性和可维护性。

  1. 调试

U-Boot 的串口调试功能和命令行允许开发者在内核启动前检查硬件状态、手动加载镜像,便于开发和调试。

1.5 下载地址

git clone https://github.com/u-boot/u-boot.git

官方介绍界面

2 具体代码介绍

2.1 U-Boot 主要目录结构

Linux 基础入门操作 第十四章 .U-Boot 编译 1_第1张图片

2.2 文件夹介绍

主要目录如下:

  • api 存放 u-boot 提供的接口函数;
  • arch 与体系结构相关的代码全部放在这里,例如 arm、x86、powerpc;
  • board 目标板相关文件,根据不同开发板定制的代码,主要包含 SDRAM、FLASH 驱动;
  • cmd 存放 uboot 常用的指令,比如 fastboot、boot、mmc、md、go 等;
  • common 独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
  • configs 配置文件,根据不同的处理器有不同的配置;
  • disk 磁盘分区相关代码;
  • doc U-Boot 的说明文档;
  • drivers 通用设备驱动,如 CFI FLASH 驱动(目前对 INTEL FLASH 支持较好);
  • dts 设备树相关代码;
  • examples 可在 U-Boot 下运行的示例程序;如 hello_world.c,timer.c;
  • fs 文件系统,支持嵌入式开发板常见的文件系统;
  • include U-Boot 头文件;
  • lib 通用库文件;
  • net 与网络功能相关的文件目录,如 bootp,nfs,tftp;
  • post 上电自检文件目录;
  • tools 用于创建 U-Boot S-RECORD 和 BIN 镜像文件的工具

2.3 文件介绍

主要文件如下:

  • Makefile 编译时需要的主文件,在子目录也有这样的文件。
  • README u-boot 使用说明。
  • configs/imx8mm_evk_defconfig 原始的配置文件。
  • .config 裁剪后的配置文件。
  • arch/arm/dts/fsl-imx8mm-evk.dts 设备树文件。
  • u-boot-nodtb.bin、spl/u-boot-spl.bin、arch/arm/dts/fsl-imx8mm-evk.dtb uboot 镜像,包含 3 个文件

你可能感兴趣的:(Linux 基础入门操作 第十四章 .U-Boot 编译 1)