1. 课程导入与工程全景

在嵌入式 Linux 产品开发中,处理器上电后到操作系统接管之间,存在一段极其关键却又容易被忽视的“启动工程”。它决定了板卡能否在几百毫秒内稳定地把控制权交给内核,也决定了后续驱动、文件系统乃至应用能否正常工作。TI Sitara 系列处理器(AM335x、AM437x、AM57xx 等)广泛应用于工业 HMI、电力终端、医疗设备、车载网关等场景,其启动链路涉及 ROM Code、SPL、U-Boot、设备树、内核与根文件系统多个阶段。本课程围绕“U-Boot 与 BSP 启动工程”展开,帮助你把零散的启动知识串成一条可调试、可移植、可量产的工程主线。

一、Sitara 家族与启动工程的定位

Sitara 是 TI 面向工业与嵌入式市场的一类 ARM 处理器统称。AM335x 基于 Cortex-A8,主频常见 600MHz~1GHz,集成 PRU-ICSS、双千兆以太网、LCD 控制器,是 BeagleBone Black、工业网关的经典平台;AM437x 升级到 Cortex-A9,增加 Quad-SPI、更丰富的外设与安全启动能力;AM57xx 则是 Cortex-A15 + C66x DSP + PRU 的异构多核架构,面向机器视觉、工业通信等高性能场景。三者虽然性能不同,但启动哲学一致:芯片内部固化的 ROM Code 先运行,按启动介质顺序加载第一级引导程序,再由它初始化 DDR 等关键资源,最终把 U-Boot 和 Linux 内核拉起来。

U-Boot 在这条链路中扮演“引导加载器 + 板级初始化 + 镜像加载器”三重角色:它负责配置时钟、DDR、引脚复用,加载设备树与内核,传递启动参数,并提供命令行用于调试与烧录。BSP(Board Support Package)则是围绕具体板卡的一整套软件包,包含 U-Boot 板级配置、内核设备树、驱动补丁、文件系统与构建脚本。可以说,U-Boot 是启动的执行者,BSP 是启动的“施工图与材料清单”,两者缺一不可。

TI Sitara 启动工程全景:从 ROM Code 到 Linux 用户空间 ROM Code 芯片固化 介质探测 SPL / MLO DDR 初始化 时钟/PinMux U-Boot 板级初始化 镜像加载 Linux Kernel 设备树解析 驱动探测 RootFS init 进程 用户空间 应用 业务逻辑 服务运行 t=0 ~几十 ms ~几百 ms ~1 s ~2 s ~3 s+ BSP 支撑层(贯穿全启动链) U-Boot 板级配置 defconfig / dts / env DDR 参数 / 启动顺序 内核与设备树 board.dts / pinmux 驱动配置 / 时钟树 根文件系统 BusyBox / systemd 库 / 启动脚本 构建与烧录工具 Yocto / SDK / CCS SD / eMMC / UART 学习路线图:从理解到量产 ① 启动原理 ROM→SPL→U-Boot 各阶段职责 ② 环境搭建 SDK 安装 / 交叉编译 串口 / 网络调试 ③ U-Boot 移植 板级配置 / DDR 启动参数 / 镜像 ④ 内核与 DTS 设备树定制 驱动适配 ⑤ 量产部署 烧录 / 安全启动 OTA / 恢复

二、典型产品开发场景

以一台基于 AM335x 的工业 HMI 为例:硬件团队完成原理图与 PCB 后,软件团队需要让板子“跑起来”。第一步通常是从 TI 官网获取 Processor SDK,安装交叉编译工具链;第二步基于 BeagleBone Black 或 EVM 的 defconfig 建立自定义板级配置;第三步修改 DDR 参数与引脚复用,确保 SPL 能正确初始化内存;第四步调整 U-Boot 环境变量,指定内核、设备树与根文件系统的加载地址和启动命令;第五步编译内核与设备树,制作根文件系统;最后通过 SD 卡或 UART 烧录验证。整个过程不是线性的,而是“改配置—编译—烧录—看串口—再改”的迭代循环。

在这个过程中,最常遇到的启动故障包括:SPL 阶段卡死(多为 DDR 参数错误)、U-Boot 找不到内核(多为分区或加载地址错误)、内核启动后无控制台输出(多为设备树串口配置错误)、根文件系统挂载失败(多为 bootargs 中 root= 参数错误)。掌握这些故障与启动阶段的对应关系,是调试效率的分水岭。

三、本课程的知识地图

后续章节将沿着“原理—环境—移植—调试—量产”的主线展开。你会先理解 ROM Code 如何通过 SYSBOOT 引脚选择启动介质,再动手配置 SPL 的 DDR 初始化参数;随后深入 U-Boot 的 board_init_f、board_init_r 流程,学会添加自定义板级文件;接着掌握设备树的 pinmux、时钟与节点覆盖方法;最后完成从 SD 卡启动到 eMMC 量产烧录的完整闭环。每一章都会给出可操作的配置片段、命令与判断依据,而不是停留在概念层面。

学习建议:准备一块 BeagleBone Black 或 AM335x EVM、一根 USB 转 TTL 串口线、一张 8GB 以上 SD 卡。串口终端建议使用 115200-8-N-1,这是 Sitara 平台 U-Boot 与内核控制台的默认参数。每次修改配置后,先确认串口能打印 SPL 与 U-Boot 版本信息,再继续下一步,避免问题叠加。

四、关键概念速查

术语含义在启动中的位置
ROM Code芯片出厂固化的引导代码上电后最先执行,探测启动介质
SPL / MLO二级程序加载器,体积小初始化 DDR、时钟,加载 U-Boot
U-Boot通用引导加载器板级初始化、加载内核与设备树
DTS/DTB设备树源文件与二进制内核解析硬件拓扑,匹配驱动
BSP板级支持包贯穿 U-Boot、内核、文件系统
bootargs内核启动参数由 U-Boot 传给内核,含 root= 等

理解这张全景图后,你会发现启动工程并不是“一堆零散配置”,而是一条有明确阶段、明确输入输出、明确失败特征的链路。接下来,我们从最底层的 ROM Code 开始,逐段拆解这条链路。