前言
就在前几天 (2026-08-05), Proxmox VE 官方宣布了对 Arm64 平台的支持. 这使得我想起了实验室学长们送我的那块 OrangePi 3B 开发板, 索性尝试使用这块开发板来启动 Proxmox VE 原生的 iso 映像文件. 由于 Proxmox VE 官方提供的映像文件是需要使用 efi 启动的, 查了一圈发现没有专门给 OrangePi 3B 编译的 UEFI 固件, 索性自己尝试编译
本文操作环境
_,met$$$$$gg. nanami114@VM-Main
,g$$$$$$$$$$$$$$$P. -----------------
,g$$P" """Y$$.". OS: Debian GNU/Linux 13.4 (trixie) x86_64
,$$P' `$$$. Host: KVM/QEMU (Standard PC (i440FX + PIIX, 1996) pc-i440fx-11.0)
',$$P ,ggs. `$$b: Kernel: 6.12.74+deb13+1-amd64
`d$$' ,$P"' . $$$ Uptime: 29 days, 3 hours, 15 mins
$$P d$' , $$P Packages: 3 (npm), 1526 (dpkg)
$$: $$. - ,d$$' Shell: bash 5.2.37
$$; Y$b._ _,d$P' Resolution: 1280x800
Y$$. `.`"Y$$$$P"' Terminal: /dev/pts/1
`$$b "-.__ CPU: Intel Xeon E5-2696 v4 (44) @ 2.1GHz
`Y$$ GPU: Vendor 1234 Device 1111
`Y$$. Memory: 20.74 GiB / 31.33 GiB (66%)
`$$b. Network: Unknown
`Y$$b. BIOS: SeaBIOS 0.0 (04/01/2014)
`"Y$b._
`"""
开整
1. 编译 UEFI
1.1 准备材料
- 在 GitHub 中有一个叫做 quartz64_uefi 的项目专门给
RK356X的平台适配了 UEFI, 所以我们可以从这里入手. 首先 clone 该仓库
git clone https://github.com/jaredmcneill/quartz64_uefi- 查看项目结构, 发现项目中已经包含了专门为 Orange Pi 3B 的 platform, device tree, drivers 等, 并且
build.sh中也有适用于 OrangePi 3B 的构建流程. 所以这里可以尝试直接构建
quartz64_uefi 项目中的 OrangePi 3B 平台目录结构
for board in ${RKUEFIBOARDS}; do
case ${board} in
QUARTZ64)
build_uefi Pine64 Quartz64
build_fit Quartz64 rk3566-quartz64-a
;;
SOQUARTZ)
build_uefi Pine64 SOQuartz
build_fit SOQuartz rk3566-soquartz-cm4
;;
ROC-RK3566-PC)
build_uefi Firefly ROC-RK3566-PC
build_fit ROC-RK3566-PC rk3566-roc-pc
;;
ROC-RK3568-PC)
build_uefi Firefly ROC-RK3568-PC
build_fit ROC-RK3568-PC rk3568-firefly-roc-pc
;;
# OrangePi 3B Here...
ORANGEPI3B)
build_uefi OrangePi OrangePi3B
build_fit OrangePi3B rk3566-orangepi-3b
;;
PINETAB2)
build_uefi Pine64 PineTab2
build_fit PineTab2 rk3566-pinetab2
;;
ZERO-3W)
build_uefi Radxa Zero-3W
build_fit Zero-3W rk3566-radxa-zero-3w
;;
ODROID-M1S)
build_uefi HardKernel Odroid-M1S
build_fit Odroid-M1S rk3566-hardkernel-odroid-m1s
;;
*)
echo "Unknown board ${board}"
exit 1
;;
esac
done1.2 检查环境
- 检查 Git 子模块状态
git submodule status如果你当前所处的目录属主与当前执行的用户不一致, 则 Git 会报错 dubious ownership, 此时执行这条指令添加信任
git config --global --add safe.directory path/to/quartz64_uefi- 检查编译工具链
由于博主这里是在
amd64架构的设备上去编译arm64的固件, 故这里需要配置交叉编译工具链. 我们从官方 CI 配置文件中提取依赖清单并安装
cat .github/workflows/build.yml从这份配置文件中我们可以得到官方构建所需要的所有依赖, 分别为 gcc-aarch64-linux-gnu iasl device-tree-compiler python3-pyelftools uuid-dev. 这里我们直接安装
sudo apt-get update
sudo apt-get install -y --no-install-recommends gcc-aarch64-linux-gnu iasl device-tree-compiler python3-pyelftools uuid-dev- 检查
edk2-rockchip目录性质
git -C ed2k-rockchip rev-parse HEAD
ls edk2-rockchip/.git
git ls-files | grep edk2-rockchip执行完后我们可以发现, 项目里 edk2-rockchip/ 和 edk2-rockchip-non-osi/rkbin/ 是 platform 代码和 Rockchip 官方 vendor 组件 (DDR 初始化固件, BL31, OP-TEE, boot_merger/ddrbin_tool 工具). 我们需要确认它们是 submodule 还是直接打进 git 的:
- .git 文件不存在, 同时
git ls-files显示234个文件被直接跟踪. 因此得出它们是 vendored 进主仓库的, 我们只需要克隆主仓库就齐了. - 只有
edk2是真正的 submodule, 因此只有edk2需要单独初始化.
1.3 初始化编译环境
- 这里我们更新并初始化所有 submodule
git submodule update --init --recursive
--rescursive的作用是连带嵌套 submodule 一起克隆 edk2 自己还有cmocka/googletest/subhook等测试框架子模块- edk2 是一个 200MB+ 的大仓库, 这里更新需要拥有一个稳定的网络环境.
1.4 尝试编译
- 使用 make 工具启动构建
make BOARDS=ORANGEPI3B uefi这里通常只需要等待几分钟, 如果编译时间过长请检查之前的动作有没有问题
- 编译完成后, 使用 make 编译一个可烧录进 SD 卡的映像文件
make BOARDS=ORANGEPI3B sdcard这里需要提前安装
parted, 否则会报错
- 编译完成后我们会得到一份
ORANGEPI3B_EFI.img文件, 这份文件可以直接烧录进 SD 卡尝试启动.
2. 启动 UEFI
2.1 烧录
使用 Win32DiskImager 将 ORANGEPI3B_EFI.img 烧录至 SD 卡即可.
2.2 启动
重启之后会看到 Orange Pi 的 Logo, 还有 tianocore 项目的文字. 如果没有插入任何启动设备, 则会自动进入 BIOS.

据了解, 在以前的版本中, 只有 USB3.0 处于可用状态. 但这里博主编译的版本, 四个 USB-A 接口都处于可用状态.
2.3 烧录系统
这里可以使用 UltraISO 之类的软件, 将可启动映像烧录至 U 盘等存储介质中, 然后直接上电启动, UEFI 会自动引导到您的安装介质.

结语
本人并非专业人士, 如有错误或疏漏请指出, 谢谢!
喜欢的话,留下你的评论吧~