1#!/usr/bin/env bash 2 3DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 4 5function HELP { 6 echo "help:" 7 echo "-6 : x86-64" 8 echo "-l : legacy mode build (386 emulated machine)" 9 echo "-m <memory in MB>" 10 echo "-s <number of cpus>" 11 echo "-d <disk image> : a virtio block device" 12 echo "-n : a virtio network device" 13 echo "-g : with graphics" 14 echo "-k : use KVM" 15 echo "-h for help" 16 echo "all arguments after -- are passed to qemu directly" 17 exit 1 18} 19 20DO_64BIT=0 21DO_LEGACY=0 22DO_GRAPHICS=0 23DO_KVM=0 24DO_DISK=0 25DISK_IMAGE="" 26DO_NET=0 27MEMSIZE=0 28SMP=1 29SUDO="" 30MAKE_VARS="" 31 32while getopts 6d:gklm:ns:h FLAG; do 33 case $FLAG in 34 6) DO_64BIT=1;; 35 d) DO_DISK=1; DISK_IMAGE=$OPTARG;; 36 g) DO_GRAPHICS=1;; 37 k) DO_KVM=1;; 38 l) DO_LEGACY=1;; 39 m) MEMSIZE=$OPTARG;; 40 n) DO_NET=1;; 41 s) SMP=$OPTARG;; 42 h) HELP;; 43 \?) 44 echo unrecognized option 45 HELP 46 esac 47done 48 49shift $((OPTIND-1)) 50 51# pick the appropriate qemu and project 52if (( $DO_64BIT )); then 53 QEMU="qemu-system-x86_64" 54 PROJECT="pc-x86-64-test" 55 CPU=qemu64 56 MACHINE=q35 57elif (( $DO_LEGACY )); then 58 QEMU="qemu-system-i386" 59 PROJECT="pc-x86-legacy-test" 60 CPU=486 61 MACHINE=isapc 62else 63 QEMU="qemu-system-i386" 64 PROJECT="pc-x86-test" 65 CPU=qemu32 66 MACHINE=q35 67fi 68 69if (( $DO_LEGACY )); then 70 if (( ! $MEMSIZE )); then 71 MEMSIZE=4 72 fi 73else 74 if (( ! $MEMSIZE )); then 75 MEMSIZE=512 76 fi 77fi 78 79ARGS="" 80if (( $DO_KVM )); then 81 ARGS+=" -enable-kvm -cpu host" 82else 83 ARGS+=" -cpu $CPU" 84fi 85ARGS+=" -m $MEMSIZE -smp $SMP -machine $MACHINE -kernel build-${PROJECT}/lk.elf" 86 87ARGS+=" -device isa-debug-exit,iobase=0xf4,iosize=0x04" 88# Override the SeaBIOS serial port to keep it from outputting 89# a terminal reset on start. 90ARGS+=" -fw_cfg name=etc/sercon-port,string=0" 91 92if (( ! $DO_GRAPHICS )); then 93 ARGS+=" -nographic" 94else 95 ARGS+=" -serial stdio -vga std" 96fi 97 98if (( $DO_DISK )); then 99 if (( ! $DO_LEGACY )); then 100 ARGS+=" -drive if=none,file=${DISK_IMAGE},id=blk -device virtio-blk-pci,drive=blk" 101 else 102 ARGS+=" -hda ${DISK_IMAGE}" 103 fi 104fi 105if (( $DO_NET )); then 106 if (( ! $DO_LEGACY )); then 107 ARGS+=" -netdev user,id=vmnic,hostname=qemu -device virtio-net-pci,netdev=vmnic" 108 else 109 echo "implement legacy + network config" 110 exit 1 111 fi 112else 113 ARGS+=" -nic none" 114fi 115 116$DIR/make-parallel $MAKE_VARS $PROJECT && 117echo $SUDO $QEMU $ARGS $@ && 118$SUDO $QEMU $ARGS $@ 119 120