Files
fds-os/tools/build-kernel
T
2026-09-21 22:29:23 +08:00

47 lines
2.3 KiB
Bash
Executable File

#!/usr/bin/env bash
source "$(dirname -- "${BASH_SOURCE[0]}")/lib.sh"
[[ $# == 0 || ( $# == 1 && $1 == --rebuild ) ]] || die 'Usage: tools/build-kernel [--rebuild]'
cd "$FDS_ROOT"
use_xbps
check_void_pin
tools/prepare-void
mkdir -p out/logs out/packages out/manifests
package=fds-kernel-6.12.87_1.aarch64.xbps
inputs=$(mktemp "$FDS_ROOT/out/kernel-inputs.XXXXXX")
trap 'rm -f "$inputs"' EXIT
sha256sum VOID_PACKAGES_COMMIT config/xbps-src.conf tools/build-kernel \
image/kernel/dasung.config packages/fds-kernel/template packages/fds-kernel/files/fds.config >"$inputs"
if [[ $# == 0 && -s out/kernel/build-inputs.sha256 && -s out/kernel/payload.sha256 ]] && \
cmp -s "$inputs" out/kernel/build-inputs.sha256 && \
sha256sum -c out/kernel/artifacts.sha256 >/dev/null 2>&1 && \
(cd out/kernel && sha256sum -c payload.sha256 >/dev/null 2>&1); then
XBPS_ARCH=aarch64 xbps-rindex -fa "out/packages/$package"
printf 'PASS: reusing verified Pi kernel build with unchanged recorded inputs\n'
exit 0
fi
(
cd "$FDS_VOID"
if [[ ${1:-} == --rebuild ]]; then
xbps_src -f -a aarch64 pkg fds-kernel
else
xbps_src -a aarch64 pkg fds-kernel
fi
) 2>&1 | tee out/logs/xbps-fds-kernel.log
cp "$FDS_VOID/hostdir/binpkgs/$package" out/packages/
XBPS_ARCH=aarch64 xbps-rindex -fa "out/packages/$package"
work=$(mktemp -d "$FDS_ROOT/out/kernel-build.XXXXXX")
tar -xf "out/packages/$package" -C "$work"
[[ -s $work/boot/kernel_2712.img && -s $work/boot/bcm2712-rpi-5-b.dtb ]] || die 'Missing Pi 5 kernel/DTB'
# Preserve the existing mandatory display-protection requirement.
while IFS= read -r setting; do
[[ $setting == CONFIG_*=* || $setting == '# CONFIG_'*' is not set' ]] || continue
grep -Fqx "$setting" "$work/boot/config-fds" || die "Dasung kernel requirement missing: $setting"
done <image/kernel/dasung.config
sha256sum "out/packages/$package" "$work/boot/kernel_2712.img" "$work/boot/bcm2712-rpi-5-b.dtb" >"$work/artifacts.sha256"
cp "$work/artifacts.sha256" out/manifests/kernel-artifacts.sha256
cp "$inputs" "$work/build-inputs.sha256"
(cd "$work" && find boot usr -type f -print0 | sort -z | xargs -0 sha256sum >payload.sha256)
ln -sfn "${work##*/}" out/kernel
printf 'PASS: pinned Pi 5 kernel, modules, DTBs and boot configuration built\n'
printf 'SKIP: physical Pi boot and display behavior require hardware\n'