Yuhang Zheng

OK3588-C和FCU3501移植飞牛FnOS以及部署docker版OpenClash

N 人看过

一、OK3588-C移植飞牛FnOS

前一阵看到飞牛FnOS ARM版内测的消息,感觉很有意思,简单看了一下ARM版镜像因为内核使用的GitHub原生的linux-6.12.41版本,适配的rockchip的芯片有很多,而且也有大牛早早分享了文章《替换飞牛ARM版本镜像dtb启动自己的ARM设备》,看起来并不难,所以我们就简单先在OK3588-C底板上跑一下吧!

因为之前没有加入FnOS ARM版的内测群,没有获取内测资格,那么我们镜像就从Github上获取吧,链接为:https://github.com/ophub/fnnas

因为linux-6.12.41已经有了OK3588-C的设备树,所以基本上随便下载一个镜像直接改环境变量就可以了,但是为了保险起见,我还是选择了与OK3588-C主控相同的rangepi-5-plus的固件:fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img.gz

按照大牛上面分享的文章,我们直接修改环境变量就可以,因为大牛的文章说的是使用DiskGenuis程序去做文件替换和文件修改,但是我实测使用的时候,ext4分区下的文件替换需要升级付费专业版才可以实现,所以我们还是直接在Linux系统上进行操作吧。

1、解压镜像并挂载

首先是解压后得到镜像,查看镜像的分区格式:

$ gzip -d fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img.gz
$ fdisk -l fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img
Disk fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img:6.52 GiB,6996099072 字节,13664256 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:527676F0-16AD-4C13-9572-AB74A72A2DB7

设备                                                       起点     末尾     扇区  大小 类型
fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img1   32768  1079295  1046528  511M Linux 文件系统
fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img2 1081344 13662207 12580864    6G Linux 文件系统

可以看到镜像包含两个分区,其中分区1为启动分区,分区2为文件系统分区,然后我们直接对分区1进行挂载

$ sudo mkdir -p /mnt
$ sudo mount -o loop,offset=$((32768*512)) fnnas_rockchip_orangepi-5-plus_k6.12.41_2026.01.30.img /mnt

然后我们就可以进入镜像文件的分区1里面简单看一下了

$ ls -l /mnt/
总计 73812
-rw-r--r-- 1 root root      452  1月 30 04:47 armbianEnv.txt
-rw-r--r-- 1 root root     1536  1月 30 04:47 armbian_first_run.txt.template
-rw-r--r-- 1 root root    38518  1月 30 04:47 boot.bmp
-rw-r--r-- 1 root root     3334  1月 30 04:47 boot.cmd
-rw-r--r-- 1 root root     4882  1月 30 04:47 boot-desktop.png
-rw-r--r-- 1 root root     3406  1月 30 04:47 boot.scr
-rw-r--r-- 1 root root   242453  1月 30 04:47 config-6.12.41-trim
drwxr-xr-x 3 root root     4096  1月 30 04:47 dtb
lrwxrwxrwx 1 root root        3  1月 30 04:47 dtb-6.12.41-trim -> dtb
drwxr-xr-x 2 root root     4096  1月 30 04:47 extlinux
drwxr-xr-x 5 root root     4096  1月 30 04:47 grub
lrwxrwxrwx 1 root root       20  1月 30 04:47 Image -> vmlinuz-6.12.41-trim
-rw-r--r-- 1 root root 19232332  1月 30 04:47 initrd.img-6.12.41-trim
drwx------ 2 root root    16384  1月 30 04:46 lost+found
-rw-r--r-- 1 root root  5452151  1月 30 04:47 System.map-6.12.41-trim
lrwxrwxrwx 1 root root       20  1月 30 04:47 uInitrd -> uInitrd-6.12.41-trim
-rw-r--r-- 1 root root 19232396  1月 30 04:47 uInitrd-6.12.41-trim
-rw-r--r-- 1 root root 31314432  1月 30 04:47 vmlinuz-6.12.41-trim

其中dtb目录下就存放着各个设备的设备树文件,armbianEnv.txt文件中就是启动相关的环境变量配置文件。

2、修改启动环境变量

先简单看一下dtb目录下是否有OK3588-C开发板的设备树呢?

$ ls -l /mnt/dtb/rockchip/rk3588-ok3588-c.dtb
-rw-r--r-- 1 root root 92787  1月 30 04:47 /mnt/dtb/rockchip/rk3588-ok3588-c.dtb

可以看到设备树中存在ok3588-c.dtb,那这就好办了,我们甚至不需要额外去编译设备树,直接修改启动时的环境变量就可以了。

那么我们直接修改启动分区中的环境变量文件armbianEnv.txt:

