1#!/bin/bash 2 3if [ $# -eq 0 ]; then 4 echo "Usage $0 TEST_CASE [QEMU_ARGS]" 5 exit 2 6fi 7 8if [ ! -f config.mak ]; then 9 echo "run './configure --enable-efi && make' first. See ./configure -h" 10 exit 2 11fi 12source config.mak 13source scripts/arch-run.bash 14 15if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then 16 DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd 17elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then 18 DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd 19fi 20 21: "${EFI_SRC:=$TEST_DIR}" 22: "${EFI_UEFI:=$DEFAULT_UEFI}" 23: "${EFI_TEST:=efi-tests}" 24: "${EFI_CASE:=$(basename $1 .efi)}" 25: "${EFI_TESTNAME:=$TESTNAME}" 26: "${EFI_TESTNAME:=$EFI_CASE}" 27: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" 28: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" 29 30if [ ! -f "$EFI_UEFI" ]; then 31 echo "UEFI firmware not found." 32 echo "Please specify the path with the env variable EFI_UEFI" 33 exit 2 34fi 35 36# Remove the TEST_CASE from $@ 37shift 1 38 39# Fish out the arguments for the test, they should be the next string 40# after the "-append" option 41qemu_args=() 42cmd_args=() 43while (( "$#" )); do 44 if [ "$1" = "-append" ]; then 45 cmd_args=$2 46 shift 2 47 else 48 qemu_args+=("$1") 49 shift 1 50 fi 51done 52 53if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then 54 EFI_CASE_DIR="$EFI_TEST/dummy" 55 mkdir -p "$EFI_CASE_DIR" 56 $TEST_DIR/run \ 57 $EFI_CASE \ 58 -bios "$EFI_UEFI" \ 59 -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 60 "${qemu_args[@]}" 61 exit 62fi 63 64uefi_shell_run() 65{ 66 mkdir -p "$EFI_CASE_DIR" 67 cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" 68 echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" 69 if [ "$EFI_USE_ACPI" != "y" ]; then 70 qemu_args+=(-machine acpi=off) 71 FDT_BASENAME="dtb" 72 UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" 73 echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" 74 fi 75 echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" 76 77 UEFI_SHELL_RUN=y $TEST_DIR/run \ 78 -bios "$EFI_UEFI" \ 79 -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 80 "${qemu_args[@]}" 81} 82 83uefi_shell_run 84