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 14source scripts/vmm.bash 15 16vmm_check_supported 17 18if [[ $(vmm_get_target) == "kvmtool" ]]; then 19 echo "kvmtool does not support EFI tests." 20 exit 2 21fi 22 23if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then 24 DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd 25elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then 26 DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd 27fi 28 29KERNEL_NAME=$1 30 31: "${EFI_SRC:=$TEST_DIR}" 32: "${EFI_UEFI:=$DEFAULT_UEFI}" 33: "${EFI_TEST:=efi-tests}" 34: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}" 35: "${EFI_TESTNAME:=$TESTNAME}" 36: "${EFI_TESTNAME:=$EFI_CASE}" 37: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}" 38: "${EFI_VAR_GUID:=97ef3e03-7329-4a6a-b9ba-6c1fdcc5f823}" 39 40if [ ! -f "$EFI_UEFI" ]; then 41 echo "UEFI firmware not found." 42 echo "Please specify the path with the env variable EFI_UEFI" 43 exit 2 44fi 45 46# Remove the TEST_CASE from $@ 47shift 1 48 49# Fish out the arguments for the test, they should be the next string 50# after the "-append" option 51qemu_args=() 52cmd_args=() 53while (( "$#" )); do 54 if [ "$1" = "-append" ]; then 55 cmd_args=("$2") 56 shift 2 57 else 58 qemu_args+=("$1") 59 shift 1 60 fi 61done 62if [ "$EFI_USE_ACPI" != "y" ]; then 63 qemu_args+=(-machine acpi=off) 64fi 65 66if [ "$EFI_CASE" = "_NO_FILE_4Uhere_" ]; then 67 EFI_CASE_DIR="$EFI_TEST/dummy" 68 mkdir -p "$EFI_CASE_DIR" 69 $TEST_DIR/run \ 70 $EFI_CASE \ 71 -bios "$EFI_UEFI" \ 72 -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 73 "${qemu_args[@]}" 74 exit 75fi 76 77uefi_shell_run() 78{ 79 mkdir -p "$EFI_CASE_DIR" 80 cp "$EFI_SRC/$EFI_CASE.efi" "$EFI_CASE_DIR/" 81 echo "@echo -off" > "$EFI_CASE_DIR/startup.nsh" 82 if [ "$EFI_USE_ACPI" != "y" ]; then 83 FDT_BASENAME="dtb" 84 UEFI_SHELL_RUN=y $TEST_DIR/run -machine dumpdtb="$EFI_CASE_DIR/$FDT_BASENAME" "${qemu_args[@]}" 85 echo "setvar fdtfile -guid $EFI_VAR_GUID -rt =L\"$FDT_BASENAME\"" >> "$EFI_CASE_DIR/startup.nsh" 86 fi 87 echo "$EFI_CASE.efi" "${cmd_args[@]}" >> "$EFI_CASE_DIR/startup.nsh" 88 89 UEFI_SHELL_RUN=y $TEST_DIR/run \ 90 -bios "$EFI_UEFI" \ 91 -drive file.dir="$EFI_CASE_DIR/",file.driver=vvfat,file.rw=on,format=raw,if=virtio \ 92 "${qemu_args[@]}" 93} 94 95if [ "$EFI_DIRECT" = "y" ]; then 96 $TEST_DIR/run \ 97 $KERNEL_NAME \ 98 -append "$(basename $KERNEL_NAME) ${cmd_args[*]}" \ 99 -bios "$EFI_UEFI" \ 100 "${qemu_args[@]}" 101else 102 uefi_shell_run 103fi 104