Buildroot 速查表
我会在玩 buildroot 时不断更新我的笔记。

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

基本命令

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 包的示例:

################################################################################
#
# 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 的外部包示例:

################################################################################
#
# 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来实现:

rm -rf output/target

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

rm -f output/build/host-gcc-final-*/.stamp_host_installed

最后修改于 2024-09-12