4、配置深度解析(上):Target options 与 Build options

好,咱们正式开始啃 Buildroot 的配置菜单。说实话,我第一次打开 make menuconfig 的时候,看着满屏的选项也有点懵。但别怕,这一章我带你把它拆开揉碎,讲清楚两个最关键的配置页:Target options 和 Build options。

先给你看一张总览图,心里有个谱:

Buildroot 配置核心逻辑 Buildroot 配置核心逻辑 make menuconfig Target options Build options 核心子选项 • Target Architecture (ARM / x86 / MIPS ...) • Architecture Variant (cortex-a7 / i686 ...) • Floating point strategy (软浮点 / 硬浮点) 核心子选项 • Download mirror (下载镜像站点) • Number of parallel jobs (并行编译) • Enable ccache (编译缓存) 选错 Target 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 新兴开源硬件 尝鲜可以,生态还在完善
小技巧: 如果你不确定板子的架构,在 Linux 终端里跑 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 在编译时会从网上拉取成千上万个源码包。默认的下载源在国外,速度嘛……你懂的。

我建议你改成国内的镜像站点,比如清华、中科大、阿里云的。具体做法:

  1. 在 Build options 里找到 Download mirror 选项。
  2. 填入镜像 URL,比如 https://mirrors.tuna.tsinghua.edu.cn/buildroot。
  3. 保存退出。
避坑指南: 镜像站点有时候同步不及时,可能缺某些冷门包。如果下载失败,可以临时切回官方源,或者手动把包放到 dl/ 目录下。

4.2.2 Number of parallel jobs(并行编译)

这个选项控制编译时同时跑多少个任务。说白了,就是让 CPU 多核一起干活。

设置多少合适?我一般用这个公式:

并行数 = CPU 物理核心数 + 1

比如你的电脑是 4 核 8 线程,设成 5 或 6 都行。设太大反而会因为资源争抢导致编译变慢,甚至把电脑卡死。

注意: 如果你在虚拟机里编译,或者内存比较小(小于 8GB),建议并行数不要超过 4。否则内存爆了,编译会直接报错退出。

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,能开就开。
  • 遇到不确定的配置,先查数据手册,或者用最保守的选项。