From 4e3f1d6cf0e91c96bdd30b5c0a30e8ee5e7b185e Mon Sep 17 00:00:00 2001 From: Adolfo Delorenzo Date: Thu, 12 Feb 2026 19:27:54 -0600 Subject: [PATCH] fix: use kernel-built DTBs for RPi SD card driver probe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The sdhci-iproc driver (RPi 4 SD card controller) probes via Device Tree matching. Using DTBs from the firmware repo instead of the kernel build caused a mismatch — the driver silently failed to probe, resulting in zero block devices after boot. Changes: - Use DTBs from custom-kernel-arm64/dtbs/ (matches the kernel) - Firmware blobs (start4.elf, fixup4.dat) still from firmware repo - Also includes prior fix for LABEL= resolution in persistent mount Co-Authored-By: Claude Opus 4.6 --- build/scripts/create-rpi-image.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/build/scripts/create-rpi-image.sh b/build/scripts/create-rpi-image.sh index 60ad800..2972778 100755 --- a/build/scripts/create-rpi-image.sh +++ b/build/scripts/create-rpi-image.sh @@ -34,6 +34,9 @@ IMG_SIZE_MB="${IMG_SIZE_MB:-2048}" # 2 GB default KERNEL="${CACHE_DIR}/custom-kernel-arm64/Image" INITRAMFS="${ROOTFS_DIR}/kubesolo-os.gz" RPI_FIRMWARE_DIR="${CACHE_DIR}/rpi-firmware" +# DTBs MUST come from the kernel build (not firmware repo) to match the kernel. +# A DTB mismatch causes sdhci-iproc to silently fail — zero block devices. +KERNEL_DTBS_DIR="${CACHE_DIR}/custom-kernel-arm64/dtbs" echo "==> Creating ${IMG_SIZE_MB}MB Raspberry Pi disk image..." @@ -178,14 +181,15 @@ CFGTXT # Copy initramfs cp "$INITRAMFS" "$MNT/kubesolo-os.gz" - # Copy DTB overlays - if [ -d "$RPI_FIRMWARE_DIR/overlays" ]; then - cp -r "$RPI_FIRMWARE_DIR/overlays" "$MNT/" + # Copy DTBs from kernel build (MUST match kernel to avoid driver probe failures) + if ls "$KERNEL_DTBS_DIR"/bcm27*.dtb 1>/dev/null 2>&1; then + cp "$KERNEL_DTBS_DIR"/bcm27*.dtb "$MNT/" fi - - # Copy base DTBs (bcm2710-*, bcm2711-*, bcm2712-*) - if ls "$RPI_FIRMWARE_DIR"/bcm27*.dtb 1>/dev/null 2>&1; then - cp "$RPI_FIRMWARE_DIR"/bcm27*.dtb "$MNT/" + # Copy overlays — prefer kernel-built, fall back to firmware repo + if [ -d "$KERNEL_DTBS_DIR/overlays" ]; then + cp -r "$KERNEL_DTBS_DIR/overlays" "$MNT/" + elif [ -d "$RPI_FIRMWARE_DIR/overlays" ]; then + cp -r "$RPI_FIRMWARE_DIR/overlays" "$MNT/" fi # Write version marker