引言

近日我于Amazon购入了一块Orange Pi 5 Plus开发板,在上面安装了Debian之后,我逐渐想到可以把我通过Cloudflare Tunnel部署的服务(Pastebin & 本博客)从中国大陆的机器上迁移到开发板上,从而大幅度降低延迟和提高响应性。

本博客使用的 Halo 很好迁移,本身就有备份功能,所以从x64迁移到arm64非常的简单,通过下载和打包出的zip即可完全迁移。非常感谢 Halo 的开发团队!

接下来就是重头戏了,我的 Pastebin 是一个我自己修改过的 ptpb/pb 分支。因为我曾经想在中国大陆部署,所以把Dockerfile也爆改了,而且我之前也从来没试过在arm64的设备上build过 ,在尝试后也失败了。鉴于我并不是真的理解整个项目架构/结构,我决定用相对保守的方式来运行这个项目 - 通过 qemu 转译运行,虽然有一定性能下降,但是至少能保证不出问题

很遗憾的在做这些操作的过程并没有被完整记录,所以问题诊断/描述部分可能不是那么清晰。

然而,噩梦就这么开始了。

您猜怎么招,Orange Pi 5 Plus官方提供的Debian12镜像自带的内核是不带 binfmt_misc 的,所以没有能力直接执行不同架构(如x64)的可执行二进制文件。
binfmt_misc 是 Linux 内核的一项功能,允许注册解释器来支持运行非本机架构或格式的可执行文件,例如通过 QEMU 模拟运行 ARM、x86 等不同架构的程序)

image-pnto.png

image-gqgx.png

image-tlja.png

这就意味着,如果我想在 ARM64 上转移运行 x64 架构的可执行二进制文件的操作对用户透明化(例如在这里是 x64 的 Docker 容器),我需要自行定制并编译一个支持 binfmt_misc 的内核。

进入正题,编译内核!

通过搜索互联网 Orange Pi 5 Plus编译内核 等关键词后,我找到了Orange Pi的官方文档。随后我通过VMware setup了一个Ubuntu 22.04的虚拟机,作为编译环境。

克隆仓库

git clone https://github.com/orangepi-xunlong/orangepi-build

进入目录

cd orangepi-build

image-ryvq.png

运行编译脚本

./build.sh

image-mkwh.png

image-mocr.png

image-aykn.png

选择目标设备

image-juuk.png

image-brui.png

选择内核配置

image-ooqs.png

启用 binfmt_misc

image-qcle.png

保存&退出

无图,相信大家都会

等待完成编译

image-ojbu.png

年轻人的第一个Linux内核!

image-gtuo.png

编译出来的 deb 包在 output/debs 下

image-vprx.png

四个deb中我们除了 linux-image-current-rockchip-rk3588-dbg_1.0.8_arm64.deb 都需要上传到开发板上。

安装内核

需要先卸载 linux-image-current-rockchip-rk3588 , linux-dtb-current-rockchip-rk3588linux-headers-current-rockchip-rk3588 。在此之后 dpkg -i 刚才上传到开发板的内核包 。

随后就是重启,即

reboot

校验可用性

image-febx.png

至此,达成目标!

image-yrhw.png

致谢

再次感谢 Yangyu ChenRevyZiyao 对我提供的技术支持与指导!