Buildroot
Table of Contents
1. Buildroot
1.1. Overview
buildroot 的功能:
- 编译 cross compilation toolchain
- 编译 bootloader
- 编译 kernel
- 编译其它的工具例如 busybox 并打包成 rootfs
为了方便定制, buildboot 还提供一些定制的方法:
- 类似于 kernel 的 config 方式
- hook script
- rootfs overlay
- BR2_<PKG>_CUSTOM_CONFIG_FILE
- <PKG>_OVERRIDE_SRCDIR
- BR2_GLOBAL_PATCH_DIR
1.2. How To
1.2.1. quick start
$> make qemu_riscv64_virt_defconfig $> make $> ./output/images/start-qemu.sh
1.2.2. force rebuild pkg
$> make opensbi-dirclean $> make opensbi-rebuild
1.2.3. debug opensbi in qemu-system-riscv64
https://qemu-project.gitlab.io/qemu/system/gdb.html
$> qemu-system-riscv64 -s -S -M virt -bios fw_jump.elf ... $> gdb-multiarch output/images/fw_jump.elf (gdb) target remote localhost:1234 Remote debugging using localhost:1234 0x0000000000001000 in ?? () (gdb) b _start Breakpoint 1 at 0x80000000: file /backup/source/buildroot-2022.08/output/build/opensbi-0.9/firmware/fw_base.S, line 50. (gdb) c Continuing. Breakpoint 1, _start () at /backup/source/buildroot-2022.08/output/build/opensbi-0.9/firmware/fw_base.S:50 50 MOV_3R s0, a0, s1, a1, s2, a2
1.2.4. use OVERRIDE_SRCDIR
使用 OVERRIDE_SRCDIR 可以便于边开发边测试.
例如当需要修改 opensbi 的代码时, 如果直接在 output/build/opensbi-0.9 下修改, 当使用 make opensbi-dirclean 时整个output/build/opensbi-0.9 都会被删除, 通过下面的配置可以使用自己提供的 opensbi 的代码
$> echo 'OPENSBI_OVERRIDE_SRCDIR=/tmp/opensbi' > local.mk $> make opensbi-dirclean $> make opensbi-rebuild
- 当 make opensbi-rebuild 时, buildroot 会通过 rsync 把 /tmp/opensbi 的文件复制到 out/build/opensbi-custom 下, 以支持增量编译.
- 当 make opensbi-dirclean 时, out/build/opensbi-custom 会被删除, 但/tmp/opensbi 会保持不变
另外, 这个配置不能直接写在 .config 中, 因为 .config 中的配置都是名为 BR2_XXX 且可以通过 menuconfig 配置. OPENSBI_OVERRIDE_SRCDIR 这种配置需要保存在 local.mk 中
1.2.5. use CUSTOM_CONFIG_FILE
linux, u-boot 和 barebox 的配置文件有三种选择:
- 使用 linux 和 u-boot 自带的的 platform 相关配置文件, 例如 linux 的 `arch/riscv/configs/defconfig` 或 u-boot 的 `configs/qemu-riscv64_defconfig`
- 使用自定义的 config file
通过 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE 和 BR2_TARGET_UBOOT_CUSTOM_CONFIG_FILE 可以自定义 config file
1.2.6. use ROOTFS_OVERLAY
BR2_ROOTFS_OVERLAY="/tmp/rootfs"
然后 make rootfs-ext2 后 `/tmp/rootfs` 下的所有数据被会都复制到 rootfs 中
Backlinks
RISC-V Boot Flow (RISC-V Boot Flow > u-boot): 在 buildroot 中编译 u-boot, 指定 config 为 `BR2_TARGET_UBOOT_BOARD_DEFCONFIG="qemu-riscv64_smode"`