blob: 8f41fc02df310bec62e459dd1907a83d9ee48f60 [file] [log] [blame]
#!/bin/bash
if [ $# -eq 0 ]; then
echo "Usage $0 TEST_CASE [QEMU_ARGS]"
exit 2
fi
if [ ! -f config.mak ]; then
echo "run './configure --enable-efi && make' first. See ./configure -h"
exit 2
fi
source config.mak
source scripts/arch-run.bash
if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
fi
KERNEL_NAME=$1
: "${EFI_SRC:=$TEST_DIR}"
: "${EFI_UEFI:=$DEFAULT_UEFI}"
: "${EFI_TEST:=efi-tests}"
: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
: "${EFI_TESTNAME:=$TESTNAME}"
: "${EFI_TESTNAME:=$EFI_CASE}"
: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}"
if [ ! -f "$EFI_UEFI" ]; then
echo "UEFI firmware not found."
echo "Please specify the path with the env variable EFI_UEFI"
exit 2
fi
# Remove the TEST_CASE from $@
shift 1
# Fish out the arguments for the test, they should be the next string
# after the "-append" option
qemu_args=()
cmd_args=()
while (( "$#" )); do
if [ "$1" = "-append" ]; then
cmd_args=("$2")
shift 2
else
qemu_args+=("$1")
shift 1
fi
done
if [ "$EFI_USE_ACPI" != "y" ]; then
qemu_args+=(-machine acpi=off)
fi
if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then
EFI_CASE_DIR="$EFI_TEST/dummy"
mkdir -p "$EFI_CASE_DIR"
$TEST_DIR/run \
$EFI_CASE \
-bios "$EFI_UEFI" \
-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
"${qemu_args[@]}"
exit
fi
uefi_shell_run()
{
mkdir -p "$EFI_CASE_DIR"
cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/"
echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh"
if [ "$EFI_USE_ACPI" != "y" ]; then
FDT_BASENAME="dtb"
UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}"
echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh"
fi
echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh"
UEFI_SHELL_RUN=y $TEST_DIR/run \
-bios "$EFI_UEFI" \
-drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \
"${qemu_args[@]}"
}
if [ "$EFI_DIRECT" = "y" ]; then
$TEST_DIR/run \
$KERNEL_NAME \
-append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \
-bios "$EFI_UEFI" \
"${qemu_args[@]}"
else
uefi_shell_run
fi