forked from dan/liminix
1
0
Fork 0
liminix/pkgs/run-liminix-vm/run-liminix-vm.sh

70 lines
1.9 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
cleanup(){
test -n "$rootfs" && test -f $rootfs && rm $rootfs
}
trap 'exit 1' INT HUP QUIT TERM ALRM USR1
trap 'cleanup' EXIT
usage(){
echo "usage: $(basename $0) [--background /path/to/state_directory] kernel rootimg [initramfs]"
echo -e "\nWithout --background, use C-p c (not C-a c) to switch to the monitor"
exit 1
}
2022-09-24 20:03:26 +00:00
arch="mips"
if test "$1" = "--arch" ; then
arch=$2
shift;shift
fi
2022-09-24 20:03:26 +00:00
if test "$1" = "--background" ; then
statedir=$2
if test -z "$statedir" || ! test -d $statedir ; then
usage
fi
pid="${statedir}/pid"
socket="${statedir}/console"
monitor="${statedir}/monitor"
2022-09-26 09:47:29 +00:00
echo "running in background, socket is $socket, pid $pid"
flags="--daemonize --pidfile $pid -serial unix:$socket,server,nowait -monitor unix:$monitor,server,nowait"
2022-09-24 20:03:26 +00:00
shift;shift
else
flags="-serial mon:stdio"
fi
test -n "$2" || usage
lan=${LAN-"socket,mcast=230.0.0.1:1235,localaddr=127.0.0.1"}
2023-09-20 17:33:08 +00:00
rootfs=$(mktemp run-liminix-vm-fs-XXXXXX)
2023-04-15 16:22:35 +00:00
dd if=/dev/zero of=$rootfs bs=1M count=16 conv=sync
dd if=$2 of=$rootfs bs=65536 conv=sync,nocreat,notrunc
if test -n "$3"; then
initramfs="-initrd $3"
fi
case "$arch" in
mips)
QEMU="qemu-system-mips -M malta"
;;
aarch64)
QEMU="qemu-system-aarch64 -M virt -semihosting -cpu cortex-a72"
;;
esac
2022-09-27 13:06:39 +00:00
INIT=${INIT-/bin/init}
set -x
$QEMU \
-m 256 \
2022-09-24 20:03:26 +00:00
-echr 16 \
-append "$CMDLINE liminix root=/dev/mtdblock0 block2mtd.block2mtd=/dev/vda,65536" \
2023-04-15 16:22:35 +00:00
-drive file=$rootfs,format=raw,readonly=off,if=virtio,index=0 \
${initramfs} \
-netdev socket,id=access,mcast=230.0.0.1:1234,localaddr=127.0.0.1 \
-device virtio-net,disable-legacy=on,disable-modern=off,netdev=access,mac=ba:ad:1d:ea:21:02 \
-netdev ${lan},id=lan \
-device virtio-net,disable-legacy=on,disable-modern=off,netdev=lan,mac=ba:ad:1d:ea:21:01 \
-kernel $1 -display none $flags ${QEMU_OPTIONS}