QEMU in UEFI
summary
Demonstrates running x86 PCIe option ROMs on ARM UEFI by embedding QEMU x86 emulation in EDK II, trapping attempted execution with NX pages and switching contexts, then doing ABI marshaling at function-call boundaries (registers and stack) into a JITed x86 environment. Shows working examples: e1000 NIC and GPU option ROMs initialize devices in a real ARM VM and on hardware, performance close to native, but runtime-services callbacks are blocked and some x86 drivers that assume PC-specific behavior still fail. Licensing (LGPL/GPL) and upstreaming are discussed.
AI-written summary · about
chapters (27)
- 0:00Introduction and speaker
- 1:06Problem with graphics cards
- 2:30ARM vs x86 differences
- 3:57QEMU emulation modes
- 5:43What is UEFI
- 7:32UEFI driver registration
- 10:26UEFI driver protocol flow
- 12:45UEFI API compatibility
- 13:29Executing x86 code on ARM
- 19:10UEFI emulation results
- 20:37Why QEMU was chosen
- 22:01EBC limitations
- 24:33Bugs in x86 option ROMs
- 26:45How to use the emulation
- 27:54Live demonstration
- 30:19Corner cases and limitations
- 32:54Runtime services support
- 34:17Handling stack arguments
- 35:04Performance of emulation
- 35:48Porting to other bootloaders
- 36:30Upstreaming the code
- 37:43Legal implications
- 38:46Runtime module compilation
- 39:28Runtime deployment
- 40:51Project integration challenges
- 41:12Tested devices and results
- 42:19Q&A and conclusion
related talks
39mQEMU: Emulating Your Way to Success
29mDevelop UEFI with openSUSE
12mWhat's new in QEMU land?
53mMarrying U-Boot, uEFI and grub2
21mGetting started with LinuxBoot Firmware on AArch64 Server
25mChallenges in Supporting Virtual CPU Hotplug on SoC Based Systems (like ARM64)
28mCXL Emulation in QEMU - Progress, status and most importantly what next?
21mGetting started with LinuxBoot Firmware on AArch64 Server
