#!/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