折腾香橙派 5 Plus

最近心血来潮,买了一个香橙派 5 Plus的开发板,这个开发板是一个基于瑞芯微的RK3588芯片的开发板,它有4/8/16/32GB内存的版本,我买的是16GB内存的版本,这个开发板的性能非常强大,它有两个 M.2 接口,一个是M.2 NVMe PCIE 3.0 (2280)接口,用来插 NVMe固态硬盘,一个是M.2 (2230)接口,用来插网卡,可以扩展更多的硬件设备,这个开发板有 3 个HDMI接口,用来做电视盒子非常不错,可以连接多个显示器,这个开发板还有2个USB3.0接口和2个USB2.0接口,可以连接鼠标和键盘(咋不搞图形也用不到,或者直接上VNC得了),这个开发板还有2个以太网接口,可以连接网络,这个开发板还有一个TF卡接口和EMMC插槽,可以扩展存储,这个开发板还有一个串口接口,可以连接调试器,这个开发板还有一个GPIO接口,可以连接外设,这个开发板还有一个电源接口,可以连接电源,这个开发板还有一个电池接口,可以连接纽扣电池(搞RTC时钟用的),这个开发板还有一个音频接口,可以连接音频设备,这个开发板还有一个摄像头接口,可以连接摄像头,这个开发板还有一个屏幕接口,可以连接屏幕,这个开发板还有一个风扇接口,可以连接风扇,……

不多说了,看表(从官网http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/parameter/Orange-Pi-5-plus.html拿过来的)

产品参数

主控芯片 Rockchip RK3588(8nm LP制程)
CPU • 8核64位处理器 • 4个Cortex-A76和4个Cortex-A55及独立的NEON协处理器 • Cortex-A76主频2.4GHz,Cortex-A55主频1.8GHz
GPU • 集成ARM Mali-G610 • 内置 3D GPU • 兼容OpenGL ES1.1/2.0/3.2、OpenCL 2.2和Vulkan 1.2
NPU 内嵌的 NPU 支持INT4/INT8/INT16/FP16混合运算,算力高达 6Top
PMU RK806-1
RAM 4GB/8GB/16GB (LPDDR4/4x)
存储 • QSPI Nor FLASH: 16MB/32MB • MicroSD 卡插槽: up to 128GB • eMMC 闪存插座,可外接16GB/32GB/64GB/128GB/256GB eMMC模块 • 用于NVMe SSD (PCIe 3.0 x4) 的 M.2 2280 插槽高达2,000 MB/s
USB 2xUSB3.0; 2xUSB2.0; 1xType-C
视频输出 • 2x HDMI 2.1 输出,高达8K@60FPS • 1x Type-C(DP 1.4A)输出,高达8K@30FPS • 1x HDMI输入,高达4K@60FPS • 1 x MIPI DSI 4 Lane输出,高达4K@60Hz
TP接口 1x6Pin FPC插座
摄像头 1xMIPI CSI 4 Lane
音频 CODEC:ES8388 • 1x3.5mm 耳机孔音频输入/输出 • 1xMIC 输入 • 1xHDMI 2.1 eARC • 1x扬声器
以太网 2xPCIe 2.5G LAN(RTL8125BG)
扩展口 40Pin双排插针,具有以下复用功能: UART、 I2C、SPI、 CAN、I2S、PDM、AUDDSM、SDIO、PWM、GPIO。
PCIe M.2 M-KEY Socket M.2 connector M key (bottom) for NVMe with PCIe 3.0 x4 lanes 2280 SSD固态硬盘
PCIe M.2 E-KEY Socket M.2 connector E key (top) for connectivity with PCIe 2.0 x1/PCM/UART/USB2.0,支持2230 Wi-Fi6 /BT模块
按键 1x MaskROM键,1xRECOVERY,1x开关机键
供电 支持Type-C供电,5V@4A
红外接收器 1x红外接收管
LED RGB LED侧发光
FAN 5V FAN
RTC 2PIN:RTC备用电池
调试 3Pin调试串口(UART)
支持的操作系统 Orangepi OS(Droid)、Orangepi OS(Arch)、Orangepi OS(OH)、Ubuntu22.04、Debian11、Android12

