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