From 502bb4f84a5fafd5ec0a222f7b772ff237f4ba62 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 17 Jul 2025 21:25:59 +0300 Subject: [PATCH] BuildSystem: Add support for building initrd image This is nice for testing when there isn't xhci controller available or my usb stack fails :) --- script/image.sh | 12 +++++++++--- script/install-bootloader.sh | 11 ++++++++++- toolchain/grub-legacy-initrd.cfg | 4 ++++ toolchain/{grub-legacy-boot.cfg => grub-legacy.cfg} | 0 toolchain/grub-uefi-initrd.cfg | 11 +++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 toolchain/grub-legacy-initrd.cfg rename toolchain/{grub-legacy-boot.cfg => grub-legacy.cfg} (100%) create mode 100644 toolchain/grub-uefi-initrd.cfg diff --git a/script/image.sh b/script/image.sh index 9a73beb8..c25388f8 100755 --- a/script/image.sh +++ b/script/image.sh @@ -33,9 +33,15 @@ if [ ! -b $ROOT_PARTITION ]; then fi if sudo mount $ROOT_PARTITION $MOUNT_DIR; then - cd $MOUNT_DIR - sudo tar xf $BANAN_SYSROOT_TAR - cd + if (($BANAN_INITRD)); then + sudo mkdir -p $MOUNT_DIR/boot + sudo cp $BANAN_BUILD_DIR/kernel/banan-os.kernel $MOUNT_DIR/boot/banan-os.kernel + sudo cp $BANAN_SYSROOT_TAR $MOUNT_DIR/boot/banan-os.initrd + else + cd $MOUNT_DIR + sudo tar xf $BANAN_SYSROOT_TAR + cd + fi sudo umount $MOUNT_DIR fi diff --git a/script/install-bootloader.sh b/script/install-bootloader.sh index af43d95a..358cd9c0 100755 --- a/script/install-bootloader.sh +++ b/script/install-bootloader.sh @@ -44,7 +44,11 @@ install_grub_legacy() { --boot-directory="$mount_dir/boot" \ $loop_dev sudo mkdir -p "$mount_dir/boot/grub" - sudo cp "$BANAN_BUILD_DIR/grub-legacy-boot.cfg" "$mount_dir/boot/grub/grub.cfg" + if (($BANAN_INITRD)); then + sudo cp "$BANAN_BUILD_DIR/grub-legacy-initrd.cfg" "$mount_dir/boot/grub/grub.cfg" + else + sudo cp "$BANAN_BUILD_DIR/grub-legacy.cfg" "$mount_dir/boot/grub/grub.cfg" + fi sudo umount "$mount_dir" } @@ -62,6 +66,11 @@ install_grub_uefi() { } install_banan_legacy() { + if (($BANAN_INITRD)); then + echo "banan bootloader does not support initrd" >&2 + exit 1 + fi + root_disk_info=$(fdisk -x "$BANAN_DISK_IMAGE_PATH" | tr -s ' ') root_part_guid=$(echo "$root_disk_info" | grep "^$BANAN_DISK_IMAGE_PATH" | head -2 | tail -1 | cut -d' ' -f6) diff --git a/toolchain/grub-legacy-initrd.cfg b/toolchain/grub-legacy-initrd.cfg new file mode 100644 index 00000000..6fb95830 --- /dev/null +++ b/toolchain/grub-legacy-initrd.cfg @@ -0,0 +1,4 @@ +menuentry "banan-os" { + multiboot2 /boot/banan-os.kernel readonly + module2 /boot/banan-os.initrd +} diff --git a/toolchain/grub-legacy-boot.cfg b/toolchain/grub-legacy.cfg similarity index 100% rename from toolchain/grub-legacy-boot.cfg rename to toolchain/grub-legacy.cfg diff --git a/toolchain/grub-uefi-initrd.cfg b/toolchain/grub-uefi-initrd.cfg new file mode 100644 index 00000000..cd838dfb --- /dev/null +++ b/toolchain/grub-uefi-initrd.cfg @@ -0,0 +1,11 @@ +insmod part_gpt +insmod search_fs_uuid + +search --no-floppy --fs-uuid --set=root + +insmod all_video + +menuentry "banan-os" { + multiboot2 /boot/banan-os.kernel readonly + module2 /boot/banan-os.initrd +}