外观规格介绍

产品尺寸 100mm*75mm
重量 86.5g

我的清单

这个开发板我从京东香橙派官方旗舰店购买的,购买的时候选择开发板只有一个开发板,没有其他配件,其他配件要的话另加购物车下单

我的开发板、电源适配器、风扇都是从香橙派官方旗舰店购买的,本来我是想从第三方购买电源适配器配件的,但是第三方生产的目前只有5V@3A的电源适配器,不够用,所以我只能从官方购买,官方的电源适配器是5V@4A的,而且不支持PD充电

风扇要从第三方买的话就最好外壳一起买了,不然预留空间可能不够或者不方便固定,我当时就没考虑装外壳了(官方的外壳、扇热片、风扇只能3选1安装),正好看到官方旗舰店有风扇,而且风扇是自带扇热片的,膨胀螺丝可以直接固定在开发板上,所以我就买了官方的风扇

硬盘我不敢购买二手的,因为我之前丢过重要数据,数据无价,所以我只能购买新的硬盘,我选择了梵想的S500PRO 1TB的NVMe固态硬盘,这个硬盘是我在京东购买的,我选择了梵想京东自营旗舰店的,PCIE 3.0 x4的接口(够用就行),这个硬盘是我用来装系统的,我还有一个NVMe网卡,是我从拆机卡上拆下来的RTL8852BE,这个网卡是我用来连接网络的,我还有一个外置天线,是我从拼多多上购买的10dbi天线

商品 数量 备注
香橙派 5 Plus开发板 1个 官方旗舰店
电源适配器 1个 官方旗舰店
风扇 1个 官方旗舰店
外置天线 1个 拼多多 10dbi天线
m.2网卡 1个 拆机卡 RTL8852BE
NVMe固态硬盘 1个 梵想 S500PRO 1TB
USB转TTL模块 1个 拼多多 CH340G 模块
读卡器 1个 绿联数码旗舰店 USB 3.0 SD/TF双卡单读卡器
TF卡 1个 朗科官方旗舰店 64GB TF卡

此处省略一些次要的配件

屏幕截图
屏幕截图

安装系统

我选择了官方的 Debian bookworm 系统(镜像是Orangepi5plus_1.0.8_debian_bookworm_server_linux6.1.43.img),这个系统是我从官方网站下载的,官方的镜像那些驱动都带齐了,不用自己编译内核,这板子就别想着图形化桌面了吧,命令行习惯了也挺方便的,我用的是串口连接的,串口连接的话需要一个串口转USB的线

我首先要把系统烧录在TF卡上,因此需要一个TF卡的读卡器,我用的是绿联数码旗舰店的USB 3.0 SD/TF双卡单读卡器,这个读卡器是我从京东购买的,我用的是64GB的TF卡,这个TF卡是我从淘宝购买的,我用的是朗科的TF卡(够用就行)

烧录 Linux 镜像到 TF 卡的方法见PDF [基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法]和[基于 Ubuntu PC 将 Linux 镜像烧写到 TF 卡的方法]

使用 TF 卡启动 linux 系统后,我们首先烧录 u-boot 镜像到 SPI Flash 中

  1. 先运行下 nand-sata-install,普通用户记得加 sudo 权限,我这里为了方便直接切换到 root 用户了

    orangepi@orangepi5plus:~$ sudo -i
    root@orangepi5plus:~# nand-sata-install
  2. 然后选择 7 Install/Update ther bootloader on SPI Flash

  3. 然后选择

  4. 然后请耐心等待烧录完成,烧录完成后显示如下所示(左下角会显示一个Done)

然后将上文的 Orangepi5plus_1.0.8_debian_bookworm_server_linux6.1.43.img 拷贝到 TF 卡中

我使用了 MobaXterm 的 SSH 连接,在左侧 SFTP 上传镜像文件

然后校验 sha256sum

root@orangepi5plus:~# sha256sum Orangepi5plus_1.0.8_debian_bookworm_server_linux6.1.43.img

确保得到的校验值与官方提供的值一致

