菜单

Administrator
发布于 2024-01-08 / 59 阅读
0

RK3566 Purple PI OH 编译支持Docker环境内核


日期: 2023年7月28日
时间: 10点44分
tags:

618 买了几个便宜的 Purple PI OH 开发板[1] (500 块多一点买了 3 个🤑), 这个开发板类似树莓派,是基于 Rockchip(瑞芯微) 的 RK3566 arm64 芯片。如下:

image.png

Purple PI OH

买来是用作家庭服务器或家庭实验室的。主要考虑就是:

  1. 便宜
  2. 可玩性高
  3. 功耗低
  4. 散热小,运行安静
  5. Arm64 现在生态还凑活

其配置如下(选择部分说明):

  • SOC: RockChip RK3566
  • CPU: 四核 64 位 Cortex-A 55 处理器,主频最高 1.8 GHz
  • 最高支持 8 GB 高速 LPDDR 4,速率高达 1066 Mbps (我买的是 2 G 版本的)
  • 存储:eMMC 默认 8 GB(可选 16 GB/32 GB/64 GB)(我买的是 16 G 版本的)
  • 1 路 HDMI 2.0 支持 4K@60Hz 或 1080P@120Hz
  • 1 路自适应千兆以太网口
  • WIFI 蓝牙无线通信
  • 板载 1 路 USB 3.0
  • 3 路 USB 2.0
  • 极小型 PCBA 尺寸,85mm*56mm

系统支持:

  • Android 11
  • Debian 10
  • Buildroot + QT
  • 鸿蒙 OpenHarmony 3.2
  • Ubuntu•麒麟 OS

刷入官方提供的 Debian 10 后,发现无法安装 Docker/Tailscale/K3s/Cilium 等,这是为什么?

原因解析

很多开发板的操作系统,都是没有 UEFI 的,也不能直接使用 Debian Linux 官网提供的 iso 等安装介质直接进行安装的。而是自编译的 Debian Linux.

编译后的 Debian 里,会带有 uboot 作为启动引导的工具,同时将开发板对应的芯片/接口驱动集成进去。

官方提供的自编译 Debian Linux 里,只开启了一小部分的 Kernel 内核参数。而 Docker/Tailscale/K3s/Cilium 等,是需要直接用到 Kernel 紧密相关的功能,但是这些功能在官方提供的 Debian Linux 中又没有,就需要我们按照官方提供的《Linux SDK 编译手册》自行编译。

需要哪些内核配置

Docker 需要哪些内核配置

Docker 需要的内核配置,可以通过 https://github.com/opencontainers/runc/blob/main/script/check-config.sh 这个检查脚本进行检验的。运行示例如下:

# ./check_config.sh

所以其需要的 Kernel config 为:

# Docker Generally Necessary

Tailscale 需要哪些内核配置

Tailscale 出于广泛适用性的考虑,主要都是基于用户空间的实现,不加任何内核配置也可以基于 sock5 代理的方式运行。如果要正常状态运行,其只依赖于一个内核配置:

# Tailscale

如果是 Wireguard 或其他对内核依赖较多的相关软件,请自行查找相关内核配置需求。

K3s 需要哪些内核配置

K3s 的 Cli 做的很完善,直接可以检查内核配置需求,在我编译好的 Debian 10 上运行具体如下:

$ k3s check-config

根据上面输出,得出 K3s 需要的内核配置有:

# K3s Generally Necessary:

相比 Docker, 主要多了以下内核需求:

  • Overlay 网络
  • Overlay 存储

Cilium 需要哪些内核配置

Cilium 需要的内核配置,可以在这里查看:
System Requirements — Cilium 1.13.4 documentation[2]

# Cilium Base Requirements

另外 Cilium 对于 Kernel 版本也有严格要求,Cilium 的部分功能依赖于高版本的 Kernel. 请自行查阅。

修改内核配置并编译

Linux SDK 官方一般都会提供,基于 Rockchip 芯片系列的 Linux SDK 文件目录结构大差不差。我这里以 Purple Pi OH 为例,相信如果您也正好有相关需求,且是 Rockchip 的其他开发板,也能很快找到对应目录。

一般内核配置的目录为:xxxxxxx\kernel\arch\arm64\configs\xxxxx_linux_defconfig

将上方提供的 Kernel 配置添加到该文件末尾(注意去重)并保存。

然后直接编译即可:

./build.sh kernel

编译后在./rockdev目录生成boot.img镜像。

然后利用 Rockchip 提供的烧录工具:RKDevTool.exe, 单独将 boot.img 烧录即可。

编译是真的耗资源啊,耗时间,耗 CPU, 耗磁盘😂

可能出现的异常情况

分区超出

我在编译过程中碰到 recovery 分区超过的报错,报错如下:

rk356x_linux_sdk/buildroot/output/rockchip_rk356x_recovery/images/recovery.img's size exceed parameter.txt's limit!

解决办法是要修改分区大小,具体就是修改对应的 parameter.txt 文件。修改后再重新完整编译:

./build.sh

并重新烧录整个固件。

Docker 安装后启动失败

根据官方文档:Install Docker Engine on Debian | Docker Documentation[3], Docker 安装后启动失败。

官方明确提到目前最新版本需要的 Debian 版本为:

Debian Bookworm 12 (stable) Debian Bullseye 11 (oldstable)

可能是 Deibian 10 兼容性有问题导致的。但是有 workaround.

具体的报错为 nftables 相关的报错。

解决方案为:

update-alternatives --set iptables /usr/sbin/iptables-legacy

重启后 Docker 可以正常运行。

总结

玩了一周末的 Rockchip arm64 开发板,现在 2G 内存的板子上终于可以跑 docker,k3s,tailscale,cilium 了。🎉🎉🎉

Arm 开发板如我之前所说,有这些优势:

  1. 便宜
  2. 可玩性高
  3. 功耗低
  4. 散热小,运行安静
  5. Arm64 现在生态还凑活

但是相比 x86, 这类 arm 开发板生态还是太差了,没有 bios/uefi,装前面几个软件都要调 kernel 参数然后编译,刷机烧录。玩起来太累了。..

x86 也有这些优势:

  1. 便宜
  2. 可玩性高

但是 x86 的生态太好了,玩起来省心多了。

Arm 与 x86 相比,其实也就强在 功耗低,散热小。但是现在 Intel 的一些芯片,如 n100 等,TDP 为 6W 也是非常低了,通过被动散热也能压住也就静音。Arm 的优势所剩无几了。..

所以我的建议,想省心/静音/功率低,首推 x86 迷你主机;想折腾/静音/功率低,首推各类 arm pi 开发板或盒子;不在乎功耗/不在乎声音/高配,可以玩玩二手 x86 服务器。😂😂😂

以上。