이는 Grub 2.0 읽기 전용 드라이버를 기반으로 독립형 EFI 파일 시스템 드라이버의 GPLV3+ 구현입니다.
사전 컴파일 된 드라이버뿐만 아니라 추가 정보는 https://efi.akeo.ie를 참조하십시오.
git submodule init 및 git submodule update 로 git 하위 모듈을 가져 오십시오.git 사용하여 디렉토리를 클로닝 한 경우에만 작동합니다.grub 하위 디렉토리에 0001-GRUB-fixes.patch 적용하십시오. 이는 GRUB의 성공적인 편집에 필요한 변경 사항을 적용합니다.F5 눌러 기본 드라이버를 컴파일하고 디버깅하십시오.make 실행하십시오. 필요한 경우 make ARCH=<arch> CROSS_COMPILE=<tuple> <tuple> 같은 것을 발행 할 수 있습니다. 여기서 <arch> 는 ia32 , x64 , arm , aa64 , riscv64 또는 loongarch64 (ARCH /efi/boot/boot[ARCH].efi 대한 공식 UEFI 약어 중 하나입니다. arm-linux-gnueabi- 또는 aarch64-linux-gnu- . 예를 make ARCH=aa64 CROSS_COMPILE=aarch64-linux-gnu-EfiFsPkg 라는 기호 링크를 EFIFS 소스에 만듭니다. Windows에서는 높은 프롬프트에서 mklink /D EfiFsPkg C:efifs 와 Linux ln -s ../efifs EfiFsPkg 와 같은 것을 실행할 수 있습니다.set_grub_cpu.cmd <arch>./set_grub_cpu.sh <arch><arch> 는 ia32 , x64 , arm , aarch64 , riscv64 또는 loongarch64 중 하나입니다. 대상을 전환 할 때마다 set_grub_cpu 스크립트를 호출 해야합니다 .edksetup.bat (windows) 또는 edksetup.sh (linux)를 호출 한 후 다음과 같은 것을 실행합니다. build -a X64 -b RELEASE -t <toolchain> -p EfiFsPkg/EfiFsPkg.dsc
<toolchain> 은 VS2022 (Windows) 또는 GCC5 (Linux)와 비슷합니다. build -a X64 -b RELEASE -t <toolchain> -p EfiFsPkg/EfiFsPkg.dsc -m EfiFsPkg/EfiFsPkg/Ntfs.inf
edk2_build_drivers.cmd 로 제공됩니다. QEMU가 설치되면 Visual Studio 솔루션은 QEMU를 사용하여 드라이버를 설정하고 테스트합니다 (각 대상 파일 시스템의 샘플 이미지를 다운로드하여). 그러나 vs 디버깅은 64 비트 버전의 QEMU가 C:Program Filesqemu (여기에서 다운로드 할 수 있음)에 설치 될 것으로 기대합니다. 그렇지 않은 경우, 그에 따라 .msvcdebug.vbs 편집해야합니다.
Visual Studio 외부 테스트를 위해 Target FileSystem을 사용하여 대상 파티션을 사용하여 하나 이상의 디스크가 있는지 확인하십시오. 다른 EFI 파일 시스템 드라이버는 처리되지 않습니다. 그런 다음 EFI 쉘에 부팅하고 다음을 실행하십시오.
load fs0:<fs_name>_<arch>.efimap -r 새로운 fs# 사용할 수 있어야합니다 (예 : fs2:FS_LOGGING 쉘 변수를 1 이상으로 설정합니다.drivers 명령을 언로드 한 다음 드라이버 ID로 unload . Visual Studio 2022에서 ARM/ARM64 컴파일 지원을 활성화하려면 설정 애플리케이션의 개별 구성 요소 화면으로 이동 하여 기본 Workloads 화면에 표시되지 않으므로 ARM 컴파일러 및 라이브러리를 선택해야합니다.
이것은 EFI 드라이버의 순수한 GPLV3+ 구현입니다. RELIND의 fsw_efi (GPLV2 만) 또는 인텔의 뚱뚱한 드라이버 (추가 저작권 통지가 필요함)와 같은 비 GPLV3 호환 소스의 코드를 사용하지 않도록주의를 기울였습니다.
그러나 일부 파일 ( ./src/ 의 비 grub_#### 소스)은 GPLV3+ 대신 GPLV2+에 따라 라이센스가 부여되며 GPLV3+ 소스와 마찬가지로 라이센스 또는 유출 문제를 완전히 준수 할 수 있도록 GPLV2+ 작품으로 합법적으로 재사용 할 수 있습니다.
sudo apt install nasm uuid-dev gcc-multilib gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi gcc-riscv64-linux-gnu
git clone --recurse-submodules https://github.com/tianocore/edk2.git
cd edk2
make -C BaseTools
git clone --recurse-submodules https://github.com/pbatard/EfiFs.git EfiFsPkg
cd EfiFsPkg/grub
git apply ../0001-GRUB-fixes.patch
cd -
export GCC5_ARM_PREFIX=arm-linux-gnueabi-
export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-
export GCC5_RISCV64_PREFIX=riscv64-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
./EfiFsPkg/set_grub_cpu.sh RISCV64
build -a RISCV64 -b RELEASE -t GCC5 -p EfiFsPkg/EfiFsPkg.dsc