第三章:源码获取与配置

好,咱们进入实战环节。这一章我带你走一遍U-Boot开发的标准流程——从拿到源码,到配置好单板。说白了,就是让U-Boot知道「我要为哪个硬件干活」。

3.1 从官方仓库获取源码

我个人习惯直接从U-Boot的官方Git仓库拉代码。为什么?因为你能拿到最新的提交记录、分支信息,出了问题也好回溯。

官方仓库地址:https://source.denx.de/u-boot/u-boot.git

克隆命令很简单:

git clone https://source.denx.de/u-boot/u-boot.git
cd u-boot

嗯,这里有个小细节。如果你在公司内网,或者网络不太好,可以加个 --depth=1 参数,只拉取最新版本,省时间:

git clone --depth=1 https://source.denx.de/u-boot/u-boot.git

我曾经在客户现场演示时,网络慢得让人抓狂。后来学乖了,提前把仓库打包成tar.gz带过去。你想想看,现场翻车多尴尬。

拉完代码后,我建议你切到一个稳定的发布版本。别用master分支,那上面可能正在开发新功能,稳定性没保障:

git tag -l 'v2024*'   # 看看有哪些发布标签
git checkout v2024.01 # 切到2024年1月的稳定版

3.2 配置单板——defconfig

U-Boot支持几百种单板。怎么找到你的板子?看 configs/ 目录下的defconfig文件:

ls configs/ | grep -i 'stm32'  # 找STM32相关的配置

找到后,直接加载配置:

make stm32mp15_defconfig

这个命令做了什么?说白了,就是把 configs/stm32mp15_defconfig 文件里的配置项,写入到顶层的 .config 文件中。.config 就是U-Boot编译时的「宪法」,所有模块的开关都在里面。

我的小技巧:如果你用的是自己设计的板子,可以复制一个最接近的defconfig,然后改名字。比如 cp configs/stm32mp15_defconfig configs/myboard_defconfig,再手动修改里面的内容。

3.3 menuconfig——图形化配置

defconfig只是基础配置。很多时候你需要微调,比如打开某个驱动、调整内存大小。这时候就用 menuconfig:

make menuconfig

它会弹出一个图形界面(前提是你的终端支持ncurses)。界面分三层:

  • 主菜单:按功能分类,比如Device Drivers、Networking Support
  • 子菜单:点进去,看到具体的配置项
  • 配置项:按Y键启用,按N键禁用,按M键编译成模块

操作快捷键记一下:

按键 功能
Y / N / M 启用/禁用/模块化
空格 循环切换选项
/ 搜索配置项
? 查看帮助信息

注意:menuconfig修改后,记得保存。它会覆盖 .config 文件。如果你改乱了,重新执行 make xxx_defconfig 就能恢复。

为什么会用到menuconfig?我在项目中遇到过这样的情况:某款Flash芯片在默认配置下没被启用,启动时U-Boot根本认不出它。进menuconfig搜一下芯片型号,把对应的SPI Flash驱动勾上,问题就解决了。

3.4 配置后的检查

配置完成后,我习惯做两件事:

  1. 检查 .config 文件:用 grep '=y' .config | wc -l 看看启用了多少功能。太多的话,说明你开了很多用不到的东西,会拖慢编译速度。
  2. 保存一份备份:cp .config configs/myboard_defconfig,这样下次直接 make myboard_defconfig 就能恢复。

嗯,这里要提醒你。如果你修改了设备树文件(dts),记得重新执行 make menuconfig 并确认设备树路径是否正确。我曾经忘了这步,结果编译出来的U-Boot用的还是旧设备树,板子死活起不来。

3.5 本章知识体系

下面这张图,帮你理清源码获取到配置完成的整个流程:

U-Boot 源码获取与配置流程 步骤1:获取源码 git clone 官方仓库 步骤2:选择版本 git checkout 稳定标签 步骤3:defconfig make xxx_defconfig 步骤4a:menuconfig 图形化微调配置 步骤4b:直接修改 编辑 .config 文件 步骤5:检查与备份 验证 .config + 保存defconfig 配置完成 ✅ 主线流程 可选流程 高级操作

这张图把整个流程串起来了。你从左边开始,一步步走到右边,最后完成配置。我个人觉得,最关键的其实是步骤4——menuconfig。很多问题都是因为配置没调对导致的。

避坑指南:我曾经在配置时,不小心把串口驱动给关了。结果U-Boot编译出来,控制台没有任何输出。板子其实跑起来了,但你看不到任何信息,还以为它死了。排查了半天才发现是配置问题。所以,改完配置后,最好先检查一下串口、时钟、DDR这些基础模块是否还是启用的状态。

好了,源码拿到了,配置也搞定了。下一步就是编译——把配置变成能烧录的二进制文件。不过那是下一章的事,咱们先把基础打牢。


可可精品资料库