summaryrefslogtreecommitdiff
path: root/fbgl_qemu_test_env.sh
blob: 9957e1aa5068570d5e0d46597b571546b8be43ca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/bin/bash

# Variables
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
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

# Step 1: Download and Build BusyBox
echo "Setting up BusyBox environment..."
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-${BUSYBOX_VERSION}
make defconfig
sed -i 's/# CONFIG_STATIC/CONFIG_STATIC=y/' .config  # Enable static binary
make -j$(nproc) install CONFIG_PREFIX=../$BUSYBOX_DIR
cd ..

# 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" > $BUSYBOX_DIR/init
chmod +x $BUSYBOX_DIR/init

# 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

# 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

# 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