A Linux developer's guide to writing bare-metal apps on UEFI firmware
First steps in bare-metal programming using UEFI
Kevin Boone's five-part series walks experienced Linux developers through building bare-metal applications for UEFI-based PCs, assuming no prior UEFI knowledge. It covers the toolchain, compiling and linking, creating a bootable disk image for DVD or USB, the EFI system partition, and basic file handling via the Simple File Protocol. The parts build on each other, so they're meant to be read in order.
Please note that I wrote these articles to be read in order. Each one relies on information from the previous articles, and it might be difficult to follow them out of sequence.