第三章:源码获取与配置
好,咱们进入实战环节。这一章我带你走一遍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 配置后的检查
配置完成后,我习惯做两件事:
- 检查 .config 文件:用
grep '=y' .config | wc -l看看启用了多少功能。太多的话,说明你开了很多用不到的东西,会拖慢编译速度。 - 保存一份备份:
cp .config configs/myboard_defconfig,这样下次直接make myboard_defconfig就能恢复。
嗯,这里要提醒你。如果你修改了设备树文件(dts),记得重新执行 make menuconfig 并确认设备树路径是否正确。我曾经忘了这步,结果编译出来的U-Boot用的还是旧设备树,板子死活起不来。
3.5 本章知识体系
下面这张图,帮你理清源码获取到配置完成的整个流程:
这张图把整个流程串起来了。你从左边开始,一步步走到右边,最后完成配置。我个人觉得,最关键的其实是步骤4——menuconfig。很多问题都是因为配置没调对导致的。
避坑指南:我曾经在配置时,不小心把串口驱动给关了。结果U-Boot编译出来,控制台没有任何输出。板子其实跑起来了,但你看不到任何信息,还以为它死了。排查了半天才发现是配置问题。所以,改完配置后,最好先检查一下串口、时钟、DDR这些基础模块是否还是启用的状态。
好了,源码拿到了,配置也搞定了。下一步就是编译——把配置变成能烧录的二进制文件。不过那是下一章的事,咱们先把基础打牢。
可可精品资料库