接下来,我们先确认下 NVMe SSD 已经被开发板的 linux 正常识别了。如果 NVMe SSD 正常识别了的话,使用 sudo fdisk -l 命令就能看到 nvme 相关的信息

root@orangepi5plus:~# fdisk -l | grep "nvme0n1" Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors

使用 lspci 命令可以看到一个 NVMe 相关的 PCI 设备

root@orangepi5plus:~# lspci
0000:00:00.0 PCI bridge: Rockchip Electronics Co., Ltd Device 3588 (rev 01)
0000:01:00.0 Non-Volatile memory controller: SK hynix BC501 NVMe Solid State Drive

然后我们可以使用 dd 命令清空下 NVMe SSD(可选)

root@orangepi5plus:~# dd bs=1M if=/dev/zero of=/dev/nvme0n1 count=2000 status=progress
root@orangepi5plus:~# sync 10

然后就可以使用 dd 命令烧录开发板的 linux 镜像到 NVMe SSD 中

  1. 下面的命令中 if= 参数后面是要填写 linux 镜像存放的完整路径+Linux 镜像的名字(比如/home/orangepi/Desktop/Linux 镜像的名字)。因为上面我们已经进入 linux 镜像的路径下了,所以只需要填写 Linux 镜像的名字的即可。
  2. 下面命令中的 linux 镜像名请不要照抄,要替换为实际的镜像名(因为镜像的版本号可能会更新)。

然后使用 dd 命令将镜像写入 NVMe 硬盘

root@orangepi5plus:~# dd bs=1M if=Orangepi5plus_1.0.8_debian_bookworm_server_linux6.1.43.img of=/dev/nvme0n1 status=progress
root@orangepi5plus:~# sync

当成功烧录开发板的 linux 镜像到 NVMe SSD 后,此时就可以使用 poweroff 命令关机了。然后请拔出 TF 卡,再短按电源按键开机,此时就会启动 SPIFlash+NVMe SSD 中的 linux 系统了。

安装 Proxmox VE

这个过程相当折腾!!!不建议后来人尝试,因为性能不够,我只是折腾一下,不是用来做生产环境的

这个过程我参考了 安装Arm版本的Proxmox VE | 佛西博客

我安装的是 PVE 8

香橙派5plus 的Debian 12 server 使用的是 nmcli 工具管理的网络,需要停用NetworkManager服务

systemctl disable NetworkManager
systemctl stop NetworkManager

编辑网卡配置文件

vim /etc/network/interfaces

添加如下参数

auto enP3p49s0
iface enP3p49s0 inet static
# 注意替换下面的mac地址。使用ip a查看网卡的mac地址
hwaddress ether C4:4F:33:4F:33:4F
address 192.168.204.73/24
gateway 192.168.204.254

请自觉将 enP3p49s0 换成自己的网卡(香橙派5plus是enP3p49s0和enP4p65s0,无线网卡是wlP2p33s0,也可能不一样?具体请自己查看)。把ip换成自己的ip(可以通过命令ip a 查看自己的网卡名)

要保留原有的回环接口

auto lo
iface lo inet loopback

配置dns

echo "nameserver 223.5.5.5" >>/etc/resolv.conf
echo "nameserver 223.6.6.6" >>/etc/resolv.conf

重启网络服务

systemctl restart networking.service

配置host
重要:pve服务需要hosts文件正确,否则会出现无法启动的问题。

这是原本的/etc/hosts文件

127.0.0.1   localhost
127.0.1.1 orangepi5plus
::1 localhost orangepi5plus ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

从上面的文件,可以看出主机 hostname 为 orangepi5plus,这很关键。

我们将 ::1 这上面的部分改成如下:

127.0.0.1 localhost.localdomain localhost
192.168.204.73 orangepi5plus.pvetest.com orangepi5plus
192.168.204.73 orangepi5plus.pvetest.com armbian这段结构是ip.fqdn.hostname

fqdn就是域名全称。例如www.baidu.com。www则代表主机名,baidu.com是域名,fqdn是www.baidu.com

fqdn可以自己取,如果你不懂,你就按照我这个来填。但是你必须将debian换成自己的hostname。这个hostname将作为PVE的节点名称。

