1. 项目客制化
用户可以自定义的内容有:
- 配置 Buildroot,即 make menuconfig 的内容
- 配置其他组件,即 make linux-menuconfig、make busybox-menuconfig 等等
- 自定义已生成的文件系统:
- 添加或覆盖目标板文件系统的文件(通过宏
BR2_ROOTFS_OVERLAY
) - 修改或删除目标板文件系统的文件(通过宏
BR2_ROOTFS_POST_BUILD_SCRIPT
) - 在生成镜像文件前运行任意命令(通过宏
BR2_ROOTFS_POST_BUILD_SCRIPT
) - 修改文件权限和所属关系(通过宏
BR2_ROOTFS_DEVICE_TABLE
) - 添加自定义设备节点(devices node)(通过宏
BR2_ROOTFS_STATIC_DEVICE_TABLE
)
- 添加或覆盖目标板文件系统的文件(通过宏
- 添加自定义用户账户(通过宏
BR2_ROOTFS_USERS_TABLES
) - 在生成镜像文件后运行任意命令(通过宏
BR2_ROOTFS_POST_IMAGE_SCRIPT
) - 为某些软件包打补丁(通过宏
BR2_GLOBAL_PATCH_DIR
) - 添加自定义软件包
2. 官方推荐目录结构
|
|
2.1. 客制化内容
如果我们有多个相近的项目,可能会共用一些配置,我们不需要为每个项目都配置一遍相同的内容,可以使用以下结构进行配置:
|
|
例如需要为 fooboard 的软件包打补丁,可以进行如下配置:
BR2_GLOBAL_PATCH_DIR="board/<company>/common/patches board/<company>/fooboard/patches"
这样的情况,会先为公共部分(common)的软件包打补丁,然后为目标板(fooboard)的软件包打补丁。
|
|
上述宏都可使用此方式配置,以空格分隔,Buildroot 将从左到右顺序执行。
3. 保存 Buildroot 配置文件
使用 make savedefconfig
命令可以保存当前 .config
文件为 defconfig
文件。也可使用 BR2_DEFCONFIG
参数指定保存的位置,如 make savedefconfig BR2_DEFCONFIG=<path-to-defconfig>
。
建议保存的位置为 configs/<boardname>_defconfig
,保存在此位置的文件,可以被 make list-defconfigs
列处,并且可以使用 make <boardname>_defconfig
命令重新设为当前的待编译的配置文件。
4. 保存其他组件的配置文件
BusyBox、Linux kernel、U-Boot uClibc 等配置改变后,也需要保存。 对此,Buildroot 也提供了便捷的命令来保存这些文件的修改。
make linux-update-defconfig
命令会将 Linux kernel 的配置文件保存在宏BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE
指定的位置make busybox-update-config
命令会将 BusyBox 的配置文件保存在宏BR2_PACKAGE_BUSYBOX_CONFIG
指定的位置make uclibc-update-config
命令会将 uClibc 的配置文件保存在宏BR2_UCLIBC_CONFIG
指定的位置make barebox-update-defconfig
命令会将 BareBox 的配置文件保存在宏BR2_TARGET_BAREBOX_CUSTOM_CONFIG_FILE
指定的位置make uboot-update-defconfig
命令会将 U-Boot 的配置文件保存在宏BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE
指定的位置
5. 客制化已经生成的文件系统
Buildroot 官方推荐两种方式客制化文件系统:Root filesystem overlays
和 Post-build scripts
。两种可以组合使用。
-
Root filesystem overlays (
BR2_ROOTFS_OVERLAY
)
Root filesystem overlays
是直接拷贝宏BR2_ROOTFS_OVERLAY
指定路径下的文件至 rootfs 中的,并且是合并且覆盖的方式,即存在的文件会被替换,不存在的文件会被创建。版本控制文件(如:.git
、.svn
、.hg
等)、.empty
、以~
结尾的文件将被排除,不进行拷贝。
可以指定多个 rootfs overlay 目录,见 2.1. 客制化内容 -
Post-build scripts (
BR2_ROOTFS_POST_BUILD_SCRIPT
)
Post-build scripts
是在 Buildroot 编译完所有的软件之后、生成 rootfs 镜像文件之前被执行的脚本。
同样可以指定多个脚本执行。
Buildroot 在执行这些脚本时,会传递一些参数进去:- 宏
BR2_ROOTFS_POST_SCRIPT_ARGS
指定的参数 $BR2_CONFIG
Buildroot 配置文件.config
的文件路径$CONFIG_DIR
Buildroot 配置文件.config
的所在目录$HOST_DIR
给目标板程序编写人员使用的工具的目录$STAGING_DIR
目标板编写程序所需用到的头文件、库文件等的目录$TARGET_DIR
目标板文件系统目录$BUILD_DIR
编译过程中使用的临时目录$BINARIES_DIR
二进制文件目录,即镜像文件所在的目录$BASE_DIR
output 的目录,通常情况下是$BUILD_DIR
的上一级目录
- 宏
还有三种官方不推荐的修改文件系统的方式:
- 直接修改
- 自定义文件系统骨架(skeleton) (
BR2_ROOTFS_SKELETON_CUSTOM
) - Post-fakeroot scripts (
BR2_ROOTFS_POST_FAKEROOT_SCRIPT
)
附1:文章修订记录
- 2023/06/29 15:35 CST
- 文章初次发表
- 2023/07/20 19:44 CST
- 修正 4. 保存其他组件的配置文件 中的描述错误