summaryrefslogtreecommitdiff
path: root/qemu-boot
diff options
context:
space:
mode:
Diffstat (limited to 'qemu-boot')
-rwxr-xr-xqemu-boot71
1 files changed, 71 insertions, 0 deletions
diff --git a/qemu-boot b/qemu-boot
new file mode 100755
index 0000000..6b98f47
--- /dev/null
+++ b/qemu-boot
@@ -0,0 +1,71 @@
+#!/bin/sh -e
+
+# if you use QEMU user mode networking, endpoint 127.0.0.1:2222 on the host will be forwarded to port 22 in the guest
+SSH_PORTFORWARD=${SSH_PORTFORWARD:-2222}
+
+virtioblk=virtio-blk-device
+virtionet=virtio-net-device
+
+case "$QEMU_ARCH" in
+ i386)
+ qemu_sysoptions="-smp 2 -m 2G"
+ qemu_console=ttyS0
+ nic=e1000
+ diskoption="-drive file=$OUTPUT/disk-image.raw,media=disk,format=raw,if=none,id=sata0 -device ich9-ahci,id=ahci -device ide-drive,drive=sata0,bus=ahci.0" ;;
+ x86_64)
+ qemu_sysoptions="-enable-kvm -cpu host -smp 4 -m 16G"
+ qemu_console=ttyS0
+ nic=e1000
+ virtioblk=virtio-blk-pci
+ virtionet=virtio-net-pci
+ diskoption="-drive file=$OUTPUT/disk-image.raw,media=disk,format=raw,if=none,id=sata0 -device ich9-ahci,id=ahci -device ide-drive,drive=sata0,bus=ahci.0" ;;
+ arm)
+ qemu_sysoptions="-m 1G -M vexpress-a9 -cpu cortex-a9 -dtb sub/disk-image/vexpress-v2p-ca9.dtb"
+ qemu_console=ttyAMA0
+ USE_VIRTIO_NETWORK=true # we only support virtio on armv7
+ diskoption="-sd $OUTPUT/disk-image.raw" ;;
+ aarch64)
+ qemu_sysoptions="-M virt -cpu cortex-a57 -m 2G"
+ qemu_console=ttyAMA0
+ USE_VIRTIO_NETWORK=true # we only support virtio on armv8
+ diskoption="-device sdhci-pci -device sd-card,drive=sdcard -drive file=$OUTPUT/disk-image.raw,id=sdcard,cache=unsafe,if=none,format=raw" ;;
+esac
+
+nographic=-nographic
+
+# On graphical mode, enforce tty1 as the console
+if $USE_GRAPHIC ; then
+ qemu_console=tty1
+ nographic=
+fi
+
+# If the image has been compiled for a virtual disk (/dev/vda)
+if $USE_VIRTIO_DISK ; then
+ diskoption="-drive file=$OUTPUT/disk-image.raw,format=raw,if=none,id=disk -device $virtioblk,drive=disk"
+fi
+
+if $USE_VIRTIO_NETWORK ; then
+ nic=$virtionet
+fi
+
+qemu_guestnetoptions="-device $nic,netdev=network"
+
+# running in QEMU with TAP networking (need to be root to configure the host)
+# or running QEMU in user-mode networking (which is the default in QEMU), with redirection of port 2222 to 22
+if $USE_TAP ; then
+ qemu_hostnetoptions="-netdev tap,id=network,ifname=tap0,script=no,downscript=no"
+else
+ qemu_hostnetoptions="-netdev user,id=network,hostfwd=tcp:127.0.0.1:${SSH_PORTFORWARD}-:22"
+fi
+
+# echo qemu-system-$QEMU_ARCH $nographic $qemu_sysoptions $qemu_guestnetoptions $qemu_hostnetoptions \
+# -append "console=$qemu_console" \
+# -kernel "$OUTPUT/kernel" \
+# -initrd "$OUTPUT/initramfs.img.gz" \
+# $diskoption
+
+exec qemu-system-$QEMU_ARCH $nographic $qemu_sysoptions $qemu_guestnetoptions $qemu_hostnetoptions \
+ -append "console=$qemu_console" \
+ -kernel "$OUTPUT/kernel" \
+ -initrd "$OUTPUT/initramfs.img.gz" \
+ $diskoption