也请自己将ip换成自己的ip.

并且将::1后面的 orangepi5plus 字样删除

最后的hosts如下。也可以复制下面的host,替换fqdn和hostname即可

127.0.0.1   localhost.localdomain localhost
192.168.204.73 orangepi5plus.pvetest.com orangepi5plus

::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

保存之后。重启机器,避免出现一些奇怪的问题。

添加源

如果是安装pve8,且版本为bookworm,则添加如下源

echo "deb https://mirrors.apqa.cn/proxmox/debian/pve bookworm port">/etc/apt/sources.list.d/pveport.list
# 添加key
curl https://mirrors.apqa.cn/proxmox/debian/pveport.gpg -o /etc/apt/trusted.gpg.d/pveport.gpg

四:安装Proxmox VE
使用正确的path

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

安装前建议使用科学上网

我使用 Windows clash verge 的局域网代理

export http_proxy="http://192.168.204.113:10809/";
export https_proxy="http://192.168.204.113:10809/";
export no_proxy="localhost,127.*,10.*,172.16.*,172.17.*,172.18.*,172.19.*,172.20.*,172.21.*,172.22.*,172.23.*,172.24.*,172.25.*,172.26.*,172.27.*,172.28.*,172.29.*,172.30.*,172.31.*,192.168.*";

安装Proxmox VE

apt update && apt install -y proxmox-ve

会出现一个弹窗,请选择 no configuration

等上一段时间,安装结束之后,如果没有啥奇怪的报错,就可以访问pve。

我一共尝试了3次PVE的安装,第一次是安装失败了,原因是我没有乖乖的修改hosts

第二次是安装成功了,但是无法访问(各种奇妙的报错)
屏幕截图
第三次终于安装成功了,可以访问了
屏幕截图

配置Proxmox VE

需要注意一些CPU配置

下面为必须遵守的配置规则。

CPU:host、max、Cortex-A76、Cortex-A55都可以

CPU 大小核不能混用,不然机器无法启动VNC没有显示,要么全用大核,要么全用小核,在创建虚拟机的时候,绑定CPU填写指定的核,数字从0开始,比如0-3是大核,4-7是小核,填写0,1,2,3就是使用那4个大核,填写4,5,6,7就是使用那4个小核
屏幕截图
CPU 大小核混用的表现:VNC没有显示,无法启动虚拟机,CPU跑满
屏幕截图
屏幕截图

BIOS:OVMF

OSYPE: l26(默认就是这个)

磁盘:SCSI

磁盘控制器:Virtio-Scsi(非single)

光驱:SCSI

需要注意,虚拟机需要有EFI ACPI支持,才能启动。

还有就是要图形化配置网络的话,需要先安装一个软件包

apt install -y ifupdown

要使用无线网卡的话,只能去/etc/network/interfaces配置,不要使用nmcli,因为 NetworkManager 没有启用

然后我在PVE上安装了一个Debian 12 arm64的虚拟机,用来做一些实验

我尝试过安装 OpenWrt,但是无法启动,算了,不折腾了

Windows 11 Arm 也无法启动,也算了,不折腾了

搭建 Minecraft 服务器

我跑了 Minecraft Java版服务器,可以看到很经典的“一核有难,多核围观”
屏幕截图
屏幕截图

于是我后面直接把 Proxmox VE 扬了,我再也不在 armv8 安装PVE了(除非社区能主力维护),直接在 香橙派官方镜像 Debian 12 上安装了 Minecraft 服务器,性能好多了

搭建 幻兽帕鲁 服务器

我参考了 Mac 系统(M系处理器)搭建幻兽帕鲁(palworld)服务器 - 哔哩哔哩

我之前在 Armv8 的 M2 CPU的 Macmini 上搭建过幻兽帕鲁服务器,性能相当不错(Mac 的 M 系列CPU都是什么外星科技啊~),但是那台 Macmini 是我朋友的,只是搭建玩了一个礼拜,所以我就又在香橙派上搭建了一个幻兽帕鲁服务器

