summaryrefslogtreecommitdiff
path: root/qemu-boot
blob: b91d8e77bc1d7500b9be4c306ad8dc542a934bf5 (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
#!/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 500M"
    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"
    rootpartition=/dev/sda1 ;;
  x86_64)
    qemu_sysoptions="-enable-kvm -cpu host -smp 4 -m 500M"
    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"
    rootpartition=/dev/sda1 ;;
  arm)
    qemu_sysoptions="-m 500M -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"
    rootpartition=/dev/hda1 ;;
  aarch64)
    qemu_sysoptions="-M virt -cpu cortex-a57 -m 500M"
    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"
    rootpartition=/dev/hda1 ;;
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"
  rootpartition=/dev/vda1
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

exec qemu-system-$QEMU_ARCH $nographic $qemu_sysoptions $qemu_guestnetoptions $qemu_hostnetoptions \
  -append "console=$qemu_console root=$rootpartition" \
  -kernel "$OUTPUT/kernel" \
  $diskoption