verbosity=7
bootlogo=true
fdtfile=rockchip/rk3588-orangepi-5-plus.dtb
rootdev=UUID=eee67415-c26b-4427-ae20-f50a6222c350
rootfstype=btrfs
rootflags=compress=zstd:1
earlycon=on
console=serial
consoleargs=console=ttyFIQ0 console=tty1
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u
docker_optimizations=on
extraargs=rw rootwait video=HDMI-A-1:1920x1080@60e
extraboardargs=net.ifnames=0 max_loop=128
overlay_prefix=rk3588
overlays=uart7-m2
user_overlays=

将上面的fdtfile=rockchip/rk3588-orangepi-5-plus.dtb 改为fdtfile=rockchip/rk3588-ok3588-c.dtb即可。

3、烧写并启动系统

修改完成之后,卸载掉分区1,直接拿修改后的文件进行在OK3588-C上进行烧写。烧写时需要进入MASKROM模式,烧写的方式也与常规的Rockchip的方式稍有不同:

20251231194105.png

烧写完成之后等系统启机就可以了,我们可以接着串口,波特率115200。

进入控制台之后,使用ip命令设置一下网口的IP地址,然后直接在局域网的电脑上访问刚刚设置的IP就可以进入到正常的初始化阶段啦!

初始化完成之后,正式登陆系统,简单测试了一些功能都没有什么问题,设备信息都能正常显示,docker功能也可以使用,甚至远程访问功能中的FN Connect功能都可以正常的激活开通,使用FnOS官方的域名去做映射穿透访问,简直太赞了呀!易用性简直拉满!

二、FCU3501移植飞牛FnOS

经过上面的步骤,我们已经将飞牛FnOS移植到OK3588-C开发板了,网口和wifi看起来但是都可以使用。但是体验完成之后一想,这个毕竟是一个NAS系统,OK3588-C开发板上并没有多少可以挂载储存的地方,根本用不起来呀,飞凌现有的RK3588的产品中,好像就FCU3501可以多扩展几个储存设备。

FCU3501上毕竟还有两个m.2的接口可以接两块固态用,再加上用外接一个大容量的USB移动硬盘,这不就是一个基础版的NAS硬件了么。

那我们就试试看吧!

理论上OK3588-C和FCU3501都是用的FET3588-C的核心板,直接镜像通烧也不会有什么问题,确实我将上一步做好的OK3588-C的镜像烧到FCU3501上也可以启动,插上的两块NVME硬盘也能识别到,但是USB3.0外接的USB移动硬盘却是没反应,这是为什么呢?看看设备树吧!

1、下载内核源码

因为飞牛FnOS的内核是基于linux-6.12.41来做的,设备树也是用的linux-6.12.41原生支持的设备树,那我们就先把内核源码下载下来吧。

直接参考之前的文章步骤,在FnOS的命令行上进行操作:

forlinx@FCU3501:wget wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.12.41.tar.xz
forlinx@FCU3501:tar -xvf linux-6.12.
forlinx@FCU3501:cp /lib/modules/$(uname -r)/build/Module.symvers ./Module.symvers
forlinx@FCU3501:cp /boot/config-6.12.41-trim ./.config

2、修改设备树

基础的环境准备完了就直接打开 linux-6.12.41/arch/arm64/boot/dts/rockchip路径下的rk3588-ok3588-c.dts设备树。

看完之后才知道,原来这个里面的设备树都没有完整的适配USB接口呀!那我们直接参考其他的3588设备树进行修改添加就行,在设备树的最后追加USB相关的内容:

&u2phy0 {
        status = "okay";
};

&u2phy0_otg {
        status = "okay";
};

&u2phy1 {
        status = "okay";
};

&u2phy1_otg {
        status = "okay";
};

&usbdp_phy0 {
        status = "okay";
};

&usbdp_phy1 {
        status = "okay";
};

&usb_host0_xhci {
        dr_mode = "host";
        status = "okay";
};

&usb_host1_xhci {
        dr_mode = "host";
        status = "okay";
};

&usb_host2_xhci {
        status = "okay";
};

修改完成之后,编译设备树即可:

forlinx@FCU3501:/home/anna/linux-6.12.41$ make ARCH=arm64 dtbs -j`nproc`

编译完成之后,按照最开始的步骤,挂载镜像的第一个分区,并替换启动分区中的dtb/rockchip/rk3588-ok3588-c.dtb文件重新烧写就好啦!

3、硬盘配置

烧写完成之后,重新走一遍启机设置IP地址,访问FnOS系统并进行初始化设置等一系列的操作。进入系统之后就可以看到两块NVME硬盘和外接的USB硬盘就都可以识别到了。

我们直接将两块NVME硬盘做一个读写缓存,然后给外接的USB硬盘划成存储空间,这样我们使用的时候就可以稳定的跑满千兆网速啦!(虽然这样做相当于真实的储存空间并没有做热备,数据风险还是比较高的。)这样我们最起码把它作为一个文件的临时存储站还是没有任何问题的!

