Buildroot 速查表
我会在玩 buildroot 时不断更新我的笔记。
完整文档可以在官方网站找到。
基本命令
使用 make help
获取所有可用目标的列表。
命令 | 描述 |
---|---|
make | 构建 rootfs |
make xyz_defconfig | 选择配置文件 |
make menuconfig | 打开配置菜单 |
make savedefconfig | 将当前配置保存到 defconfig 文件中 |
make source | 下载包的源代码 |
make clean | 清理所有构建产品(包括构建目录、主机、暂存和目标树、镜像和工具链) |
make distclean | 清理所有内容,包括配置 |
包管理
命令 | 描述 |
---|---|
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/ |
output/host | 包括交叉编译工具链在内的主机工具的位置 |
output/target | 几乎是最终的目标根文件系统 |
.mk
文件
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(编译缓存)?
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