After some experimentation it is best the define boards in this context as fairly self-contained packages to the specific test devices at hand and not have anything shared e.g. by CPU architecture even at the cost of some redundancy:
$ tree
.
├── Config.in
├── LICENSE
├── board
│ └── tpmdd_qemu_x86_64
│ ├── linux.config
│ ├── post-build.sh
│ ├── post-image.sh
│ └── start-qemu.sh.in
├── configs
│ └── tpmdd_qemu_x86_64_defconfig
├── external.desc
└── external.mk
4 directories, 9 files
E.g. similarly I’ll add tpmdd_raspberrypi3b
target and so forth. For instance, I would not share post-image.sh
and similar scripts between boards even if they were 1:1. It kills robustness.
The orchestrator itself has a flat repository:
$ tree
.
├── LICENSE
├── Makefile
└── README.md
I licensed external with GPL2 for the sake of upstream compatibility and orchestrator with MIT. This is overally pretty usable structure to use Buildroot.
My new (WiP) orchestrator for building test image for testing my #kernel tree is fully implemented with GNU make:
# SPDX-License-Identifier: MIT
ROOT := $(dir $(abspath $(firstword $(MAKEFILE_LIST))))
BUILDROOT_VERSION := 2023.11
OUTPUT := $(ROOT)output
BUILDROOT_URL := https://buildroot.org/downloads/buildroot-$(BUILDROOT_VERSION).tar.gz
EXTERNAL_URL := https://github.com/jarkkojs/tpmdd-buildroot-external/tarball/main
define make-buildroot
make -C "$(OUTPUT)/buildroot" BR2_EXTERNAL="$(OUTPUT)/external" O="$(OUTPUT)/build" $(1)
endef
define download-package
mkdir -p $(2)
curl -sL "$(1)" | tar -zxv -C "$(2)" --strip-components=1
endef
all: buildroot
.PHONY: buildroot
buildroot: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,all)
.PHONY: buildroot-menuconfig
buildroot-menuconfig: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,menuconfig)
$(call make-buildroot,savedefconfig)
.PHONY: linux-menuconfig
linux-menuconfig: $(OUTPUT)/download-stamp
$(call make-buildroot,tpmdd_qemu_x86_64_defconfig)
$(call make-buildroot,linux-menuconfig)
$(call make-buildroot,linux-savedefconfig)
$(OUTPUT)/download-stamp:
$(call download-package,"$(BUILDROOT_URL)","$(OUTPUT)/buildroot")
$(call download-package,"$(EXTERNAL_URL)","$(OUTPUT)/external")
touch $@
.PHONY: clean
clean:
rm -rf "$(OUTPUT)"
It is pretty robust structure because I can e.g. easily add packages (like maybe host swtpm) in a robust manner to buildroot.
To test latest linux-tpmdd
changes:
git clone https://github.com/jarkkojs/test-tpmdd
cd test-tpmdd
make
Then:
output/images/start-qemu.sh --swtpm
output/images/start-qemu.sh --swtpm --tpm-crb
output/images/start-qemu.sh --swtpm --tpm1
Tools for testing (more in future):
keyutils
for testing keyring and trusted keys/usr/lib/kselftests/run_selftests.sh
Requires swtpm
to be installed (but not QEMU, it will build one).
Linus might be willing to drop support for i486-class machines[1] from the #Linux #kernel.
No, nobody asked for that directly; he brought that up in a discussion himself: https://lore.kernel.org/all/CAHk-%3DwhESMW2v0cd0Ye%2BAnV0Hp9j%2BMm4BO2xJo93eQcC1xghUA@mail.gmail.com/ #LinuxKernel
[1] and a couple of processors which _claimed_ to be Pentium class, but weren't