4
[ "${BASH_VERSION:0:1}" -ge 4 ] || { echo "Bash 4.0 or later is required"; exit 1; }
6
DATADIR="$(dirname "$0")"
9
MODS_CONF=$CONFDIR/mods.conf
10
LDS_CONF=$CONFDIR/lds.conf
11
BUILD_CONF=$CONFDIR/build.conf
23
info "$1": "${!1}" "$2"
27
if [ -z "${!1}" ]; then
32
get_user_undef_guess() {
34
if [ -z "${!1+defined}" ]; then
38
guessed_info "$1" $label
41
get_user_empty_guess() {
42
get_user_undef_guess "$@"
47
cat $BUILD_CONF | gcc -P -E - | sed -n 's/ARCH *= *//p';
49
get_user_empty_guess AUTOQEMU_ARCH guess_arch
52
ram=$(cat $LDS_CONF | gcc -P -E - | sed -n 's/^RAM *([0-9x]*, *\([0-9]*\)M)/\1/p')
59
get_user_empty_guess AUTOQEMU_MEM guess_mem
62
cat $MODS_CONF | gcc -P -E - | sed -n 's-v loopback | head -n 1;
64
get_user_undef_guess AUTOQEMU_NICS guess_nics
66
guessed_info AUTOQEMU_NICS_CONFIG "(got)"
69
cat $MODS_CONF | gcc -P -E - | sed -n 's#.*include\ embox.driver.audio.\([a-z0-9_]\+\)\((.*)\|\)$#\1#p' | \
70
grep -v "portaudio_stub\|portaudio_lib" | head -n 1;
72
get_user_undef_guess AUTOQEMU_AUDIO guess_sound
74
guessed_info AUTOQEMU_AUDIO_CONFIG "(got)"
77
cat $MODS_CONF | gcc -P -E - | sed -n 's#.*include\ embox.driver.usb.hc.\([a-z0-9_]\+\)\((.*)\|\)$#\1#p' | head -n 1;
79
get_user_undef_guess AUTOQEMU_USB guess_usb
81
guessed_info AUTOQEMU_USB_CONFIG "(got)"
84
cat $MODS_CONF | gcc -P -E - | sed -n 's#.*include\ embox.driver.video.\([a-z0-9_]\+\)\((.*)\|\)$#\1#p' | head -n 3;
86
get_user_undef_guess AUTOQEMU_GRAPHIC guess_graphic
88
guessed_info AUTOQEMU_GRAPHIC_CONFIG "(got)"
91
cat $MODS_CONF | gcc -P -E - | sed -n 's/.*embox.driver.diag*[^"]*"\([^"]*\).*/\1/p' | head -n 1;
93
get_user_undef_guess AUTOQEMU_DIAG guess_diag
95
guessed_info AUTOQEMU_DIAG_CONFIG "(got)"
101
if [ "$AUTOQEMU_ARCH" = "x86" ] && [ "$OSTYPE" = "linux-gnu" ]; then
102
if grep -q -E '(vmx|svm)' /proc/cpuinfo; then
105
info VT is not supported by CPU
108
if dmesg | tail | grep -q "kvm: disabled by bios"; then
109
info "kvm disabled by bios. You can enable VT in bios"
113
if ! lsmod | grep -q -E '(kvm_intel|kvm_amd)'; then
114
info no kvm kernel module loaded
120
get_user_undef_guess AUTOQEMU_KVM_ARG guess_kvm
123
NAND_SIZE=$(cat $LDS_CONF | gcc -P -E - | sed -n 's/.*\<AUTOQEMU_UIMAGE_SIZE_MB=\([0-9]\+\).*$/\1/p')
124
if [ ! "$NAND_SIZE" ]; then
125
if [ "$AUTOQEMU_ARCH" = "riscv" ] || [ "$AUTOQEMU_ARCH" = "riscv64" ]; then
126
echo "-bios ${KERNEL:-./build/base/bin/embox}"
128
echo "-kernel ${KERNEL:-./build/base/bin/embox}"
131
if [ ! "$AUTOQEMU_NAND_BUILD_SKIP" ]; then
132
echo "Making uImage..." >&2
133
OMAP_UBOOT_IMAGE_BOARD=overo ./scripts/uboot-uimage >/dev/null
134
if [ 0 -ne $? ]; then
137
echo "Making nand image..." >&2
138
./scripts/qemu/beagle/run.sh beagle_nand.img ./uImage "$NAND_SIZE" >/dev/null 2>/dev/null
141
echo "-mtdblock beagle_nand.img"
144
get_user_empty_guess AUTOQEMU_LOAD_ARG guess_load_arg
147
case $AUTOQEMU_ARCH in
149
if cat $BUILD_CONF | gcc -P -E - | grep "overo" >/dev/null; then
151
elif cat $BUILD_CONF | gcc -P -E - | grep "SECO-Q7-796" >/dev/null; then
153
elif cat $BUILD_CONF | gcc -P -E - | grep "integratorcp" >/dev/null; then
154
echo "-M integratorcp"
155
elif cat $BUILD_CONF | gcc -P -E - | grep "vexpress-a9" > /dev/null; then
156
echo "-M vexpress-a9"
157
elif cat $BUILD_CONF | gcc -P -E - | grep "sabrelite" > /dev/null; then
159
elif cat $BUILD_CONF | gcc -P -E - | grep "lm3s811evb" > /dev/null; then
161
elif cat $BUILD_CONF | gcc -P -E - | grep "raspberry" > /dev/null; then
163
elif cat $BUILD_CONF | gcc -P -E - | grep "raspberry2" > /dev/null; then
168
echo "-M virt,gic_version=3 -cpu cortex-a53"
171
echo "-M petalogix-s3adsp1800"
174
if cat $BUILD_CONF | gcc -P -E - | grep "baikal-t" >/dev/null; then
176
elif cat $BUILD_CONF | gcc -P -E - | grep "mipssim" >/dev/null; then
184
echo "-M virtex-ml507"
187
echo "-M leon3_generic -cpu LEON3"
190
if cat $BUILD_CONF | gcc -P -E - | grep "sifive_e" >/dev/null; then
192
elif cat $BUILD_CONF | gcc -P -E - | grep "sifive_u" >/dev/null; then
205
get_user_undef_guess AUTOQEMU_MACHINE guess_machine
213
QEMU=${AUTOQEMU_PREFIX}qemu-system-${ARCH2QEMU[$AUTOQEMU_ARCH]:-$AUTOQEMU_ARCH}
214
AWK=$(which gawk >/dev/null && echo gawk || echo awk)
215
QEMU_VER=$($QEMU --version | $AWK -f "$DATADIR"/qemuver.awk)
217
if [ "$QEMU_VER" -gt 010200 ]; then
218
MB_XEMACLINE="xlnx.xps-ethernetlite"
220
MB_XEMACLINE="xilinx-ethlite"
226
[ne2k_pci]="ne2k_pci"
229
[xemaclite]=$MB_XEMACLINE
231
[lan91c111]="smc91c111"
236
[cadence_gem]="cadence_gem"
239
IFS=" " read -r -a qemu_nics <<< "$AUTOQEMU_NICS"
240
IFS=" " read -r -a qemu_nics_config <<< "$AUTOQEMU_NICS_CONFIG"
243
nic_n=${#qemu_nics[*]}
244
if [ "$nic_n" -gt 0 ]; then
246
for ni in "${!qemu_nics[@]}"; do
248
nic_model=${NIC2QEMU[${qemu_nics[$ni]}]}
250
if [ ! "$nic_model" ]; then
251
error "nic model ${qemu_nics[$ni]} is not supported"
254
if [ "${qemu_nics_config[$ni]}" ] && [ "${qemu_nics_config[$ni]}" != "-" ]; then
255
host_nic_config=${qemu_nics_config[$ni]}
257
host_nic_config="tap,script=$DATADIR/start_script,downscript=$DATADIR/stop_script"
258
if [ "$nic_model" = "virtio" ]; then
259
host_nic_config="$host_nic_config,vnet_hdr=no"
263
nic_macaddr="AA:BB:CC:DD:EE:0$(($ni + 2))"
265
if [ "$nic_model" = "usb-net" ]; then
266
nic_lines="$nic_lines \
267
-device usb-net,netdev=n$ni,mac=$nic_macaddr"
269
nic_lines="$nic_lines \
270
-net nic,netdev=n$ni,model=$nic_model,macaddr=$nic_macaddr"
276
nic_lines="$nic_lines \
277
-netdev $host_nic_config,id=n$ni"
288
[aaci_pl041]="default"
291
AUDIO_DEV=" " read -r -a qemu_sound <<< "$AUTOQEMU_AUDIO"
294
sound_n=${#qemu_sound[*]}
295
if [ "$sound_n" -gt 0 ]; then
297
for so in "${!qemu_sound[@]}"; do
298
sound_model=${AUDIO2QEMU[${qemu_sound[$so]}]}
300
if [ "$sound_model" != "default" ]; then
301
if [ ! "$sound_model" ]; then
302
error "sound model ${qemu_sound[$ni]} is not supported"
304
sound_lines="$sound_lines -soundhw $sound_model"
307
if [[ -z "${QEMU_AUDIO_DRV}" ]]; then
309
export QEMU_AUDIO_DRV=alsa
310
info 'Using host ALSA subsystem. You can change it by setting QEMU_AUDIO_DRV'
311
info 'For example, "export QEMU_AUDIO_DRV=oss"\n'
313
info 'QEMU_AUDIO_DRV is now' "${QEMU_AUDIO_DRV}" '\n'
324
[ehci_pci]="usb-ehci"
325
[ohci_pci]="pci-ohci"
326
[uhci_pci]="piix3-usb-uhci"
335
USB_DEV=" " read -r -a qemu_usb <<< "$AUTOQEMU_USB"
339
if [ "$usb_n" -gt 0 ]; then
341
for so in "${!qemu_usb[@]}"; do
342
usb_model=${USB2QEMU[${qemu_usb[$so]}]}
343
hci_id=${USB2QEMUID[${qemu_usb[$so]}]}
345
if [ ! "$usb_model" ]; then
346
error "usb model ${qemu_usb[$ni]} is not supported"
348
usb_lines="$usb_lines -device $usb_model,id=$hci_id"
357
declare -A GRAPHIC2QEMU
360
[cirrus_logic]="cirrus"
364
qemu_graphic=$(guess_graphic)
365
graphic_lines="-nographic"
366
graphic_n=${#qemu_graphic[*]}
367
if [ "$graphic_n" -gt 0 ]; then
368
if [ -z "${AUTOQEMU_NOGRAPHIC_ARG+defined}" ]; then
369
for so in $qemu_graphic; do
370
graphic_model=${GRAPHIC2QEMU[$so]}
371
if [ ! "$graphic_model" ]; then
372
graphic_lines="-nographic"
374
if [ "$graphic_model" = "pl110" ]; then
375
graphic_lines="-serial mon:stdio"
377
graphic_lines="-vga $graphic_model -serial mon:stdio"
382
if [ "$graphic_lines" = "-nographic" ]; then
383
if [ "$(guess_diag)" = "embox__driver__console__vc__vga" ]; then
384
graphic_lines="-vga std"
389
graphic_lines=$AUTOQEMU_NOGRAPHIC_ARG
396
if [[ "$(id -u)" -ne 0 ]] ; then
397
RUNAS="-runas $(whoami)"
401
ARG_LINE="$sudo $QEMU $RUNAS $AUTOQEMU_MACHINE $AUTOQEMU_LOAD_ARG $AUTOQEMU_KVM_ARG -m $AUTOQEMU_MEM $usb_lines $nic_lines $sound_lines $graphic_lines $@"
406
if [ -f beagle_nand.img ]; then