Fix cf_emu.sh
Use an operator that detects the difference between empty string
and no value set.
Specify bash when using [[
Drop the initrd argument if no ramdisk is provided
Change-Id: Icd66be9b0b6c1a0840f076379e93c7c1456d4106
Merged-In: Icd66be9b0b6c1a0840f076379e93c7c1456d4106
BUG: 110579921
Test: Local boot with launch_cvd
(cherry picked from commit 71633c837cf99fc105285ed046983f4612ea9fb7)
diff --git a/host/libs/vm_manager/cf_qemu.sh b/host/libs/vm_manager/cf_qemu.sh
index 1b9e184..ba45ffa 100644
--- a/host/libs/vm_manager/cf_qemu.sh
+++ b/host/libs/vm_manager/cf_qemu.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
#
# Copyright (C) 2018 The Android Open Source Project
@@ -34,48 +34,55 @@
exit 1
fi
-exec "${qemu_binary=/usr/bin/qemu-system-x86_64}" \
- -enable-kvm \
- -name "guest=${instance_name=${default_instance_name}},debug-threads=on" \
- -machine "pc-i440fx-2.8,accel=kvm,usb=off,dump-guest-core=off" \
- -m "${memory_mb=2048}" \
- -realtime mlock=off \
- -smp "${cpus=2},sockets=${cpus=2},cores=1,threads=1" \
- -uuid "${uuid=${default_uuid}}"\
- -display none \
- -no-user-config \
- -nodefaults \
- -chardev "socket,id=charmonitor,path=${monitor_path=${default_dir}/qemu_monitor.sock},server,nowait" \
- -mon "chardev=charmonitor,id=monitor,mode=control" \
- -rtc "base=utc" \
- -no-shutdown \
- -boot "strict=on" \
- -kernel "${kernel_image_path=${HOME}/kernel}" \
- -initrd "${ramdisk_image_path=${HOME}/ramdisk.img}" \
- -append "${kernel_args="loop.max_part=7 console=ttyS0 androidboot.console=ttyS1 androidboot.hardware=vsoc enforcing=0 audit=1 androidboot.selinux=permissive mac80211_hwsim.radios=0 security=selinux buildvariant=userdebug androidboot.serialno=CUTTLEFISHCVD01 androidboot.lcd_density=160"}" \
- -dtb "${dtb_path=${HOME}/config/cuttlefish.dtb}" \
- -device "piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2" \
- -device "virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3" \
- -drive "file=${system_image_path=${HOME}/system.img},format=raw,if=none,id=drive-virtio-disk0,aio=threads" \
- -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1" \
- -drive "file=${data_image_path=${HOME}/userdata.img},format=raw,if=none,id=drive-virtio-disk1,aio=threads" \
- -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1" \
- -drive "file=${cache_image_path=${HOME}/cache.img},format=raw,if=none,id=drive-virtio-disk2,aio=threads" \
- -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,id=virtio-disk2" \
- -drive "file=${vendor_image_path=${HOME}/vendor.img},format=raw,if=none,id=drive-virtio-disk3,aio=threads" \
- -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk3,id=virtio-disk3" \
- -netdev "tap,id=hostnet0,ifname=${mobile_tap_name=${default_mobile_tap_name}},script=no,downscript=no" \
- -device "virtio-net-pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x2" \
- -chardev "socket,id=charserial0,path=${kernel_log_socket_name=${default_dir}/kernel-log}" \
- -device "isa-serial,chardev=charserial0,id=serial0" \
- -chardev "socket,id=charserial1,path=${console_path=${default_dir}/console},server,nowait" \
- -device "isa-serial,chardev=charserial1,id=serial1" \
- -chardev "file,id=charchannel0,path=${logcat_path=${default_dir}/logcat},append=on" \
- -device "virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=cf-logcat" \
- -device "virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8" \
- -object "rng-random,id=objrng0,filename=/dev/urandom" \
- -device "virtio-rng-pci,rng=objrng0,id=rng0,max-bytes=1024,period=2000,bus=pci.0,addr=0x9" \
- -chardev "socket,path=${ivshmem_qemu_socket_path=${default_dir}/ivshmem_socket_qemu},id=ivsocket" \
- -device "ivshmem-doorbell,chardev=ivsocket,vectors=${ivshmem_vector_count}" \
- -cpu host \
+args=(
+ -enable-kvm
+ -name "guest=${instance_name:-${default_instance_name}},debug-threads=on"
+ -machine "pc-i440fx-2.8,accel=kvm,usb=off,dump-guest-core=off"
+ -m "${memory_mb:-2048}"
+ -realtime mlock=off
+ -smp "${cpus:-2},sockets=${cpus:-2},cores=1,threads=1"
+ -uuid "${uuid:-${default_uuid}}"
+ -display none
+ -no-user-config
+ -nodefaults
+ -chardev "socket,id=charmonitor,path=${monitor_path:-${default_dir}/qemu_monitor.sock},server,nowait"
+ -mon "chardev=charmonitor,id=monitor,mode=control"
+ -rtc "base=utc"
+ -no-shutdown
+ -boot "strict=on"
+ -kernel "${kernel_image_path:-${HOME}/kernel}"
+ -append "${kernel_args:-"loop.max_part=7 console=ttyS0 androidboot.console=ttyS1 androidboot.hardware=vsoc enforcing=0 audit=1 androidboot.selinux=permissive mac80211_hwsim.radios=0 security=selinux buildvariant=userdebug androidboot.serialno=CUTTLEFISHCVD01 androidboot.lcd_density=160"}"
+ -dtb "${dtb_path:-${HOME}/config/cuttlefish.dtb}"
+ -device "piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2"
+ -device "virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x3"
+ -drive "file=${system_image_path:-${HOME}/system.img},format=raw,if=none,id=drive-virtio-disk0,aio=threads"
+ -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1"
+ -drive "file=${data_image_path:-${HOME}/userdata.img},format=raw,if=none,id=drive-virtio-disk1,aio=threads"
+ -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1"
+ -drive "file=${cache_image_path:-${HOME}/cache.img},format=raw,if=none,id=drive-virtio-disk2,aio=threads"
+ -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,id=virtio-disk2"
+ -drive "file=${vendor_image_path:-${HOME}/vendor.img},format=raw,if=none,id=drive-virtio-disk3,aio=threads"
+ -device "virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk3,id=virtio-disk3"
+ -netdev "tap,id=hostnet0,ifname=${mobile_tap_name:-${default_mobile_tap_name}},script=no,downscript=no"
+ -device "virtio-net-pci,netdev=hostnet0,id=net0,bus=pci.0,addr=0x2"
+ -chardev "socket,id=charserial0,path=${kernel_log_socket_name:-${default_dir}/kernel-log}"
+ -device "isa-serial,chardev=charserial0,id=serial0"
+ -chardev "socket,id=charserial1,path=${console_path:-${default_dir}/console},server,nowait"
+ -device "isa-serial,chardev=charserial1,id=serial1"
+ -chardev "file,id=charchannel0,path=${logcat_path:-${default_dir}/logcat},append=on"
+ -device "virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=cf-logcat"
+ -device "virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x8"
+ -object "rng-random,id=objrng0,filename=/dev/urandom"
+ -device "virtio-rng-pci,rng=objrng0,id=rng0,max-bytes=1024,period=2000,bus=pci.0,addr=0x9"
+ -chardev "socket,path=${ivshmem_qemu_socket_path:-${default_dir}/ivshmem_socket_qemu},id=ivsocket"
+ -device "ivshmem-doorbell,chardev=ivsocket,vectors=${ivshmem_vector_count}"
+ -cpu host
-msg "timestamp=on"
+)
+
+if [[ -n "${ramdisk_image_path}" ]]; then
+ args+=(-initrd "${ramdisk_image_path}")
+fi
+
+exec "${qemu_binary=/usr/bin/qemu-system-x86_64}" \
+ "${args[@]}"