2022年4月15日 星期五

grub uefi for arm64 from source code

grub 可以編譯成 uefi 格式或是 legacy bios bootloader, 這邊介紹的是 uefi 格式, 並且是 arm64 的版本, 從編譯到執行。

wget --no-check-certificate https://ftp.gnu.org/gnu/grub/grub-2.06.tar.xz
tar xvf grub-2.06.tar.xz
# grub for arm64 efi, 少了 efi_uga, video_bochs, video_cirrus, appleldr module
./configure --with-platform=efi --target=aarch64-elf --disable-werror  --prefix=/home/descent/grub-arm64-bin
make
make install

--target=aarch64-elf 是 toolchain 名字的一部分, 如果 toolchain 是 aarch64-elf-gcc 指定 --target=aarch64-elf; 如果 toolchain 是 aarch64-buildroot-linux-gnu-gcc 指定 --target=aarch64-buildroot-linux-gnu。編譯時 toolchain 要存在 PATH。

製作出 arm64.efi (grub uefi 執行程式)
cd /home/descent/grub-arm64-bin/lib/grub
../../bin/grub-mkimage -d arm64-efi  -p /EFI/grub -o arm64.efi -O arm64-efi part_gpt part_msdos disk fat exfat ext2 ntfs xfs hfs iso9660 normal search_fs_file configfile linux loopback echo efi_gop file gfxmenu gfxterm gfxterm_background gfxterm_menu halt reboot help jpeg ls png true --prefix=/boot/grub/

做完最後一步就可以看到產生一個 arm64.efi, 再來用 qemu 來測試, 我沒有支援 uefi 的 arm64 機器。

可以製作一個磁片 image, 複製 arm64.efi 到該磁片 image 中, 我的範例是取名為 f.img, 另外 grub 會有額外的 mod 要安裝, 這邊我沒有複製這些 mod 檔案。

執行以下 qemu 指令, 載入磁片的 arm64.efi。

qemu-system-aarch64 -m 128 -M virt -cpu cortex-a57 -drive if=none,format=raw,file=f.img,id=hd0 -device virtio-blk-device,drive=hd0 -bios /usr/share/qemu-efi-aarch64/QEMU_EFI.fd -net none -nographic

再來的操作看影片比較容易理解:



ref:

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。