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