banner
NEWS LETTER

嵌入式 Linux 系列 05:Buildroot 构建、overlay 和自定义 package

Scroll down

Buildroot 适合快速构建精简嵌入式 Linux 系统。它可以同时生成交叉工具链、内核、rootfs 和镜像。对入门和中小型产品来说,Buildroot 的学习成本比 Yocto 低很多。

一、Buildroot 解决什么问题

手工拼 rootfs 很快会遇到问题:

  • 工具链版本不统一。
  • 动态库依赖难管理。
  • BusyBox 配置不可复现。
  • rootfs 修改靠手工拷贝。
  • 不同开发机生成结果不一致。

Buildroot 的价值是把这些内容配置化、脚本化。

二、常见目录

1
2
3
4
configs/
package/
board/
output/

输出目录:

1
2
3
output/host/     交叉工具链
output/target/ rootfs 内容
output/images/ 最终镜像

常用命令:

1
2
3
4
make menuconfig
make linux-menuconfig
make busybox-menuconfig
make

保存配置:

1
make savedefconfig

三、rootfs overlay

overlay 用来把项目自定义文件复制进 rootfs。

示例:

1
2
3
4
5
6
7
8
board/my_board/rootfs_overlay/
etc/
init.d/
S50device_agent
default_timezone
usr/
bin/
factory_test

在 Buildroot 中配置:

1
2
System configuration
Root filesystem overlay directories

overlay 适合放:

  • 启动脚本。
  • 默认配置。
  • 小工具。
  • udev/mdev 规则。
  • 默认证书或公钥。

不建议把大型应用二进制长期放 overlay,最好做成 package。

四、自定义 package

一个简单 package 目录:

1
2
3
package/device-agent/
Config.in
device-agent.mk

Config.in

1
2
3
4
config BR2_PACKAGE_DEVICE_AGENT
bool "device-agent"
help
Device management agent.

device-agent.mk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DEVICE_AGENT_VERSION = 1.0.0
DEVICE_AGENT_SITE = $(TOPDIR)/../apps/device-agent
DEVICE_AGENT_SITE_METHOD = local

define DEVICE_AGENT_BUILD_CMDS
$(MAKE) CC="$(TARGET_CC)" -C $(@D)
endef

define DEVICE_AGENT_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/device_agent \
$(TARGET_DIR)/usr/bin/device_agent
endef

$(eval $(generic-package))

把 package 加入总入口:

1
source "package/device-agent/Config.in"

然后在 make menuconfig 中选中。

五、调试工具开关

开发阶段可以打开:

  • strace。
  • tcpdump。
  • gdbserver。
  • i2c-tools。
  • iproute2。
  • ethtool。

量产版本再裁剪。

可以维护两个配置:

1
2
my_board_debug_defconfig
my_board_release_defconfig

debug 方便定位,release 控制包体和攻击面。

六、构建可复现

项目至少保存:

  • defconfig。
  • Linux config。
  • BusyBox config。
  • rootfs overlay。
  • 自定义 package。
  • 构建脚本。
  • 版本生成脚本。

不要只保存 output/images。镜像是结果,不是构建过程。

一个简单构建脚本:

1
2
3
4
5
#!/bin/sh
set -eu

make my_board_defconfig
make

后续再扩展清理、版本号、产物归档。

其他文章
目录导航 置顶
  1. 1. 一、Buildroot 解决什么问题
  2. 2. 二、常见目录
  3. 3. 三、rootfs overlay
  4. 4. 四、自定义 package
  5. 5. 五、调试工具开关
  6. 6. 六、构建可复现
请输入关键词进行搜索