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 init
and git submodule update
.git
.0001-GRUB-fixes.patch
to the grub\
subdirectory. This applies the
changes that are required for successful compilation of GRUB.F5
to compile and debug the default driver.make
in the top directory. If needed you can also issue something like
make ARCH=<arch> CROSS_COMPILE=<tuple>
where <arch>
is one of ia32
,
x64
, arm
or aa64
(the official UEFI abbreviations for an arch, as
used in /efi/boot/boot[ARCH].efi
) and <tuple>
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 <arch>
./set_grub_cpu.sh <arch>
<arch>
is one of ia32
, x64
, arm
or aarch64
.set_grub_cpu
script every time you
switch target.edksetup.bat
(Windows) or edksetup.sh
(Linux) run
something like:
build -a X64 -b RELEASE -t <toolchain> -p EfiFsPkg/EfiFsPkg.dsc
where <toolchain>
is something like VS2019
(Windows) or GCC5
(Linux).build -a X64 -b RELEASE -t <toolchain> -p EfiFsPkg/EfiFsPkg.dsc -m EfiFsPkg/EfiFsPkg/Ntfs.inf
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.vbs
accordingly.
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:\<fs_name>_<arch>.efi
or wherever your driver was copiedmap -r
this should make a new fs#
available, eg fs2:
FS_LOGGING
shell variable to 1 or moredrivers
command, then unload
with the driver IDPlease 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).
Note however that some files (the non grub_####
sources under ./src/
) are
licensed under GPLv2+ rather than GPLv3+ and that, just like the GPLv3+ sources,
we took great care of ensuring that we are fully compliant with any licensing
or relicensing matters, so that they can legally be reused into GPLv2+ works.
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