引言
近日我于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 等不同架构的程序)



这就意味着,如果我想在 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

运行编译脚本
./build.sh



选择目标设备


选择内核配置

启用 binfmt_misc

保存&退出
无图,相信大家都会
等待完成编译

年轻人的第一个Linux内核!

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

四个deb中我们除了 linux-image-current-rockchip-rk3588-dbg_1.0.8_arm64.deb 都需要上传到开发板上。
安装内核
需要先卸载 linux-image-current-rockchip-rk3588 , linux-dtb-current-rockchip-rk3588 和 linux-headers-current-rockchip-rk3588 。在此之后 dpkg -i 刚才上传到开发板的内核包 。
随后就是重启,即
reboot
校验可用性

至此,达成目标!

致谢
再次感谢 Yangyu Chen,Revy,Ziyao 对我提供的技术支持与指导!