EFI FileSystem drivers
This is a GPLv3+ implementation of standalone EFI File System drivers, based on the GRUB 2.0 read-only drivers.
For additional info as well as precompiled drivers, see https://efi.akeo.ie
git submodule initand
git submodule update.
git.
0001-GRUB-fixes.patchto the
grub\subdirectory. This applies the changes that are required for successful compilation of GRUB.
F5to compile and debug the default driver.
makein the top directory. If needed you can also issue something like
make ARCH= CROSS_COMPILE=where is one of
ia32,
x64,
armor
aa64(the official UEFI abbreviations for an arch, as used in
/efi/boot/boot[ARCH].efi) and is the one for your cross- compiler, such as
arm-linux-gnueabihf-. e.g.
make ARCH=aa64 CROSS_COMPILE=aarch64-linux-gnu-
EfiFsPkg, inside your EDK2 directory, to the EfiFs source. On Windows, from an elevated prompt, you could run something like
mklink /D EfiFsPkg C:\efifs, and on Linux
ln -s ../efifs EfiFsPkg.
set_grub_cpu.cmd
./set_grub_cpu.sh
ia32,
x64,
armor
aarch64.
set_grub_cpuscript every time you switch target.
edksetup.bat(Windows) or
edksetup.sh(Linux) run something like:
build -a X64 -b RELEASE -t -p EfiFsPkg/EfiFsPkg.dsc
VS2015(Windows) or
GCC5(Linux).
build -a X64 -b RELEASE -t -p EfiFsPkg/EfiFsPkg.dsc -m EfiFsPkg/EfiFsPkg/Ntfs.inf
VS2019as your EDK2 toolchain, including for buidling the ARM or ARM64 drivers, with something like:
build -a AARCH64 -b RELEASE -t VS2019 -p EfiFsPkg/EfiFsPkg.dsc
edk2_build_drivers.cmd.
If QEMU is installed, the Visual Studio solution will set up and test the drivers using QEMU (by also downloading a sample image for each target file system). Note however that VS debugging expects a 64-bit version of QEMU to be installed in
C:\Program Files\qemu\(which you can download here). If that is not the case, you should edit
.msvc\debug.vbsaccordingly.
For testing outside of Visual Studio, make sure you have at least one disk with a target partition using the target filesystem, that is not being handled by other EFI filesystem drivers. Then boot into the EFI shell and run the following: *
load fs0:\_.efior wherever your driver was copied *
map -rthis should make a new
fs#available, eg
fs2:* You should now be able to navigate and access content (in read-only mode) * For logging output, set the
FS_LOGGINGshell variable to 1 or more * To unload use the
driverscommand, then
unloadwith the driver ID
Please be mindful that, to enable ARM/ARM64 compilation support in Visual Studio 2019, you MUST go to the Individual components screen in the setup application and select the ARM compilers and libraries there, as they do NOT appear in the default Workloads screen:
This is a pure GPLv3+ implementation of EFI drivers. Great care was taken not to use any code from non GPLv3 compatible sources, such as rEFInd's
fsw_efi(GPLv2 only) or Intel's FAT driver (requires an extra copyright notice).
As root:
apt-get install nasm uuid-dev gcc-multilib gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf cd /usr/src git clone https://github.com/tianocore/edk2.git git clone https://github.com/pbatard/efifs.git cd efifs git submodule update --init cd grub patch -Np1 -i ../0001-GRUB-fixes.patch cd ../../edk2 git submodule update --init ln -s ../efifs EfiFsPkg make -C BaseTools export GCC5_ARM_PREFIX=arm-linux-gnueabihf- export GCC5_AARCH64_PREFIX=aarch64-linux-gnu- source edksetup.sh --reconfig ./EfiFsPkg/set_grub_cpu.sh X64 build -a X64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc ./EfiFsPkg/set_grub_cpu.sh IA32 build -a IA32 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc ./EfiFsPkg/set_grub_cpu.sh AARCH64 build -a AARCH64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc ./EfiFsPkg/set_grub_cpu.sh ARM build -a ARM -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc