FnNAS 是一款基于最新 Linux 内核(Debian 发行版)深度定制的操作系统。它具备出色的硬件兼容能力,全面支持主流 x86 及 Arm64 设备,支持用户自主组建 NAS 并灵活扩展外部存储。现在,您可以轻松将电视盒子的 Android TV 系统替换为 FnNAS,将其打造为一台功能强大的私有数据存储服务器。
本项目得益于众多 贡献者 的持续贡献,并在 FnNAS 官方技术专家的指导下,为搭载 Amlogic、Rockchip 和 Allwinner 芯片的电视盒子构建了 Arm64 架构适配的 FnNAS 系统。构建版本完整继承了官方系统的全部功能,支持写入 eMMC 启动以及内核在线更新。最新固件请前往 Releases 页面下载。欢迎 Fork 本项目进行个性化定制。如果本项目对您有所帮助,请点击仓库右上角的 Star ⭐ 以示支持!
| 系统名称 | 默认账号 | 默认密码 | SSH 端口 | IP 地址 |
|---|---|---|---|---|
| 🛜 FnNAS.OS | 自定义 | 自定义 | 22 | 从路由器获取 IP |
⬆️ 各平台(晶晨/瑞芯微/全志)型号均按 SoC 性能由高至低排列。
Tip
目前 s905 系列的盒子仅支持从 TF/SD/USB 启动使用,其他型号的盒子均支持写入 eMMC 运行。更多信息请查阅 ✅支持的设备列表说明。如需添加新设备,可参考说明文档 12.15 章节的方法添加新的支持设备。
选择与您的设备型号对应的 FnNAS 系统,不同设备的使用方法请参阅相应说明。
-
Rockchip平台的安装方法请参阅说明文档 第 8 章节 的介绍,安装流程与 Armbian 相同。 -
Amlogic和Allwinner平台,使用 Rufus 或 balenaEtcher 等工具将系统镜像写入 USB 设备,然后将写好的 USB 插入盒子。在路由器管理界面中查找新上线的名为 debian 的设备,获取其 IP 地址(例如:192.168.1.15),然后通过浏览器访问 http://192.168.1.15:5666 进入飞牛账号创建界面。创建自定义账号后登录飞牛系统,在系统设置→SSH中开启 SSH 功能,随后使用 SSH 客户端连接系统终端,执行以下命令:
sudo -i
fnnas-install| 可选参数 | 默认值 | 选项 | 说明 |
|---|---|---|---|
| -m | no | yes/no | 使用主线 u-boot |
| -a | yes | yes/no | 使用 ampart 分区表调整工具 |
| -l | no | yes/no | 显示全部设备列表 |
举例:fnnas-install -m yes
Tip
分区选项说明:当磁盘可用空间大于 16GiB 时,支持自定义系统根分区大小(默认 16GiB)。
在系统重装过程中,脚本会自动检测 eMMC 上的分区结构。若发现存在个人数据分区(P3),分区菜单将激活选项 3。选择该选项可严格保留当前分区表布局,从而确保 P3 分区内的数据不被覆盖。 系统安装完毕后,您可以在飞牛系统的 存储空间管理 界面中直接挂载并使用该分区。
| 选项 | 说明 |
|---|---|
| 1 | 系统分区(Rootfs) 限制为 16GiB。 |
| 2 | [默认] 系统分区扩容至全盘 (100%)。 |
| 3 | 继承当前系统分区大小 (保留 P3 分区的个人数据)。 |
| ≥16 | 输入数字 (GiB) 以自定义系统分区大小。 |
登录 FnNAS 系统 SSH 终端 → 输入命令:
sudo -i
fnnas-update| 可选参数 | 默认值 | 选项 | 说明 |
|---|---|---|---|
| -r | ophub/fnnas | <owner>/<repo> |
设置从 github.com 下载内核的仓库 |
| -k | 最新版 | 内核版本 | 设置内核版本 |
| -b | yes | yes/no | 更新内核时自动备份当前系统使用的内核 |
| -m | no | yes/no | 使用主线 u-boot |
| -s | 无 | 无/磁盘名称 | [SOS] 恢复 eMMC/NVMe/sdX 等磁盘中的系统内核 |
| -h | 无 | 无 | 查看使用帮助 |
举例: fnnas-update -k 6.12.63
通过 -k 参数指定内核版本号时,可以准确指定具体版本号,例如:fnnas-update -k 6.12.63,也可以指定内核系列前缀,例如:fnnas-update -k 6.12,指定系列前缀时将自动采用该系列的最新版本。
更新内核时会自动备份当前系统使用的内核,备份文件存储在 /ddbr/backup 目录下,保留最近 3 个历史版本的内核。若新内核运行不稳定,可随时回滚至备份的内核版本。若内核更新导致系统无法启动,可通过 fnnas-update -s 恢复系统内核。
当运行 docker 等内存占用较大的应用时,如果设备内存不足,可创建 swap 分区,将部分磁盘空间用作虚拟内存。以下命令的参数单位为 GB,默认值为 1。
登录 FnNAS 系统 SSH 终端 → 执行以下命令:
fnnas-swap 1登录 FnNAS 系统 SSH 终端 → 执行以下命令:
fnnas-openvfd请参阅 LED 屏显示控制说明 进行配置。
支持通过 TF/SD/USB 启动系统后对盒子的 eMMC 进行备份与恢复。建议在全新设备上安装 FnNAS 前,先备份原厂 Android TV 系统,以便后续需要时恢复原系统。
请从 TF/SD/USB 启动 FnNAS 系统 → 执行以下命令:
fnnas-ddbr根据提示输入 b 执行备份,输入 r 执行恢复。
Important
此外,也可通过线刷方式将 Android 系统写入 eMMC。Android 系统镜像可在 Tools 中获取。
将系统中的所有服务脚本更新至最新版本,请登录 FnNAS 系统 SSH 终端 → 执行以下命令:
fnnas-sync-
克隆仓库到本地
git clone --depth 1 https://github.com/ophub/fnnas.git -
安装必要的依赖包(以 Ubuntu 24.04 为例)
sudo apt-get update -y
sudo apt-get full-upgrade -y
# For Ubuntu-24.04
sudo apt-get install -y $(cat make-fnnas/script/ubuntu2404-make-fnnas-depends)-
进入
~/fnnas根目录,创建fnnas-arm64文件夹,并将 FnNAS 镜像文件(如fnos_arm_1.0.0_258.img)放入~/fnnas/fnnas-arm64目录。 -
在
~/fnnas根目录下运行sudo ./renas -b s905x3 -k 6.12.63命令,即可生成指定设备的 FnNAS 镜像文件。生成的文件存储在~/fnnas/out目录下。
| 参数 | 含义 | 说明 |
|---|---|---|
| -b | Board | 指定目标设备代号。您可以指定具体设备进行编译(如 -b s905x3),或使用下划线连接多个设备代号同批编译(如 -b s905x3_s905d)。本参数还支持通过特殊关键字进行批量编译:all 表示编译全部设备,first50 表示编译设备库中的前 50 个,range50_100 表示编译从第 51 个至第 100 个设备(range100_150 同理),last20 表示最后 20 个。此外,支持按硬件平台(amlogic、rockchip、allwinner)进行分类编译,直接输入平台名称即可编译对应的所有镜像,例如 -b amlogic;若在平台名称后附加数值,则可指定编译该平台列表中的特定范围,例如 -b amlogic50 表示编译 Amlogic 平台支持列表中的前 50 个设备,-b amlogic50_100 表示编译从第 51 个至第 100 个设备。具体的设备代号支持列表,请详见 model_database.conf 中的 BOARD 配置项。默认值:all |
| -r | KernelRepo | 指定 github.com 内核仓库的 <owner>/<repo>。默认值:ophub/fnnas |
| -k | Kernel | 指定 kernel 名称,如 -k 6.12.63 。多个内核使用 _ 进行连接,如 -k 6.12.63_6.18.3 。 |
| -a | AutoKernel | 设置是否自动采用同系列最新版本内核。当为 true 时,将自动在内核库中检查 -k 指定的内核(如 6.12.63)同系列是否存在更新版本,若存在则自动切换至最新版本。设置为 false 时将编译指定版本的内核。默认值:true |
| -s | Size | 设置系统镜像分区大小(单位:MiB)。仅设置 ROOTFS 分区大小时可只指定一个数值,例如:-s 6144。需同时设置 BOOTFS 和 ROOTFS 分区大小时,使用 / 连接两个数值,例如:-s 512/6144。默认值:512/6144 |
| -e | RootfsExpand | 设置系统根分区自动扩容大小(单位:GiB)。默认值:16 |
| -n | BuilderName | 设置 FnNAS 系统构建者签名。签名中请勿包含空格。默认值:无 |
sudo ./renas: 使用默认配置,对全部型号的电视盒子进行打包。sudo ./renas -b s905x3 -k 6.12.63: 推荐使用。使用默认配置打包指定内核。sudo ./renas -b s905x3 -k 6.12.y: 使用默认配置打包,内核自动采用 6.12.y 系列的最新版。sudo ./renas -b s905x3_s905d -k 6.12.63_6.18.3: 使用默认配置,同时打包多个内核。使用_连接多个内核参数。sudo ./renas -b s905x3 -k 6.12.63 -s 6144: 使用默认配置,指定单个内核和单个型号进行打包,系统分区大小设定为6144MiB。sudo ./renas -b s905x3_s905d: 使用默认配置,对多个型号的电视盒子进行全部内核打包,使用_连接多个型号。sudo ./renas -k 6.12.63_6.18.3: 使用默认配置,指定多个内核,对全部型号电视盒子进行打包,内核参数使用_连接。sudo ./renas -k 6.12.63_6.18.3 -a true: 使用默认配置,指定多个内核,对全部型号电视盒子进行打包,内核参数使用_连接。自动升级至同系列最新内核。sudo ./renas -b s905x3 -e 32: 使用默认配置,打包s905x3固件,系统根分区自动扩容大小设定为32GiB。
-
Workflows 配置文件位于 .github/workflows 目录下。
-
在 Actions 页面选择
Build FnNAS Image,即可使用 build-fnnas-image.yml 进行编译。点击Run workflow按钮启动编译。在选项面板中,可通过Custom fnnas image download url设置 FnNAS 镜像文件的下载地址,例如:https://fnnas.com/.../fnos_arm_1.0.0_258.img.xz等网络地址。若未设置,将默认使用 fnnas_base_image 中存储的官方镜像进行编译。
- name: Build FnNAS Image
uses: ophub/fnnas@main
with:
build_target: fnnas
fnnas_path: fnnas/*.img.xz
fnnas_board: s905d_s905x3_s922x_s905x
fnnas_kernel: 6.12.y
rootfs_expand: 16相关参数与本地打包命令相对应,请参考上面的说明。
| 参数 | 默认值 | 说明 |
|---|---|---|
| fnnas_path | 无 | 设置官方 Arm64 原版 FnNAS 镜像文件的路径。支持使用当前工作流中的文件路径(如 fnnas/*.img.xz),也支持网络下载地址(如 https://fnnas.com/.../fnos_arm_1.0.0_258.img.xz) |
| fnnas_board | all | 设置打包盒子的 board ,功能参考 -b |
| kernel_repo | ophub/fnnas | 指定 github.com 内核仓库的 <owner>/<repo>,功能参考 -r |
| fnnas_kernel | 6.12.y | 设置内核 版本,功能参考 -k |
| auto_kernel | true | 设置是否自动采用同系列最新版本内核,功能参考 -a |
| fnnas_size | 512/6144 | 设置系统 BOOTFS 和 ROOTFS 分区的大小,功能参考 -s |
| rootfs_expand | 16 | 设置系统根分区自动扩容大小,功能参考 -e |
| builder_name | 无 | 设置 FnNAS 系统构建者签名,功能参考 -n |
| 参数 | 含义 | 说明 |
|---|---|---|
| -r | debs_repo | 指定 github.com 上 debs 内核仓库的 <owner>/<repo>。默认值:ophub/fnnas |
| -e | debs_install | 设置是否安装官方提供的不同平台 debs 格式内核包。可选值:amlogic / rockchip / allwinner / none。默认值:none |
| -t | dtbs_install | 设置是否补充安装官方缺失的 dtbs 文件。可选值:true / false。默认值:true |
| -k | dtbs_version | 指定 kernel 名称,如 -k 6.12.63。默认值:6.12.y |
sudo ./rekernel: 使用默认配置。不安装 debs 内核包也不补充 dtbs 文件,直接对当前 FnNAS 镜像中的内核进行打包。sudo ./rekernel -e amlogic: 先将 amlogic 的 debs 内核包安装到当前系统,然后进行内核打包。sudo ./rekernel -t true: 先将官方缺失的 dtbs 文件补充安装到当前系统,然后进行内核打包。sudo ./rekernel -e allwinner -t false: 先将 allwinner 的 debs 内核包安装到当前系统,不补充安装 dtbs 文件,然后进行内核打包。
飞牛专用内核的编译方法详见 build-fnnas-kernel.yml 的说明。
- name: Build FnNAS Kernel
uses: ophub/fnnas@main
with:
build_target: kernel
fnnas_path: fnnas/*.img
debs_repo: ophub/fnnas
dtbs_install: true
dtbs_version: 6.12.y相关参数与本地打包命令相对应,请参考上面的说明。
| 参数 | 默认值 | 说明 |
|---|---|---|
| fnnas_path | 无 | 设置官方 Arm64 原版 FnNAS 镜像文件的路径。 |
| debs_repo | ophub/fnnas | 指定 github.com 的 debs 内核仓库的 <owner>/<repo>,功能参考 -r |
| debs_install | none | 设置是否安装官方提供的不同平台的 debs 格式内核包。功能参考 -e |
| dtbs_install | true | 设置是否补充安装官方没有的 dtbs 文件。功能参考 -t |
| dtbs_version | 6.12.y | 设置内核版本号。功能参考 -k |
飞牛镜像和内核使用相同的输出参数。
上传至 Releases 需要为仓库设置 Workflow 读写权限,详见使用说明。
| 参数 | 默认值 | 说明 |
|---|---|---|
${{ env.PACKAGED_OUTPUTPATH }} |
fnnas/out | FnNAS 系统及内核文件输出路径 |
${{ env.PACKAGED_OUTPUTDATE }} |
04.13.1058 | 打包日期(月.日.时分) |
${{ env.PACKAGED_STATUS }} |
success | 打包状态:success / failure |
首先感谢 coolsnowwolf 和 unifreq 等专家对本项目适配 FnNAS 提供的技术指导,同时感谢众多 贡献者 对 Armbian/OpenWrt 系统的支持。本项目在适配 FnNAS 的过程中直接继承和使用了这些项目的资源与技术方案。感谢各位的贡献与分享,让我们能够在更多设备上运行 FnNAS 系统。
本系统所使用的 u-boot、kernel 和 firmware 等资源主要来源于 unifreq/openwrt_packit 项目,部分文件由用户通过 amlogic-s9xxx-armbian / amlogic-s9xxx-openwrt / fnnas / luci-app-amlogic / kernel / u-boot 等项目的 Pull 和 Issues 贡献分享。为感谢这些先行者和分享者,已统一在 CONTRIBUTORS.md 中进行记录。再次感谢大家为设备赋予了新的生命与价值。
- amlogic-s9xxx-armbian 项目提供了适用于盒子的
Armbian系统,在支持 FnNAS 的相关设备上同样适用。 - amlogic-s9xxx-openwrt 项目提供了适用于盒子的
OpenWrt系统,在支持 FnNAS 的相关设备上同样适用。 - unifreq 为晶晨、瑞芯微和全志等更多盒子制作了
OpenWrt系统,是盒子社区的标杆项目,推荐使用。 - cooip-jm 在其 wiki 中分享了许多关于 Armbian、OpenWrt、LXC、Docker、AdGuard 等应用的使用方法,推荐参考学习。
The fnnas © OPHUB is licensed under GPL-2.0
