blob: aa1dbcdd405fb1a95cd02004601f569ba276df27 [file] [log] [blame] [view]
# Build kvm-unit-tests and run under UEFI
## Introduction
This dir provides code to build kvm-unit-tests test cases and run them under
QEMU and UEFI.
### Install dependencies
The following dependencies should be installed:
- [UEFI firmware](https://github.com/tianocore/edk2): to run test cases in QEMU
### Build
To build:
./configure --enable-efi
make
### Run test cases with UEFI
To run a test case with UEFI:
./x86/efi/run ./x86/msr.efi
By default the runner script loads the UEFI firmware `/usr/share/ovmf/OVMF.fd`;
please install UEFI firmware to this path, or specify the correct path through
the env variable `EFI_UEFI`:
EFI_UEFI=/path/to/OVMF.fd ./x86/efi/run ./x86/msr.efi
## Code structure
### Code from GNU-EFI
This dir contains source code and linker script copied from
[GNU-EFI](https://sourceforge.net/projects/gnu-efi/):
- crt0-efi-x86_64.S: startup code of an EFI application
- elf_x86_64_efi.lds: linker script to build an EFI application
- reloc_x86_64.c: position independent x86_64 ELF shared object relocator
EFI application binaries should be relocatable as UEFI loads binaries to dynamic
runtime addresses. To build such relocatable binaries, GNU-EFI utilizes the
above-mentioned files in its build process:
1. build an ELF shared object and link it using linker script
`elf_x86_64_efi.lds` to organize the sections in a way UEFI recognizes
2. link the shared object with self-relocator `reloc_x86_64.c` that applies
dynamic relocations that may be present in the shared object
3. link the entry point code `crt0-efi-x86_64.S` that invokes self-relocator
and then jumps to EFI application's `efi_main()` function
4. convert the shared object to an EFI binary
More details can be found in `GNU-EFI/README.gnuefi`, section "Building
Relocatable Binaries".
kvm-unit-tests follows a similar build process, but does not link with GNU-EFI
library.
### Startup code for kvm-unit-tests in UEFI
This dir also contains kvm-unit-tests startup code in UEFI:
- efistart64.S: startup code for kvm-unit-tests in UEFI