#!/bin/bash if [ ! -f local-config.sh ] ; then echo "local-config.sh does not exist" exit 1 fi source local-config.sh if [ -z "$EHSIM_BASE" ] ; then echo "\$EHSIM_BASE should be set to the absolute path of the root"\ "of this repo (local-config.sh)" exit 1 fi if [ -z "$QEMU_CMD" ] ; then echo "\$QEMU_CMD should be set to the absolute path to a QEMU instance"\ "with cosim support (local-config.sh)" exit 1 fi QEMU_BASE_IMAGE=$EHSIM_BASE/images/output-ubuntu1804/ubuntu1804 QEMU_KERNEL=$EHSIM_BASE/images/bzImage # Args: # - experiment name init_out() { export OUTDIR=./out/$1 rm -rf $OUTDIR mkdir -p $OUTDIR } # Args: # - Instance name # - Cosim instance # - secondary hard drive run_qemu() { img_a="$OUTDIR/qemu.hd.a.$1" img_b="$OUTDIR/qemu.hd.b.$1" pcisock="$OUTDIR/pci.$2" rm -f $img_a $img_b echo Creating disk for qemu $1 qemu-img create -f qcow2 -o backing_file=$QEMU_BASE_IMAGE $img_a cp $3 $img_b echo Starting qemu $1 $QEMU_CMD -machine q35 -cpu host \ -drive file=$img_a,if=ide,index=0 \ -drive file=$img_b,if=ide,index=1,driver=raw \ -kernel $QEMU_KERNEL \ -append "earlyprintk=ttyS0 console=ttyS0 root=/dev/sda1 init=/home/ubuntu/guestinit.sh rw" \ -serial mon:stdio -m $((4 * 1024)) -smp 1 -display none -enable-kvm \ -nic none \ -chardev socket,path=$pcisock,id=cosimcd \ -device cosim-pci,chardev=cosimcd &>$OUTDIR/qemu.$1.log & pid=$! ALL_PIDS="$ALL_PIDS $pid" return $pid } # Args: # - Instance name run_corundum_verilator() { echo Starting corundum_verilator $1 $EHSIM_BASE/corundum/corundum_verilator \ $OUTDIR/pci.$1 $OUTDIR/eth.$1 $OUTDIR/shm.$1 \ &>$OUTDIR/corundum_verilator.$1.log & pid=$! ALL_PIDS="$ALL_PIDS $pid" return $pid } # Args: # - Instance name run_corundum_bm() { echo Starting corundum_bm $1 $EHSIM_BASE/corundum_bm/corundum_bm \ $OUTDIR/pci.$1 $OUTDIR/eth.$1 $OUTDIR/shm.$1 \ &>$OUTDIR/corundum_bm.$1.log & pid=$! ALL_PIDS="$ALL_PIDS $pid" return $pid } # Args: # - Instance name # - sim instance 1 # - sim instance 2 run_wire() { echo Starting wire $1 $EHSIM_BASE/net_wire/net_wire \ $OUTDIR/eth.$2 $OUTDIR/eth.$3 &>$OUTDIR/wire.$1.log & pid=$! ALL_PIDS="$ALL_PIDS $pid" return $pid } cleanup() { echo Cleaning up for p in $ALL_PIDS ; do kill -KILL $p &>/dev/null done rm -f $OUTDIR/{qemu.hd.*,shm.*,pci.*,eth.*} }