创建一个文件夹,例如:palworld-arm-docker,在里面创建一个空的子文件夹 palworld

我使用 docker compose 来搭建幻兽帕鲁服务器,先搓一个docker-compose.yml文件

version: '3'
services:
pal:
image: czy0612/palworld-server
restart: always
mem_limit: 16g
container_name: pal
ports:
- 8211:8211/udp
- 25575:25575/tcp
volumes:
- ./PalWorldSettings.ini:/home/steam/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
- ./palworld:/home/steam/Steam/steamapps/common/PalServer/

然后在 palworld-arm-docker 文件夹下面创建 PalWorldSettings.ini 文件。

官方文档:https://tech.palworldgame.com/optimize-game-balance

配置生成器:https://dysoncheng.github.io/PalWorldSettingGenerator/setting.html

这是我的配置文件,我是根据配置生成器生成的

[/Script/Pal.PalGameWorldSettings]
OptionSettings=(Difficulty=Easy,DayTimeSpeedRate=1,NightTimeSpeedRate=1,ExpRate=2,PalCaptureRate=2,PalSpawnNumRate=1,PalDamageRateAttack=1,PalDamageRateDefense=1,PlayerDamageRateAttack=1,PlayerDamageRateDefense=1,PlayerStomachDecreaceRate=1,PlayerStaminaDecreaceRate=1,PlayerAutoHPRegeneRate=1,PlayerAutoHpRegeneRateInSleep=1,PalStomachDecreaceRate=1,PalStaminaDecreaceRate=1,PalAutoHPRegeneRate=1,PalAutoHpRegeneRateInSleep=1,BuildObjectDamageRate=1,BuildObjectDeteriorationDamageRate=1,CollectionDropRate=1,CollectionObjectHpRate=1,CollectionObjectRespawnSpeedRate=1,EnemyDropItemRate=1,DeathPenalty=None,bEnablePlayerToPlayerDamage=False,bEnableFriendlyFire=False,bEnableInvaderEnemy=True,bActiveUNKO=False,bEnableAimAssistPad=True,bEnableAimAssistKeyboard=False,DropItemMaxNum=3000,DropItemMaxNum_UNKO=100,BaseCampMaxNum=128,BaseCampWorkerMaxNum=20,DropItemAliveMaxHours=1,bAutoResetGuildNoOnlinePlayers=False,AutoResetGuildTimeNoOnlinePlayers=72,GuildPlayerMaxNum=20,PalEggDefaultHatchingTime=0,WorkSpeedRate=1,bIsMultiplay=False,bIsPvP=False,bCanPickupOtherGuildDeathPenaltyDrop=False,bEnableNonLoginPenalty=True,bEnableFastTravel=True,bIsStartLocationSelectByMap=True,bExistPlayerAfterLogout=True,bEnableDefenseOtherGuildPlayer=False,CoopPlayerMaxNum=12,ServerPlayerMaxNum=96,ServerName="xiaoluo Palworld Server",ServerDescription="",AdminPassword="xiaoluo",ServerPassword="xiaoluo",PublicPort=8211,PublicIP="",RCONEnabled=True,RCONPort=25575,Region="",bUseAuth=True,BanListURL="https://api.palworldgame.com/api/banlist.txt")

然后运行 docker-compose up -d 就可以启动幻兽帕鲁服务器了

