From 1fa0293b80683810063cc44311150bc218223168 Mon Sep 17 00:00:00 2001 From: Levent Kaya Date: Tue, 26 Nov 2024 16:23:19 +0300 Subject: [build] run with precompiled kernel --- fbgl_qemu_test_env.sh | 97 +++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 53 deletions(-) (limited to 'fbgl_qemu_test_env.sh') diff --git a/fbgl_qemu_test_env.sh b/fbgl_qemu_test_env.sh index 384ac4b..9957e1a 100644 --- a/fbgl_qemu_test_env.sh +++ b/fbgl_qemu_test_env.sh @@ -1,79 +1,70 @@ #!/bin/bash # Variables -BUSYBOX_DIR="busybox_root" # Directory for BusyBox root filesystem -BINARY="fbgl_test" # Precompiled binary -TARGET_DIR="/mnt/root" # Target directory for binary on BusyBox -BUSYBOX_IMAGE="busybox.img" # Image file for BusyBox environment -LOOP_DEVICE="/dev/loop0" # Loop device for BusyBox image +BUSYBOX_VERSION="1.36.0" # BusyBox version to download +PRECOMPILED_KERNEL="https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.5.9.tar.xz" +BUSYBOX_DIR="busybox_root" # Directory for BusyBox root filesystem +BINARY="fbgl_test" # Precompiled binary +BUSYBOX_IMAGE="busybox.img" # Image file for BusyBox environment +TARGET_DIR="/mnt/root" # Mount point for the BusyBox image +KERNEL_FILE="vmlinuz" # Precompiled kernel file # Ensure dependencies are installed -if ! command -v qemu-system-x86_64 &>/dev/null; then - echo "Please install QEMU to run BusyBox." - exit 1 -fi - -if ! command -v losetup &>/dev/null; then - echo "Please install losetup for loop device setup." - exit 1 -fi +REQUIRED_TOOLS=("wget" "qemu-system-x86_64" "dd" "mkfs.ext4" "mount" "losetup") +for tool in "${REQUIRED_TOOLS[@]}"; do + if ! command -v $tool &>/dev/null; then + echo "Error: $tool is required but not installed. Please install it first." + exit 1 + fi +done -# 1. Create a Minimal BusyBox Environment +# Step 1: Download and Build BusyBox echo "Setting up BusyBox environment..." - -# Download and build BusyBox -if [ ! -d "busybox" ]; then - git clone https://git.busybox.net/busybox +if [ ! -d "busybox-${BUSYBOX_VERSION}" ]; then + wget https://busybox.net/downloads/busybox-${BUSYBOX_VERSION}.tar.bz2 + tar -xf busybox-${BUSYBOX_VERSION}.tar.bz2 fi -cd busybox || exit +cd busybox-${BUSYBOX_VERSION} make defconfig sed -i 's/# CONFIG_STATIC/CONFIG_STATIC=y/' .config # Enable static binary -make -j$(nproc) +make -j$(nproc) install CONFIG_PREFIX=../$BUSYBOX_DIR cd .. -# Create root filesystem -mkdir -p $BUSYBOX_DIR/{bin,dev,etc,proc,sys,usr} - -# Install BusyBox binaries -cp busybox/busybox $BUSYBOX_DIR/bin/ -chroot $BUSYBOX_DIR /bin/busybox --install -s - -# Add init script -cat <$BUSYBOX_DIR/init -#!/bin/sh +# Step 2: Set Up BusyBox Root Filesystem +echo "Creating BusyBox root filesystem..." +mkdir -p $BUSYBOX_DIR/{dev,proc,sys,root} +sudo mknod -m 666 $BUSYBOX_DIR/dev/console c 5 1 +sudo mknod -m 666 $BUSYBOX_DIR/dev/null c 1 3 +echo "#!/bin/sh mount -t proc none /proc mount -t sysfs none /sys -exec /bin/sh -EOF +exec /bin/sh" > $BUSYBOX_DIR/init chmod +x $BUSYBOX_DIR/init -# Create device nodes -sudo mknod $BUSYBOX_DIR/dev/console c 5 1 -sudo mknod $BUSYBOX_DIR/dev/null c 1 3 - -# 2. Prepare Framebuffer -echo "Setting up framebuffer support..." -sudo mknod $BUSYBOX_DIR/dev/fb0 c 29 0 - -# 3. Create Image File -echo "Creating BusyBox disk image..." +# Step 3: Create and Format Disk Image +echo "Creating and formatting disk image..." dd if=/dev/zero of=$BUSYBOX_IMAGE bs=1M count=64 mkfs.ext4 $BUSYBOX_IMAGE sudo mount -o loop $BUSYBOX_IMAGE $TARGET_DIR sudo cp -r $BUSYBOX_DIR/* $TARGET_DIR/ sudo umount $TARGET_DIR -# 4. Transfer Precompiled Binary -echo "Transferring binary to BusyBox environment..." +# Step 4: Download Precompiled Kernel +if [ ! -f "$KERNEL_FILE" ]; then + echo "Downloading precompiled kernel..." + wget -O $KERNEL_FILE $PRECOMPILED_KERNEL +fi + +# Step 5: Transfer Precompiled Binary to BusyBox +echo "Transferring binary to BusyBox..." sudo mount -o loop $BUSYBOX_IMAGE $TARGET_DIR sudo cp $BINARY $TARGET_DIR/bin/ sudo umount $TARGET_DIR -# 5. Run in QEMU -echo "Starting BusyBox in QEMU with framebuffer..." -qemu-system-x86_64 -kernel busybox/arch/x86/boot/bzImage \ - -append "root=/dev/sda console=ttyS0" \ - -hda $BUSYBOX_IMAGE \ - -nographic - -echo "BusyBox environment setup complete." +# Step 6: Boot with QEMU +echo "Booting BusyBox with QEMU..." +qemu-system-x86_64 \ + -kernel $KERNEL_FILE \ + -append "root=/dev/sda console=ttyS0 init=/init" \ + -hda $BUSYBOX_IMAGE \ + -nographic -- cgit v1.2.3