Over the last weeks I've been working on adding a bunch of helper code for edk2 firmware testing to the virt firmware project. Partly this has been taked from test cases, partly this has been written new from scratch. The idea is to have useful helper code available as python module to simplify writing test cases. There are also command line tools to manage and use cloud images. They showcase how…
Ok, it is over. End of an era for me. No more self-hosted git. I had a public git server running since 2011, and a public cvs server before that. AI scrapers have hammered the poor, little server to death by flooding the cgit frontend with tons of pointless² requests. Actually a few months ago already. Now I finally decided to not try rebuild the server, be it with or without cgit web frontend. I…
Recently OVMF got some initial support for IGVM. This article describes what exactly is supported and how to use this. Before taking the deep dive lets start with some basics.
If something goes wrong if usually is very helpful to have log files at hand. Virtual machine firmware is no exception here. So, lets have a look at common practices here.
Network boot kickoff. Step number one for the firmware on any system is sending out a DHCP request, asking the DHCP server for an IP address, the boot server (called "next server" in dhcp terms) and the bootfile. On success the firmware will contact the boot server, fetch the bootfile and hand over control to the bootfile. Traditional method to serve the bootfile is using tftp (trivial file…
What is W^X? If this sounds familiar to you, it probably is. It means that memory should be either writable ("W", typically data), or executeable ("X", typically code), but not both. Elsewhere in the software industry this is standard security practice since ages. Now it starts to take off for UEFI firmware too. This is a deep dive into recent changes, in both code (firmware) and administration…
The physical addess space is where all memory and most IO resources are located. PCI memory bars, PCI MMIO bars, platform devices like lapic, io-apic, hpet, tpm, ... On your linux machine you can use lscpu to see the size of the physical address space: $ lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Address sizes: 39 bits physical, 48 bits virtual ^^^^^^^^^^^^^^^^ [ ... ] In…
Firmware autobuilder goes EOL Some people already noticed and asked questions. So guess I better write things down in my blog so I don't have to answer the questions over and over again, and I hope to also clarify some things on distro firmware builds. So, yes, the jenkins autobuilder creating the firmware repository at https://www.kraxel.org/repos/jenkins/ has been shutdown yesterday (Jul 19th…
Here is a quickstart for everyone who wants (or needs to) deal with edk2 firmware, with a focus on virtual machine firmware. The article assumes you are using a linux machine with gcc.