blob: 8dd5216f3dbcfdfaf0f044388d0d1740a47a024f [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2010 - 2016, Linaro Limited.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Maintainer: Riku Voipio <riku.voipio@linaro.org>
# Create cloud-config image to set up credentials for image
configure_guest()
{
IP=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
SSH_KEY=$(head -1 /root/.ssh/authorized_keys||head -1 "${HOME}/.ssh/authorized_keys")
sed -e "s,LAVA_KEY,$SSH_KEY,g" -e "s,LOCALIP,$IP,g" cloudinit.txt > cloudinit.tmp
cat cloudinit.tmp
cloud-localds cloud.img cloudinit.tmp
}
# Download url and puts the filename of downloaded file in first argument
download_file()
{
local _outvar=$1
local url=$2
local filename
filename=$(basename "${url}")
if [ ! -e "${filename}" ]
then
if [ -z "${url}" ] || [ "${url}" = none ]
then
>&2 echo "Error, url for $_outvar not set!"
exit 2
fi
if ! curl --retry 3 -SsOL "${url}"
then
>&2 echo "Error downloading $url for $_outvar"
exit 3
fi
fi
# shellcheck disable=SC2086
eval $_outvar=\$filename
}
start_qemu_x86_64_aarch64()
{
image=$1
download_file efi "${GUEST_FIRMWARE}"
set -x
# shellcheck disable=SC2154
qemu-system-aarch64 -smp "${GUEST_CORES}" -m "${GUEST_RAM}" -cpu cortex-a57 -M virt \
-bios "${efi}" \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file="${image}" \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
-daemonize -display vnc=none \
-pidfile /run/qemu.pid \
-serial file:qemu_aarch64.log
}
start_qemu_aarch64_aarch64()
{
image=$1
download_file efi "${GUEST_FIRMWARE}"
set -x
# shellcheck disable=SC2154
qemu-system-aarch64 -smp "${GUEST_CORES}" -m "${GUEST_RAM}" -cpu host -M virt \
-bios "${efi}" \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file="${image}" \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
-daemonize -enable-kvm -display vnc=none \
-pidfile /run/qemu.pid \
-serial file:kvm-aarch64_aarch64.log
}
start_qemu_x86_64_armv7l()
{
image=$1
download_file kernel "${GUEST_KERNEL}"
set -x
# shellcheck disable=SC2154
qemu-system-arm -smp "${GUEST_CORES}" -m "${GUEST_RAM}" -cpu cortex-a15 -M virt \
-kernel "${kernel}" \
-append "root=/dev/vdb1 rw rootwait mem=${GUEST_RAM}M console=ttyAMA0,38400n8" \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file="${image}" \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
-daemonize -display vnc=none \
-serial file:qemu_armv7l.log
}
start_qemu_aarch64_armv7l()
{
image=$1
download_file kernel "${GUEST_KERNEL}"
set -x
# shellcheck disable=SC2154
qemu-system-aarch64 -smp "${GUEST_CORES}" -m "${GUEST_RAM}" -cpu host,aarch64=off -M virt \
-kernel "${kernel}" \
-append "root=/dev/vdb1 rw rootwait mem=${GUEST_RAM}M console=ttyAMA0,38400n8" \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file="${image}" \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
-daemonize -enable-kvm -display vnc=none \
-pidfile /run/qemu.pid \
-serial file:kvm-aarch64_armv7l.log
}
start_qemu_armv7l_armv7l()
{
image=$1
download_file kernel "${GUEST_KERNEL}"
set -x
# shellcheck disable=SC2154
qemu-system-arm -smp "${GUEST_CORES}" -m "${GUEST_RAM}" -cpu cortex-a15 -M vexpress-a15 \
-kernel "${kernel}" \
-append "root=/dev/vdb1 rw rootwait mem=${GUEST_RAM}M console=ttyAMA0,38400n8" \
-device virtio-blk-device,drive=image \
-drive if=none,id=image,file="${image}" \
-device virtio-blk-device,drive=cloud \
-drive if=none,id=cloud,file=cloud.img \
-device virtio-net-device,netdev=tap0 -netdev tap,id=tap0,script=no,downscript=no,ifname=tap0 \
-daemonize -enable-kvm -display vnc=none \
-pidfile /run/qemu.pid \
-serial file:kvm-armv7l_armv7l.log
}
# This testcase expects a predefined br0 to connect to
tunctl -u root
ifconfig tap0 0.0.0.0 up
brctl addif br0 tap0
ARCH=$(uname -m)
GUEST_ARCH=$1
GUEST_IMAGE=$2
GUEST_FIRMWARE=$3
GUEST_KERNEL=$4
GUEST_CORES=${5:-2}
GUEST_RAM=${6:-1024}
download_file IMAGE "${GUEST_IMAGE}"
configure_guest
if grep -q Juno /proc/device-tree/model
then
echo "Juno detected, forcing a53 cluster"
hwloc-bind socket:0 --pid $$
fi
# shellcheck disable=SC2153,SC2086
start_qemu_${ARCH}_${GUEST_ARCH} "${IMAGE}"
sleep 10
# shellcheck disable=SC2035
tail *.log