而且像是硬盘的健康状态监控什么的,总感觉要比直接Linux开个Samba感觉靠谱很多的样子。

image-20260131231834138image-20260131232202741

image-20260131232213006

三、部署docker版OpenClash

经过上面的步骤之后,我们成功在FCU3501上移植了飞牛FnOS,但是看着上面好用的docker功能,想着何不尝试在上面部署一下docker版OpenClash玩玩呢,这样还能解决多人共同科学上网的问题。

这里我参考的是这篇文章《飞牛NAS上搭建OpenWrt旁路由教程》

1、网络环境配置

首先是要在FCU3501的FnOS系统的命令行控制行操作,打开网口的混杂模式和创建Macvlan网络。

按照网络上的解释:“Macvlan 是一种用于创建虚拟网络接口的技术,可以让多个虚拟网络接口共享一个物理网络接口。这些虚拟接口每个都有一个独立的 MAC 地址,从而使每个虚拟接口都能像独立的物理接口一样进行网络通信。Macvlan 适用于需要高性能网络连接的容器和虚拟机环境。“

其实意思就是可以在Linux系统中虚拟出来一个网络设备,可以不使用host网络直接在局域网下能正常访问到docker下的虚拟系统。

开启混杂模式的命令如下:

forlinx@FCU3501:sudo ip link set eth0 promisc on

创建Macvlan网络的命令如下:

forlinx@FCU3501:sudo docker network create -d macvlan \
  --subnet=172.20.0.0/24 \
  --gateway=172.20.0.1 \
  -o parent=eth0 \
  macnet

其中
--subnet=【替换成你自己的ip段】 
--gateway=【替换成你自己的默认网关】 
-o parent=【替换成你自己的网卡名称】 
最后的macnet是你创建的Macvlan网络的名称,可以随便起一个。

配置完成之后可以使用命令查看macvlan网络

forlinx@FCU3501:/$ sudo docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
1961c0992ba4   bridge    bridge    local
c360f901b1a7   host      host      local
4023320df55f   macnet    macvlan   local
32d23c4dcd9f   none      null      local

或者直接在界面上也可以看到:回到飞牛桌面,打开docker应用,点击网络,你就会看到多出来一个macnet网络:

image-20260201113958478

2、拉取可用的安装了OpenClash的OpenWRT镜像

可以直接在docker应用的镜像仓库里面搜索,可以看到有很多相关的仓库,选择一个试一下就行

image-20260201114142350

我尝试了很多个,才找到了一个好用的,可以直接用下面的docker镜像,找到之后点击右边的下载按钮即可。

image-20260201114314072

其他的要么就是无法访问到界面,要么就是缺少配置,总之不太好用。

或者直接使用docker命令下载也可以

forlinx@FCU3501:/$ sudo docker pull piaoyizy/openwrt-aarch64:latest

3、创建对应的容器

使用以下命令创建对应的容器

forlinx@FCU3501:/$ sudo docker run --restart always --name openwrt -d --network macnet --ip 172.20.0.28 --privileged piaoyizy/openwrt-aarch64 /sbin/init

其中172.20.0.28为你自己的ip段其中一个未被占用的ip

运行完成之后,这时候可以回到飞牛Docker上,看看是否有一个叫openwrt的容器正在运行

image-20260201115109618

4、设置OpenWRT的网口IP

容器创建之后,我们需要进入到容器里面,设置一下OpenWRT系统的IP地址,可以使用以下命令进入容器:

forlinx@FCU3501:/$ sudo docker exec -it openwrt /bin/sh

进入容器之后,可以使用ifconfig命令对br-lan网络设备设置一下ip地址,将ip地址设置为上面创建容器的时候给macnet分配的那个ip相同。设置完成之后可以ping一下网关看看能不能ping通。ping通之后说明网络配置没问题,就可以进行下一步操作了。

image-20260201115516501

这个时候,我们就可以在172.20.0.0网络的局域网中的电脑上通过浏览器去访问OpenWRT系统的网页了。默认登陆名为root,密码为password

首次登陆之后会提示你去修改默认密码,按照提示修改一下就可以,然后捎带着改一下界面语言为中文一类的。

image-20260201120927971

接下来,我们进入OpenWRT的网络接口选项,可以看到下面的内容

image-20260201120016532

我们点击编辑按钮,对br-lan接口进行ip地址和网关的配置就可以,然后再高级设置里面再去配置DNS地址:

image-20260201120238472

image-20260201120249355

配置完成之后记得要保存修改哦,配置完成之后,那么网络部分就算配置完成了。

再接下来的内容,就是去配置使用OpenClash服务了,可以在服务选项卡里面找到对应的OpenClash选项,然后进去配置就可以,这里就不再多说啦!