July 4, 2021
Learning UEFI Development
- Read the UEFI Driver Writer's Guide: https://github.com/tianocore-docs/Docs/blob/master/Driver_Developer/UEFI_Driver_Writer_Guide_V1.0.1_120308.pdf (579 pages).
- The Module Writer's Guide is possibly also useful to read: https://code.bluestop.org/edk2/docs/specs/EDK2_Module_Writers_Guide_0.7.pdf (94 pages).
- Get familiar with the spec - download from http://www.uefi.org/specifications . I'd recommend reading both the oldest one you want to support, along with the newest one to see which newer features are available. For example if you want to support anything 2.1 and newer, start with http://www.uefi.org/sites/default/files/resources/UEFI_Spec_2_1.pdf (1682 pages) and then read the 2.6 spec from http://www.uefi.org/sites/default/files/resources/UEFI%20Spec%202_6.pdf (2706 pages). In particular, note that not all UEFI functions can be called in all places in a driver: similar to Windows IRQ Levels, UEFI has TPL - or Task Priority Levels - that restrict classes of functions available.
- Become familiar with the TianoCore EDK2 API. Various versions of API documents ordered by the UDK release are available from https://code.bluestop.org/edk2/docs (e.g. https://code.bluestop.org/edk2/docs/UDK2014.SP1/).
- You may want to learn a bit about how the edk2 build system works, too. There's a copy of the various documents at https://code.bluestop.org/edk2/docs/specs/ . The main files a UEFI driver uses to build are DSC, DEC and INF (which are unrelated to Microsoft INF files) files.
- If you're going to be writing any sort of HII (Human Interface Infrastructure) code, you'll want to read the VFR and UNI (Unicode strings file) specs.