Buildroot 速查

如果我有空的话,我会更新这个文档,我是说如果。

完整文档可以在官方网站找到。

快速开始一个 buildroot 项目

1
2
3
4
5
6
7
8
buildroot_repo=https://github.com/buildroot/buildroot.git
buildroot_version=2022.11
buildroot_src=buildroot-$buildroot_version
buildroot_defcfg=raspberrypi4_defconfig

git clone --branch $buildroot_version --depth 1 $buildroot_repo
make -C $buildroot_src defconfig BR2_DEFCONFIG=$buildroot_defcfg
make -C $buildroot_src linux-reconfigure all

基本命令

Make 提示

使用 make help 获取所有可用目标的列表。

命令描述
make构建 rootfs
make xyz_defconfig选择配置文件
make menuconfig打开配置菜单
make savedefconfig将当前配置保存到 defconfig 文件中
make source下载包的源代码
make clean清理所有构建产品(包括构建目录、主机、暂存和目标树、镜像和工具链)
make distclean清理所有内容,包括配置

包管理

特定包的 make 目标

命令描述
make <pkg>构建一个包
make <pkg>-reinstall重新安装一个包
make <pkg>-rebuild重新构建一个包(这意味着重新安装)
make <pkg>-reconfigure重新配置一个包(这意味着重新构建)
make <pkg>-dirclean清理包目录

调试

命令描述
make graph-depends生成依赖关系图
make <pkg>-graph-depends生成包的依赖关系图

目录结构

目录描述
configs单板的配置和 defconfig 文件的位置
package包定义的位置
dl下载的源代码压缩包
output/build所有组件构建的目录
output/images构建的内核、引导加载程序和根文件系统镜像的位置
output/staging交叉编译工具链和用户空间包的头文件和库的位置(这是 host//sysroot 的软链)
output/host包括交叉编译工具链在内的主机工具的位置
output/target几乎是最终的目标根文件系统

.mk 文件

Cmake

cmake 包教程

一个 cmake 包的示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
################################################################################
#
# libfoo
#
################################################################################

LIBFOO_VERSION = 1.0
LIBFOO_SOURCE = libfoo-$(LIBFOO_VERSION).tar.gz
LIBFOO_SITE = http://www.foosoftware.org/download
LIBFOO_INSTALL_STAGING = YES
LIBFOO_INSTALL_TARGET = NO
LIBFOO_CONF_OPTS = -DBUILD_DEMOS=ON
LIBFOO_DEPENDENCIES = libglib2 host-pkgconf

$(eval $(cmake-package))

外部包和 sysvinit

一个带有 sysvinit 的外部包示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
################################################################################
#
# gsmmux 项目
#
################################################################################

GSMMUX_SITE = $(TOPDIR)/../external/path/gsmmux
GSMMUX_SITE_METHOD = local
GSMMUX_INSTALL_STAGING = YES
GSMMUX_VERSION = 1.0

define GSMMUX_INSTALL_INIT_SYSV
$(INSTALL) -D -m 755 $(@D)/S50start_cmuxd \
    $(TARGET_DIR)/etc/init.d/S50start_cmuxd
endef

$(eval $(cmake-package))

如何设置 ccache(编译缓存)?

在 Buildroot 中使用 ccache

ccache 支持已集成在 Buildroot 中。只需在 Build options 中启用 Enable compiler cache。这将自动构建 ccache 并将其用于每个主机和目标编译。

cache 位于 BR2_CCACHE_DIR 配置选项定义的目录中,默认值为 $HOME/.buildroot-ccache。此默认位置在 Buildroot 输出目录之外,因此可以由单独的 Buildroot 构建共享。如果要删除缓存,只需删除此目录。

如何重新生成 target/rootfs

How to clean only target in buildroot

由于rm -rf output/target && make并不会触发 install 操作,所以需要用以下 hack 来实现:

1
2
3
4
5
6
rm -rf output/target

# 删除所有的 .stamp_target_installed 文件
find ../ -name ".stamp_target_installed" -delete

rm -f output/build/host-gcc-final-*/.stamp_host_installed
使用 Hugo 构建
主题 StackJimmy 设计