格蠹的幽兰代码本(RK3588)支持UEFI启动,在阅读RK3588代码的时候发现EDK2也对树莓派系列进行了支持。经过一番尝试,借助幽兰,我也在树莓派上bringup EFI bios(只能引导到Bios setup界面,不知道如何安装OS),在此记录SOP。
PS: 理论上在x86机器上也能生成适用于树莓派的引导文件,但是搭建cross-toolchain实在麻烦。正好幽兰代码本(内核版本:5.10.110-rockchip-rk3588)有完整的编译环境,更重要的是,其编译速度极快,那就拿幽兰本作为编译环境了~
Step1.科学上网,从github(https://github.com/pftf/RPi4)克隆树莓派4的代码:
geduer@ulan:~/Desktop/tianocore/RPi4$ pwd
/home/geduer/Desktop/tianocore/RPi4 #<-- RPi4代码位置
git config --global https.proxy "http://127.0.0.1:17890"
git clone https://github.com/pftf/RPi4.git --recurse #一定要带--recurse参数,用于clone edk/edk-platform等目录
git reset --hard 650cbcdcb76c91e9eff528a8cd64c27efa452b30 #使用RPi4 v1.38 2024/08/28这次提交
Step2.编译树莓派:
#下列命令序列参见edk-platforms的README部分
export WORKSPACE=/home/geduer/Desktop/tianocore/RPi4
cd $WORKSPACE
export PACKAGES_PATH=$PWD/edk2:$PWD/edk2-platforms:$PWD/edk2-non-osi
. edk2/edksetup.sh
make -C edk2/BaseTools
build -a AARCH64 -t GCC -p Platform/RaspberryPi/RPi4/RPi4.dsc
默认生成Debug版Bios,位于$(WORKSPACE)/Build/RPi4/DEBUG_GCC/FV/RPI_EFI.fd
如果需要生成Release版Bios,可向上述命令追加-b RELEASE参数
build -a AARCH64 -t GCC -p Platform/RaspberryPi/RPi4/RPi4.dsc -b RELEASE
Step3.制作引导SD卡:
这一步用到SDFormatter格式化SD卡及Raspberry Pi Imager烧录RPi4 eeprom固件。
以下是烧录RPI4 eeprom sd的步骤:
点击“Choose Device”--选择"Raspberry Pi4";
点击“选择操作系统”--选择“Use custom”--选择从RPi4 eeprom下载的固件;
最后点击"选择SD卡和"Next“,准备烧录固件.
Step4.更新RPi4 UEFI固件:
RPi4的作者会不定期release RPi4 EFI固件, 从中下载的固件包含下列内容:
将他们复制到Step 3制作的SD卡中,同时替换在幽兰本上编译生成的RPI_EFI.fd。一切就绪后即可引导UEFI版本的树莓派,如下图:
Step5.抓串口日志:
作为Bioser,以上当然不是仅好玩,是为了了解Arm处理器和EDK2的结合(其实是没机会摸高通处理器...)。这时就需要抓串口日志了。RPi4的GPIO原理图如下:
抓运行日志,只要接Gpp06和Gpp08(Gnd/Txd)即可, 实物连接图如下:
最后来一段熟悉的EFI日志输出(居然没有Pei Phase):
Step6.What's next?
试试源码级调试
To be continue.