#!/bin/bash # BBeOS Boot Image Build Script # Creates a complete boot image for BlackBerry Classic Q20 set -e echo "Building BBeOS boot image..." # Configuration KERNEL_IMAGE="kernel-source/arch/arm/boot/zImage" DTB_IMAGE="kernel-source/arch/arm/boot/dts/qcom/qcom-msm8960-blackberry-q20.dtb" INITRAMFS="initramfs.img" BOOT_IMAGE="bbeos-boot.img" BOOT_IMAGE_UNPACKED="boot-unpacked" # Check if required files exist echo "Checking required files..." if [ ! -f "$KERNEL_IMAGE" ]; then echo "Error: Kernel image not found: $KERNEL_IMAGE" echo "Please run ./scripts/build-kernel-minimal.sh first" exit 1 fi if [ ! -f "$DTB_IMAGE" ]; then echo "Error: Device tree blob not found: $DTB_IMAGE" echo "Please run ./scripts/build-kernel-minimal.sh first" exit 1 fi if [ ! -f "$INITRAMFS" ]; then echo "Error: Initramfs not found: $INITRAMFS" echo "Please run ./scripts/build-rootfs.sh first" exit 1 fi echo "All required files found!" # Create boot image directory structure echo "Creating boot image structure..." rm -rf $BOOT_IMAGE_UNPACKED mkdir -p $BOOT_IMAGE_UNPACKED # Copy files to boot image directory cp $KERNEL_IMAGE $BOOT_IMAGE_UNPACKED/zImage cp $DTB_IMAGE $BOOT_IMAGE_UNPACKED/dtb cp $INITRAMFS $BOOT_IMAGE_UNPACKED/initramfs.img # Create boot image using mkbootimg (if available) if command -v mkbootimg &> /dev/null; then echo "Using mkbootimg to create boot image..." mkbootimg \ --kernel $BOOT_IMAGE_UNPACKED/zImage \ --dtb $BOOT_IMAGE_UNPACKED/dtb \ --ramdisk $BOOT_IMAGE_UNPACKED/initramfs.img \ --cmdline "console=ttyMSM0,115200 root=/dev/ram0 rw rootwait" \ --base 0x80200000 \ --pagesize 2048 \ --ramdisk_offset 0x02000000 \ --tags_offset 0x01e00000 \ --output $BOOT_IMAGE else echo "mkbootimg not found, creating simple concatenated image..." echo "Note: This may not work with all bootloaders" # Create a simple concatenated image cat $BOOT_IMAGE_UNPACKED/zImage $BOOT_IMAGE_UNPACKED/dtb > $BOOT_IMAGE.tmp # Add initramfs if it exists if [ -f $BOOT_IMAGE_UNPACKED/initramfs.img ]; then cat $BOOT_IMAGE.tmp $BOOT_IMAGE_UNPACKED/initramfs.img > $BOOT_IMAGE rm $BOOT_IMAGE.tmp else mv $BOOT_IMAGE.tmp $BOOT_IMAGE fi fi # Create a simple boot script for testing echo "Creating boot script for testing..." cat > $BOOT_IMAGE_UNPACKED/boot.scr << 'EOF' # BBeOS Boot Script # For testing with QEMU or other bootloaders # Load kernel fatload mmc 0:1 0x80200000 zImage # Load device tree fatload mmc 0:1 0x82000000 dtb # Load initramfs fatload mmc 0:1 0x83000000 initramfs.img # Boot kernel bootz 0x80200000 0x83000000 0x82000000 EOF # Create a QEMU test script echo "Creating QEMU test script..." cat > test-qemu.sh << 'EOF' #!/bin/bash # QEMU Test Script for BBeOS # Tests the kernel and initramfs in emulation echo "Testing BBeOS in QEMU..." # Check if QEMU is available if ! command -v qemu-system-arm &> /dev/null; then echo "Error: qemu-system-arm not found" echo "Please install QEMU: sudo apt install qemu-system-arm" exit 1 fi # Run QEMU with our kernel and initramfs qemu-system-arm \ -M vexpress-a9 \ -cpu cortex-a9 \ -m 512M \ -kernel kernel-source/arch/arm/boot/zImage \ -dtb kernel-source/arch/arm/boot/dts/qcom/qcom-msm8960-blackberry-q20.dtb \ -initrd initramfs.img \ -append "console=ttyAMA0,115200 root=/dev/ram0 rw rootwait" \ -nographic \ -serial mon:stdio echo "QEMU test complete" EOF chmod +x test-qemu.sh # Create a fastboot flash script echo "Creating fastboot flash script..." cat > flash-boot.sh << 'EOF' #!/bin/bash # Fastboot Flash Script for BBeOS # Flashes the boot image to device via fastboot echo "Flashing BBeOS boot image..." # Check if fastboot is available if ! command -v fastboot &> /dev/null; then echo "Error: fastboot not found" echo "Please install Android tools: sudo apt install android-tools-fastboot" exit 1 fi # Check if device is connected if ! fastboot devices | grep -q .; then echo "Error: No fastboot device found" echo "Please connect device in fastboot mode" exit 1 fi # Flash boot image echo "Flashing boot image..." fastboot flash boot bbeos-boot.img # Reboot device echo "Rebooting device..." fastboot reboot echo "Flash complete!" EOF chmod +x flash-boot.sh echo "Boot image build complete!" echo "" echo "Files created:" echo " - $BOOT_IMAGE (boot image)" echo " - $BOOT_IMAGE_UNPACKED/ (unpacked boot files)" echo " - test-qemu.sh (QEMU test script)" echo " - flash-boot.sh (fastboot flash script)" echo "" echo "To test in QEMU: ./test-qemu.sh" echo "To flash to device: ./flash-boot.sh" echo "" echo "Boot image size: $(ls -lh $BOOT_IMAGE | awk '{print $5}')"