-
Notifications
You must be signed in to change notification settings - Fork 84
Adding a driver to a UEFI firmware
The content of this page describes how you an add a new file system EFI driver, such as the ones produced by efifs, to an existing UEFI firmware image.
For this example, we'll be using the NTFS x64 EFI driver ntfs_x64.efi
along VMWare's x64 UEFI firmware, which we'll then run with VMWare Player in 64-bit mode on Windows.
- Download and extract the latest
.7z
release of FFS, which is a convenient repackaging of the EDK2'sGenSec
andGenFfs
base tools. - In the directory where you extracted the FFS files, also copy the
ntfs_x64.efi
binary (a version of which can be downloaded here) and then either.
- Call the
GenMod
script provided. This will take care of everything and create a new GUID for you if you don't pass one as parameter:
GenMod ntfs_x64.efi
- Or, if you want to issue the commands manually, and after having generated your own GUID, issue something like:
GenSec -o pe32.sec ntfs_x64.efi -S EFI_SECTION_PE32
GenSec -o name.sec -S EFI_SECTION_USER_INTERFACE -n "Ntfs"
GenSec -o ver.sec -S EFI_SECTION_VERSION -n "0.9"
GenFfs -g "4319CBBA-0980-4245-B511-D1CEFC1FFBEA" -o ntfs_x64.ffs -i pe32.sec -i name.sec -i ver.sec -t EFI_FV_FILETYPE_DRIVER
Either of these should result in a new ntfs_x64.ffs
module having been created in your directory. This .ffs
is a module that you are now able to import in your UEFI firmware.
Note: If you want to know exactly how an ffs driver module is structure, please have a look at the readme from the FFS project.
As detailed in this blog post, if you have VMWare Player 64-bit installed, you should first navigate to C:\Program Files (x86)\VMware\VMware Workstation\x64
and open vmware-vmx.exe
in 7-zip.
There, in .rsrc\1042\BINRES
you will find two 2MB binary resources, the second of which being the X64 UEFI firmware that is of interest to us:
Simply extract this file somewhere as efi64.rom
.
- Download the latest version of UBU (UEFI BIOS Updater) from here (or any UEFI BIOS editor you prefer). In case you use UBU, you should download the
.rar
file - Launch the BIOS editing application (
UEFITool.exe
in the case of UBU) and open theefi64.rom
file you previously extracted. - Locate the
Fat
module in the firmware. In the case of the current VMWare application, it should be underUEFI Image
→8C8CE578-8A3D-4F1C-9935-896185C32DD3
→20BC8AC9-94D1-4208-AB28-5D673FD73486
→EE4E5898-3914-4259-9D6E-DC7BD79403CF
→Volume Image Section
→8C8CE578-8A3D-4F1C-9935-896185C32DD3
, with GUID961578FE-B6B7-44C3-AF35-6BC705CD2B1F
.
4. Select Insert After and select the
ntfs_x64.ffs
module we previously created.
- Save the firmware back (File → Save Image File) as
efi64_ntfs.rom
.
- Create a new Virtual Machine, or locate an existing one
- Copy
efi64_ntfs.rom
in your Virtual Machine directory - Edit the
.vmx
so that it contains the lines:
firmware = "efi"
```<br/>
efi64.filename = "efi64_ntfs.rom"
4. Run the VM (make sure it's running in 64-bit mode, else an unmodified 32-bit EFI firmware will be used!) and try to launch the embedded EFI Shell (by pressing `F2` or `Del` until you get into the BIOS):

If you issue `drivers` you should be able to see that the NTFS driver was natively loaded:

And if you issue `map` and navigate to a volume, you should find that you can access NTFS content:

