All Projects → pbatard → Efifs

pbatard / Efifs

Licence: gpl-3.0
EFI FileSystem drivers

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Efifs

Fasmg Ebc
An EFI Byte Code (EBC) assembler, based on fasmg
Stars: ✭ 17 (-93.75%)
Mutual labels:  arm, uefi, aarch64, x64, qemu
Uefi Ntfs
UEFI:NTFS - Boot NTFS partitions from UEFI
Stars: ✭ 386 (+41.91%)
Mutual labels:  gcc, arm, uefi, x64, visual-studio
Multibootusb
Create multiboot live Linux on a USB disk...
Stars: ✭ 1,042 (+283.09%)
Mutual labels:  uefi, grub, efi
Raspberrypipkg
DEPRECATED - DO NOT USE | Go here instead ->
Stars: ✭ 758 (+178.68%)
Mutual labels:  arm, uefi, aarch64
Build
Armbian Linux build framework
Stars: ✭ 1,827 (+571.69%)
Mutual labels:  arm, aarch64, uefi
Rust Uefi Runtime Driver
Template for UEFI runtime drivers written in Rust with serial logging and debugging support.
Stars: ✭ 21 (-92.28%)
Mutual labels:  uefi, driver, efi
edk2-nightly
Unofficial EDK2 nightly build
Stars: ✭ 20 (-92.65%)
Mutual labels:  qemu, uefi, efi
Simdjson
Parsing gigabytes of JSON per second
Stars: ✭ 15,115 (+5456.99%)
Mutual labels:  arm, aarch64, x64
Gnu Eprog
Embedded Programming with the GNU Toolchain
Stars: ✭ 230 (-15.44%)
Mutual labels:  gcc, arm, qemu
Tow-Boot
An opinionated distribution of U-Boot. — https://matrix.to/#/#Tow-Boot:matrix.org?via=matrix.org
Stars: ✭ 338 (+24.26%)
Mutual labels:  arm, uefi, aarch64
opcodesDB
x86-64 | ARM (AArch32/AArch64/THUMB) full instruction set.
Stars: ✭ 49 (-81.99%)
Mutual labels:  arm, x64, aarch64
fdtd3d
fdtd3d is an open source 1D, 2D, 3D FDTD electromagnetics solver with MPI, OpenMP and CUDA support for x86, arm, arm64 architectures
Stars: ✭ 77 (-71.69%)
Mutual labels:  arm, x64, aarch64
Raspberry Pi Cross Compilers
Latest GCC Cross Compiler & Native (ARM & ARM64) CI generated precompiled standalone toolchains for all Raspberry Pis. 🍇
Stars: ✭ 261 (-4.04%)
Mutual labels:  gcc, arm, aarch64
mdepx
MDEPX — A BSD-style RTOS
Stars: ✭ 17 (-93.75%)
Mutual labels:  arm, qemu
Initium
A modern bootloader with no legacy components
Stars: ✭ 15 (-94.49%)
Mutual labels:  qemu, efi
efi-clang
Build UEFI applications with the Clang compiler and LLD linker.
Stars: ✭ 40 (-85.29%)
Mutual labels:  uefi, efi
Asmdb
Instructions database and utilities for X86/X64 and ARM (THUMB/A32/A64) architectures.
Stars: ✭ 258 (-5.15%)
Mutual labels:  arm, aarch64
FoxOS
The FoxOS main repository
Stars: ✭ 48 (-82.35%)
Mutual labels:  x64, uefi
how-to-qemu-arm-gdb-gtest
How to run, debug, and unit test ARM code on X86 ubuntu
Stars: ✭ 19 (-93.01%)
Mutual labels:  arm, qemu
smcutil
SMC utility for modifying and examining Apple's SMC payloads.
Stars: ✭ 30 (-88.97%)
Mutual labels:  arm, efi

EfiFs - EFI File System 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

Requirements

  • Visual Studio 2019 (Windows) MinGW (Windows), gcc (Linux) or EDK2.
  • A git client able to initialize/update submodules
  • QEMU v2.7 or later if debugging with Visual Studio (NB: You can find QEMU Windows binaries here)

Compilation

Common

  • Fetch the git submodules with git submodule init and git submodule update.
    NOTE This only works if you cloned the directory using git.
  • Apply 0001-GRUB-fixes.patch to the grub\ subdirectory. This applies the changes that are required for successful compilation of GRUB.

Visual Studio (non EDK2)

  • Open the solution file and hit F5 to compile and debug the default driver.

gcc (non EDK2)

  • Run 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-

EDK2

  • Open an elevated command prompt and create a symbolic link called 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.
  • From a command prompt, set Grub to target the platform you are compiling for by invoking:
    • (Windows) set_grub_cpu.cmd <arch>
    • (Linux) ./set_grub_cpu.sh <arch>
      Where <arch> is one of ia32, x64, arm or aarch64.
      Note that you MUST invoke the set_grub_cpu script every time you switch target.
  • After having invoked 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).
    NB: To build an individual driver, such as NTFS, you can also use something like:
    build -a X64 -b RELEASE -t <toolchain> -p EfiFsPkg/EfiFsPkg.dsc -m EfiFsPkg/EfiFsPkg/Ntfs.inf
    
  • A Windows script to build the drivers, using EDK2 with VS2019 is also provided as edk2_build_drivers.cmd.

Testing

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 copied
  • map -r this 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_LOGGING shell variable to 1 or more
  • To unload use the drivers command, then unload with the driver ID

Visual Studio 2019 and ARM/ARM64 support

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:

VS2019 Individual Components

Additional Notes

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.

Bonus: Commands to compile EfiFs using EDK2 on a vanilla Debian GNU/Linux 10.x

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
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].