看看 docker logs -f pal 看看有没有报错,很大概率被墙了资源下载不来,我是直接用的clash(clash Meta + metacubexd面板,文档见https://wiki.metacubex.one/)的代理

然后就可以在游戏里面连接服务器了(从Steam 拉取资源文件真的很漫长……)

我顺便给他搓了一个备份的脚本

#!/bin/sh
cd /Users/xiaoluo/palworld-arm-docker/
tar -czvf "/Users/xiaoluo/palworld-arm-docker/backup/palworld_backup_$(date +'%Y%m%d_%H%M%S').tar.gz" -C /Users/xiaoluo/palworld-arm-docker/palworld/Pal/Saved/ .

运行成功地截图:

屏幕截图

重新编译内核启用 Clash TUN 支持

直接运行 clash 打开 TUN 会报错

ERRO[2024-05-06T19:21:52.768503418+08:00] Start TUN listening error: configure tun interface: cleanup rules: operation not supported
# 下面是后续步骤编译没有启用 ipv6 的选项的报错
ERRO[2024-05-07T11:16:50.007285842+08:00] Start TUN listening error: configure tun interface: add rule 0/6: address family not supported by protocol
````

我在香橙派 5plus 上安装了 Clash,但是无法使用TUN模式,原因是官方的镜像的内核没有 ip rule 的支持,所以我就自己编译了一个内核

首先,我需要一台 Ubuntu 22.04 的虚拟机,我选择在我的电脑上使用 VMware Workstation Pro 安装 Ubuntu 22.04 server x86_64

然后我需要从 github 上下载源码

```bash
git clone https://github.com/orangepi-xunlong/orangepi-build.git -b next

注意,Orange Pi 5 Plus 开发板是需要下载 orangepi-build 的 next 分支源码的, 上面的 git clone 命令需要指定 orangepi-build 源码的分支为 next

开发板当前使用的 u-boot 和 linux 内核版本如下所示

分支 u-boot 版本 linux 内核版本
legacy u-boot 2017.09 linux5.10
current u-boot 2017.09 linux6.1

这里所说的分支和 orangepi-build 源代码的分支不是同一个东西,请不要搞混了。此分支主要是用来区分不同内核源码版本的
目前 RK 提供的 linux5.10 bsp 内核我们定义为 legacy 分支,linux6.1 bsp 内核我们定义为 current 分支

orangepi-build 下载完后会包含下面的文件和文件夹

  1. build.sh: 编译启动脚本
  2. external: 包含编译镜像需要用的配置文件、特定的脚本以及部分程序的源码等
  3. LICENSE: GPL 2 许可证文件
  4. README.md: orangepi-build 说明文件
  5. scripts: 编译 linux 镜像的通用脚本

orangepi-build 第一次运行的时候会自动下载交叉编译工具链放在 toolchains 文件夹中,每次运行 orangepi-build 的
脚本后,都会检查 toolchains 中的交叉编译工具链是否都存在,如果不存在则会重新开始下载,如果存在则直接使用,不会重复下载

orangepi-build 第一次运行的时候会去下载交叉编译工具链、u-boot 和 linux 内核源码,成功编译完一次 linux 镜像后在 orangepi-build 中可以看到的文件和文件夹有

  1. build.sh: 编译启动脚本
  2. external: 包含编译镜像需要用的配置文件、特定功能的脚本以及部分程序的源码,编译镜像过程中缓存的 rootfs 压缩包也存放在 external 中
  3. kernel: 存放 linux 内核的源码,里面名为 orange-pi-5.10-rk35xx 的文件夹存放的就是 RK3588/RK3588S 系列开发板 legacy 分支的内核源码,名为 orange-pi-6.1-rk35xx 的文件夹存放的就是 RK3588/RK3588S 系列开发板 current 分支的内核源码,内核源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载内核源码
  4. LICENSE: GPL 2 许可证文件
  5. README.md: orangepi-build 说明文件
  6. output: 存放编译生成的 u-boot、linux 等 deb 包、编译日志以及编译生成的镜像等文件
  7. scripts: 编译 linux 镜像的通用脚本
  8. toolchains: 存放交叉编译工具链
  9. u-boot: 存放 u-boot 的源码,里面名为 v2017.09-rk3588 的文件夹存放的就是 RK3588/RK3588S 系列开发板 legacy 和 current 分支的 u-boot 源码,u-boot 源码的文件夹的名字请不要手动修改,如果修改了,编译系统运行时会重新下载 u-boot 源码
  10. userpatches: 存放编译脚本需要用到的配置文件

编译 Linux 内核

首先,我们需要进入 orangepi-build 目录,然后运行 build.sh 脚本

第一次随便找个 orangepi5plus 里面的默认选项编译一次,因为要下载依赖和配置文件,然后再修改配置文件 /root/orangepi-build/external/config/kernel/linux-rockchip-rk3588-current.config,添加/修改下面的配置

CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_ESP=y
CONFIG_IPV6_MIP6=m
CONFIG_IPV6_TUNNEL=y
CONFIG_IPV6_MULTIPLE_TABLES=y
# 下面一条是本身没有的配置
CONFIG_IPV6_SUBTREES=y
CONFIG_IPV6_MROUTE=y
# AMD 无线网卡的支持
CONFIG_NET_VENDOR_AMD=y
CONFIG_AMD_PHY=y
CONFIG_MT7921E=m
CONFIG_MT7921S=m
CONFIG_MT7921U=m

然后再次运行 build.sh 脚本

菜单会显示出来,选择 Kernel package -> orangepi5plus …… -> Show a kernel configuration menu before compilation -> current ……

编译好了之后,会在 /root/orangepi-build/output/debs/ 文件夹下生成多个 deb 包,然后我们可以把 linux-image-current-rockchip-rk3588_1.0.8_arm64.deb 包传到香橙派5plus上

先移除旧内核(此操作前建议备份 /boot 目录)

apt purge -y linux-image-current-rockchip-rk3588

然后安装新内核

dpkg -i linux-image-current-rockchip-rk3588_1.0.8_arm64.deb

确保内核安装成功的情况下,重启系统

然后就可以使用 TUN 模式了

屏幕截图

我使用 mihomo (Clash Meta) 作为核心,使用 metacubexd 作为面板

我将 metacubexd 的 dist 正确解压到了 /etc/mihomo/metacubexd/

我使用 systemctl enable mihomo 命令启用开机自启

这是我的配置文件(部分)

port: 7890
socks-port: 7891
redir-port: 7892
tproxy-port: 7893
mixed-port: 10809
inbound-tfo: true
mode: rule
ipv6: true
log-level: debug
find-process-mode: always
allow-lan: true
geodata-mode: true
tcp-concurrent: true
external-controller: :9090
secret: "my secret"

external-ui: metacubexd

interface-name: wlP2p33s0

tun:
enable: true
stack: system
dns-hijack:
- 'any:53'
- 'tcp://any:53'
auto-route: true
auto-detect-interface: false
strict-route: true

执行 ip a 查看无线网卡的名字,然后填写到配置文件的 interface-name 中

如果多了张网卡,则说明 TUN 模式启用成功

使用 TUN 模式的 最大好处就是可以让一些不遵循代理环境变量的软件也能走代理

省去了本机上为 docker 等配置代理的麻烦

root@orangepi5plus:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host noprefixroute
valid_lft forever preferred_lft forever
2: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1000
link/tunnel6 :: brd :: permaddr 2abc:96d8:87b8::
3: enP3p49s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether c0:74:2b:fe:4a:e0 brd ff:ff:ff:ff:ff:ff
4: enP4p65s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether c0:74:2b:fe:4a:e1 brd ff:ff:ff:ff:ff:ff
5: wlP2p33s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 28:39:26:37:89:bd brd ff:ff:ff:ff:ff:ff
inet 192.168.204.188/24 brd 192.168.204.255 scope global noprefixroute wlP2p33s0
valid_lft forever preferred_lft forever
inet 192.168.204.155/24 brd 192.168.204.255 scope global secondary dynamic noprefixroute wlP2p33s0
valid_lft 83859sec preferred_lft 83859sec
inet6 fe80::f97d:20b0:70b7:5781/64 scope link noprefixroute
valid_lft forever preferred_lft forever
# 省略了一部分 docker 的网卡
20: Meta: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 9000 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 198.18.0.1/30 brd 198.18.0.3 scope global Meta
valid_lft forever preferred_lft forever
inet6 fe80::afa9:4d02:2243:ebda/64 scope link stable-privacy
valid_lft forever preferred_lft forever

哦对了,我使用 smartdns 作为 DNS 服务器,而不是使用 clash 的 DNS 服务器功能

这样可以让设备能享受到智能解析的好处

我的 smartdns 配置文件

bind [::]:53
server 8.8.8.8
server 1.1.1.1
server 223.5.5.5
server 223.6.6.6
server 114.114.114.114
server 119.29.29.29
server-tls 1.1.1.1