Buildroot

Table of Contents

1. Buildroot

1.1. Overview

buildroot 的功能:

  1. 编译 cross compilation toolchain
  2. 编译 bootloader
  3. 编译 kernel
  4. 编译其它的工具例如 busybox 并打包成 rootfs

为了方便定制, buildboot 还提供一些定制的方法:

  1. 类似于 kernel 的 config 方式
  2. hook script
  3. rootfs overlay
  4. BR2_<PKG>_CUSTOM_CONFIG_FILE
  5. <PKG>_OVERRIDE_SRCDIR
  6. 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 的配置文件有三种选择:

  1. 使用 linux 和 u-boot 自带的的 platform 相关配置文件, 例如 linux 的 `arch/riscv/configs/defconfig` 或 u-boot 的 `configs/qemu-riscv64_defconfig`
  2. 使用自定义的 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"`

Author: [email protected]
Date: 2022-10-10 Mon 11:45
Last updated: 2023-11-06 Mon 18:04

知识共享许可协议