January 1, 0001

July 4, 2021 FIO Allocating Memory Above 2GB Some UEFI implementations, notably those based on IP from AMI, have a limitation on the amount of memory available for allocation via the gBS->AllocatePool and gBS->AllocatePages(AllocateAnyAddress, ...) APIs. Specifically they won't allow allocation of any memory above about 2GB, regardless of allocation size. Furthermore, some implementations (such as on the ASUS Z170) appear to have a catastrophic failure whereby if a module causes the system to run out of memory under 2GB the system subsequently becomes unbootable and must be recovered using the ASUS Flashback feature, or RMA'd. On other AMI-based systems, the system just locks up and can be successfully rebooted (ASUS Z97), while some others fail the request and return NULL. Read more

January 1, 0001

July 4, 2021 Developing EDK2 code using FreeBSD The EDK2 doesn't work out-of-the-box with FreeBSD, but needs some extra packages and setup. Packages to install are: shells/bash devel/binutils lang/gcc5, or newer devel/nasm devel/acpica-tools devel/git devel/gmake lang/python27 databases/py27-sqlite3 Create the following symlinks in BaseTools/Bin/FreeBSD-amd64: python -> /usr/local/bin/python2.7 make -> /usr/local/bin/gmake ld -> /usr/local/bin/ld objcopy -> /usr/local/bin/objcopy gcc -> /usr/local/bin/gcc5 g++ -> /usr/local/bin/g++5 gcc-ar -> /usr/local/bin/gcc-ar5 gcc-nm -> /usr/local/bin/gcc-nm5 gcc-ranlib -> /usr/local/bin/gcc-ranlib5 After that, you should be able to use the EDK2 as you would on a Linux system as long as you use bash - for example: Read more

January 1, 0001

Debugging TF-A and UEFI/EDK2 Using Eclipse Get Eclipse Go to https://www.eclipse.org/downloads/packages/ and scroll down to "Eclipse IDE for Embedded C/C++ Developers". Select the appropriate operating system and architecture. Once downloaded, untar the file. You can then run Eclipse with "./eclipse/eclipse". Building TF-A and EDK2 for the SBSA-REF platform export CROSS_COMPILE=aarch64-none-linux-gnu- cd ~/src/trusted-firwmare-a Edit plat/qemu/common/qemu_bl31_setup.c, and add to bl31_plat_arch_setup: Read more

January 1, 0001

July 4, 2021 Debugging with gdb Adapted from a post to edk2-devel by Laszlo Ersek. Clone Andrei Warkentin's repo https://github.com/andreiw/andreiw-wip.git git clone https://github.com/andreiw/andreiw-wip.git cd andreiw-wip From the root of your clone copy the subdirectory "uefi/DebugPkg" to your edk2 workspace: cp -av uefi/DebugPkg $WORKSPACE Apply the following patch to OvmfPkg/OvmfPkgX64.dsc: ----------------- diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc index 97fdedb..794521b 100644 --- a/OvmfPkg/OvmfPkgX64.dsc +++ b/OvmfPkg/OvmfPkgX64.dsc @@ -592,3 +592,4 @@ !endif OvmfPkg/PlatformDxe/Platform.inf + DebugPkg/GdbSyms/GdbSyms.inf ----------------- Note that we don't modify the FDF file. Read more

January 1, 0001

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.

© Rebecca Cran 2022-2026