2019-01-02 23:46:01 -05:00
|
|
|
./need.sh python kvm busybox
|
|
|
|
|
|
|
|
|
|
redo-ifchange "$2.initrd" memcalc.py
|
2019-02-02 23:54:27 -05:00
|
|
|
rm -f "$1.out" "$1.code"
|
2019-01-02 23:46:01 -05:00
|
|
|
|
|
|
|
|
# Linux only allows an initrd of size < 50% of RAM,
|
|
|
|
|
# so set a RAM amount based on the initrd size.
|
|
|
|
|
mem=$(./memcalc.py "$2.initrd")
|
2019-01-14 06:44:55 +00:00
|
|
|
echo "$2: kvm memory required: $mem" >&2
|
2019-01-02 23:46:01 -05:00
|
|
|
|
|
|
|
|
kvm \
|
|
|
|
|
-m "$mem" \
|
|
|
|
|
-kernel /boot/vmlinuz-$(uname -r) \
|
|
|
|
|
-initrd "$2.initrd" \
|
|
|
|
|
-append 'rdinit=/rdinit panic=1 console=ttyS0 loglevel=4' \
|
|
|
|
|
-no-reboot \
|
|
|
|
|
-display none \
|
|
|
|
|
-chardev stdio,mux=on,id=char0 \
|
2019-02-02 23:54:27 -05:00
|
|
|
-chardev file,id=char1,path="$1.out" \
|
|
|
|
|
-chardev file,id=char2,path="$1.code" \
|
2019-01-02 23:46:01 -05:00
|
|
|
-serial chardev:char0 \
|
|
|
|
|
-serial chardev:char1 \
|
2019-01-14 06:44:55 +00:00
|
|
|
-serial chardev:char2 >&2
|
2019-02-20 19:14:37 -05:00
|
|
|
fix_cr() {
|
|
|
|
|
# serial devices use crlf (\r\n) as line
|
|
|
|
|
# endings instead of just lf (\n).
|
|
|
|
|
sed -e 's/\r//g'
|
|
|
|
|
}
|
|
|
|
|
rv=$(fix_cr <"$1.code")
|
|
|
|
|
[ -n "$rv" ] || exit 99
|
2019-01-02 23:46:01 -05:00
|
|
|
if [ "$rv" -eq 0 ]; then
|
2019-02-20 19:14:37 -05:00
|
|
|
fix_cr <"$1.out" >$3
|
2019-01-02 23:46:01 -05:00
|
|
|
echo "ok." >&2
|
|
|
|
|
else
|
|
|
|
|
echo "kvm program returned error: $rv" >&2
|
|
|
|
|
fi
|
|
|
|
|
exit "$rv"
|