It turns out that when you start a blog called “Ask a BIOS Guy,” people actually ask the author questions about BIOS. Trust me, it’s an amazing revelation. This week I’m answering a question about the TianoCore project that “ramsey” posed after reading my “Why UEFI” article.
“I understand Intel has an opensource EFI/UEFI solution called Tianocore that ppl experimenting with EFI can flash onto their platform and allow for boot? Or is Tianocore more of a build environment? Can you explain the distinction between what this opensource project provides vs. EFI based solutions provided by vendors like AMI?”
This is a great question. Answering it requires a little background, including the history of how Intel got involved in an open source project that delivers components for firmware developers.
Even though Intel is primarily known as a hardware company, a lot of their projects focus on software solutions. After all, the CPU and chipset don’t do much unless they’ve got software to run. As I explained in my first blog entry, UEFI was designed to solve a lot of problems common to BIOS developers, PC manufacturers, operating system developers and chipset manufacturers.
UEFI grew out of Intel’s Extensible Firmware Interface (EFI), which debuted on 64-bit Intel® Itanium® platforms. The change in processor architecture required a different approach to the firmware interfaces. The original EFI specification focused entirely on firmware-to-OS interfaces, modernizing what the 16-bit BIOS accomplished with software interrupts. Companies like AMI supported our own EFI-compatible implementations like Enterprise64.
Once the EFI concept started to extend beyond the Itanium family, there was some interest in having a common framework for exchanging chipset-specific code. Companies like Intel distribute “reference code” for the low-level initialization of silicon. This code is written by the same company that designs the silicon, so they have a better understanding of how the chip is supposed to work … plus, they have access to “undocumented knowledge” that can’t necessarily be shared with all of the BIOS providers.
TianoCore is the BSD open source implementation of the “Intel® Platform Innovation Framework for EFI,” which the rest of us started calling “the Framework” if only to save precious minutes on conference calls (plus “IPIFEFI” is a horrible acronym). This code became the EFI Development Kit (EDK), which is described on the project’s sourceforge page …
The EDK is essentially a container for the Framework's Foundation code and sample drivers. The EDK is also a development kit for developing, debugging, and testing EFI and Framework drivers, EFI Option ROMs, and EFI Applications for use in the Framework environment.
The EDK is used as a building block for everything from device drivers to programs like AMIDiag for UEFI, a platform diagnostic that doesn’t need an OS to run. AMIDiag interfaces directly with UEFI so even if a system can’t boot to the OS it can be properly diagnosed. For embedded systems, this means you can diagnose the motherboard before trying to extract it from a hardened enclosure.
It’s important to note that the EDK isn’t intended to be a complete BIOS solution. Intel is many things, but it’s not a BIOS company. Normalizing the interfaces below the OS-to-firmware layer helps get silicon enabling code into the hands of developers faster. The silicon reference code and each BIOS vendor’s “secret sauce” don’t fall into the EDK … much like other commercial projects that incorporate open source in the base code. So the EDK isn’t a turnkey BIOS solution.
What a BIOS vendor provides is a complete solution for BIOS development. The EDK is a set of building blocks to help get started with UEFI. All of the BIOS vendors use elements of the EDK, but each one puts their own particular “value” on top of it. For AMI, it’s everything from an integrated development environment to a code structure that helps developers get source updates faster … plus flash utilities, debug tools, engineering services and technical support to help bring those products to market.
Once EFI adoption started to rise, everyone went to work on standardizing these elements. The EFI 1.10 specification became the basis of the Unified EFI (UEFI) specification, and the Framework kick started the UEFI Platform Initialization (PI) specification. This allows standardization at the OS-to-firmware interface and below it. TianoCore still lives in the UEFI world, hosting the EDK and other critical projects like the EFI Shell.
TianoCore and the EDK are a good are a good way to start learning about UEFI, and provide tools for more than firmware development. Device drivers, applications and OS loaders can all benefit from the EDK. It’s a good base for making better use of what the BIOS provides using UEFI.
American Megatrends, Inc. (AMI) is an Affiliate member of the Intel® Embedded Alliance.
Got a question about BIOS or UEFI? … then it’s time to Ask a BIOS Guy! Find Brian on Twitter (@askabiosguy) or leave your question in the comments. Your BIOS question may be featured in an upcoming ‘Ask a BIOS Guy’ article.