4、配置深度解析(上):Target options 与 Build options
好,咱们正式开始啃 Buildroot 的配置菜单。说实话,我第一次打开 make menuconfig 的时候,看着满屏的选项也有点懵。但别怕,这一章我带你把它拆开揉碎,讲清楚两个最关键的配置页:Target options 和 Build options。
先给你看一张总览图,心里有个谱:
说白了,Target options 决定你的系统为谁而生,Build options 决定怎么把它造出来。一个管“对”,一个管“快”。
4.1 Target options:为你的硬件量身定做
这一页配置错了,后果很严重。我见过有人给 Cortex-A7 的板子选了 ARM926 的变种,结果系统启动到一半就崩了。嗯,咱们得避免这种坑。
4.1.1 Target Architecture(目标架构)
第一项就是选架构。下拉菜单里 ARM、x86、MIPS、RISC-V 等等都有。你用的什么 CPU,就选什么。
| 架构 | 常见场景 | 我的建议 |
|---|---|---|
| ARM (little endian) | 嵌入式 Linux 主力,树莓派、全志、NXP i.MX 系列 | 绝大多数项目选这个 |
| ARM (big endian) | 老式网络设备、某些 DSP | 除非硬件明确要求,否则别碰 |
| x86 / x86-64 | PC 开发、QEMU 模拟、x86 工控板 | 做原型验证很方便 |
| MIPS | 路由器、家用网关 | 越来越少见了 |
| RISC-V | 新兴开源硬件 | 尝鲜可以,生态还在完善 |
uname -m 或者 cat /proc/cpuinfo,一眼就能看出来。
4.1.2 Architecture Variant(架构变种)
选完大架构,还得细化到具体变种。比如 ARM 下面有 cortex-a7、cortex-a53、cortex-a72…… 这可不是随便选的。
为什么?因为不同的变种,指令集、流水线深度、缓存大小都不一样。编译器会根据这个选项生成针对性的代码。选错了,轻则性能损失,重则运行崩溃。
我个人习惯是,先去查芯片的 数据手册 或者 核心型号。比如全志 H3 是 Cortex-A7,树莓派 4 是 Cortex-A72。实在查不到,就用最通用的 armv7-a 或 armv8-a,兼容性最好。
4.1.3 Floating point strategy(浮点运算单元)
这个选项,坑最多。我刚开始做嵌入式的时候,就在这里栽过跟头。
浮点运算策略主要有三种:
- 软浮点 (Soft):用整数指令模拟浮点运算。慢,但兼容所有 ARM CPU。
- 软浮点调用 (Softfp):用硬件浮点单元计算,但函数调用时用整数寄存器传参。兼容性还行,性能一般。
- 硬浮点 (Hard):完全用硬件浮点单元,函数调用也用浮点寄存器传参。最快,但要求 CPU 必须有 FPU。
核心原则: 你的 CPU 有硬件 FPU(比如 Cortex-A 系列基本都有),就选 Hard。没有(比如某些 Cortex-M 或老 ARM9),就选 Soft。选错了,编译出来的程序要么跑不起来,要么慢得离谱。
我曾经接手过一个项目,前任工程师给有 FPU 的板子选了 Softfp,结果视频解码性能差了 30%。改回 Hard 之后,问题立刻解决。你想想看,这种低级错误多冤枉。
怎么确认 CPU 有没有 FPU?查数据手册,或者看 Linux 启动日志里有没有 VFP 或 NEON 字样。
4.2 Build options:让编译又快又稳
Target options 搞定之后,咱们来看看怎么把构建过程本身优化好。这部分配置直接影响你的开发效率。
4.2.1 Download mirror(下载镜像站点)
Buildroot 在编译时会从网上拉取成千上万个源码包。默认的下载源在国外,速度嘛……你懂的。
我建议你改成国内的镜像站点,比如清华、中科大、阿里云的。具体做法:
- 在 Build options 里找到
Download mirror选项。 - 填入镜像 URL,比如
https://mirrors.tuna.tsinghua.edu.cn/buildroot。 - 保存退出。
dl/ 目录下。
4.2.2 Number of parallel jobs(并行编译)
这个选项控制编译时同时跑多少个任务。说白了,就是让 CPU 多核一起干活。
设置多少合适?我一般用这个公式:
并行数 = CPU 物理核心数 + 1
比如你的电脑是 4 核 8 线程,设成 5 或 6 都行。设太大反而会因为资源争抢导致编译变慢,甚至把电脑卡死。
4.2.3 Enable ccache(编译缓存)
ccache 是个好东西。它会把编译过的目标文件缓存起来,下次编译同样的代码时直接复用,不用重新编译。
我强烈建议你打开它。特别是当你反复修改配置、调试驱动的时候,ccache 能省下大量时间。第一次编译可能慢一点,但后续的增量编译会快很多。
开启方法很简单:在 Build options 里找到 Enable compiler cache,选上就行。默认缓存目录在 ~/.buildroot-ccache,你也可以通过 BR2_CCACHE_DIR 环境变量改位置。
我的经验: 有一次我连续改了 20 次内核配置,每次都要重新编译。没有 ccache 的话,每次等 10 分钟,有了 ccache,每次只要 2 分钟。你说这功能值不值得开?
4.3 本章小结
这一章咱们把 Target options 和 Build options 的核心选项捋了一遍。记住三件事:
- Target options 选错了,系统跑不起来。架构、变种、浮点策略,一个都不能错。
- Build options 设好了,开发效率翻倍。镜像站点、并行数、ccache,能开就开。
- 遇到不确定的配置,先查数据手册,或者用最保守的选项。