Public
Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md
FnNAS

English Instructions | 中文说明

FnNAS is a deeply customized operating system built on the latest Linux kernel (Debian distribution). It offers excellent hardware compatibility with comprehensive support for mainstream x86 and Arm64 devices, enabling users to build their own NAS and flexibly expand external storage. Now, you can easily replace the Android TV system on your TV box with FnNAS, transforming it into a powerful private data storage server.

This project benefits from the sustained contributions of numerous contributors. Under the guidance of FnNAS official technical experts, we have built an FnNAS system adapted for Arm64 architecture, covering TV boxes powered by Amlogic, Rockchip, and Allwinner SoCs. The build version fully inherits all features of the official system, with support for writing to eMMC boot and online kernel updates. Please visit the Releases page to download the latest firmware. You are welcome to Fork this project for personalized customization. If this project is helpful to you, please click the Star ⭐ in the upper right corner of the repository to show your support!

FnNAS Firmware Default Information

System NameDefault AccountDefault PasswordSSH PortIP Address
🛜 FnNAS.OSCustomCustom22Get IP from Router

Supported Device List

⬆️ Models for each platform (Amlogic/Rockchip/Allwinner) are arranged by SoC performance from high to low.

SoCDeviceKernel
a311dKhadas-VIM3, WXY-OESfnnas
s922xBeelink-GT-King, Beelink-GT-King-Pro, Ugoos-AM6-Plus, ODROID-N2, X88-King, Ali-CT2000, WXY-OES-Plusfnnas
s905x3X96-Max+, HK1-Box, Vontar-X3, H96-Max-X3, Ugoos-X3, TX3(QZ), TX3(BZ), X96-Air, X96-Max+_A100, A95X-F3-Air, Tencent-Aurora-3Pro(s905x3-b), X96-Max+Q1, X96-Max+100W, X96-Max+_2101, Infinity-B32, Whale, X88-Pro-X3, X99-Max-Plus, Transpeed-X3-Plus, TOX1, Khadas-VIM3Lfnnas
s905x2X96Max-4G, X96Max-2G, MECOOL-KM3-4G, Tanix-Tx5-Max, A95X-F2, HG680-FJfnnas
s905l3aE900V22C/D, CM311-1a-YST, M401A, M411A, UNT403A, UNT413A, ZTE-B863AV3.2-M, CM311-1a-CH, IP112H, B863AV3.1-M2fnnas
s905l3bCM201-1, CM211-1, CM311-1, E900V21D, E900V22D, E900V21E, E900V22E, M302A/M304A, Hisense-IP103H, TY1608, TY1608, MGV2000, B860AV-2.1M, UNT403A, RG020ET-CA, M411Afnnas
s905l3CM211-1, CM311-1, HG680-LC, M401A, UNT400G1, UNT400G, UNT402A, ZXV10-BV310, M411A, ZXV10-B860AV3.2-M, ZXV10-B860AV2.1-U, E900V22D-2, CM201-1-6-YS, IP108H, M301A, B860AV2.1-Afnnas
s912Tanix-TX8-Max, Tanix-TX9-Pro(3G), Tanix-TX9-Pro(2G), Tanix-TX92, Tanix-TX9S, Nexbox-A1, Nexbox-A95X-A2, A95X, H96-Pro-Plus, VORKE-Z6-Plus, Mecool-M8S-PRO-L, Vontar-X92, T95Z-Plus, Octopus-Planet, Phicomm-T1, TX3-Mini, OneCloudPro-V1.1_V1.2fnnas
s905dMECOOL-KI-Pro, Phicomm-N1, SML-5442TWfnnas
s905xHG680P, B860H, TBee-Box, T95, TX9, XiaoMI-3S, X96, Nexbox-a95x, BTV9fnnas
s905mbS65fnnas
s905lUNT402A, M201-S, MiBox-4, MiBox-4C, MG101, E900V21C, IP108H-53u1m, Tencent-Aurora-1s, B860AV2.1, B860AV2.1U, HM201, XiaoMI-4Cfnnas
s905l2MGV2000, MGV2000-K, MGV3000, Wojia-TV-IPBS9505, M301A, E900v21E, e900v21d, CM201-1, IP108H, MGV2000-CWfnnas
s905lbQ96-mini, BesTV-R3300L, SumaVision-Q7, MG101, s65, IPBS9505fnnas
s905wX96-Mini, TX3-Mini, W95, X96W/FunTV, MXQ-Pro-4K, MeCool-m8s-pro-Wfnnas
s905Beelink-Mini-MX-2G, Sunvell-T95M, MXQ-Pro+4K, SumaVision-Q5fnnas
rk3588(s)Radxa-Rock5B, Radxa-Rock5C, Orange-Pi-5-Plus, Orange-Pi-5-Pro, Orange-Pi-5-Ultra, Beelink-IPC-R, HLink-H88K, HLink-H88K-V3, NanoPC-T6, Smart-Am60, DC-A588, Orangepi-5B, CM3588-NAS, Rock-5-ITX, LZ-D3588, Boca-tcn100, Boca-tcn200, Firefly-ITX-3588J, Indiedroid-Nova, LubanCat-4, Seewo-SV50, EasePi-R2fnnas
rk3576NanoPi-m5, LCKFB-Taishan-Pi-3Mfnnas
rk3399EAIDK-610, King3399, TN3399, Kylin3399, ZCube1-Max, CRRC, SMART-AM40, SW799, ZYSJ, DG-3399, DLFR100, Emb3531, Leez-p710, tvi3315a, xiaobao, Fine3399, Firefly-RK3399, LX-R3S, Hugsun-x99, Tb-ls3399, Hisense-hs530r, Tpm312, ZK-rk39a, YSKJ, Fmx1-Pro, Fmx1-Pro-B, Sv-33a6x, Sv-33a6x(VPU), AIO-3399B, AIO-3399C, AIO-3399C(AI), TaraM, NanoPC-T4, Firefly-Core-3399-JD4, GEA-6319, NanoPi-SOM-RK3399fnnas
rk3568FastRhino-R66S, FastRhino-R68S, Radxa-E25, NanoPi-R5S, NanoPi-R5C, HLink-H66K, HLink-H68K, HLink-H69K, Seewo-sv21, Mrkaio-m68s, Swan1-w28, Ruisen-box, DG-TN3568, Alark35-3500, MMBox-Anas3035, Wocyber-A3, Photonicat, NSY-G16-Plus, NSY-G68-Plus, BDY-G18-Pro, Gzpeite-P01, LZ-K3568, BDKJ-One, Station-P2, Lyt-t68m, LubanCat-2, Rock-3B, EasePi-A2, Roceos-K40Pro, DG-Nas-Litefnnas
rk3566Panther-X2, JP-TvBox, LCKFB-Taishan-Pi, WXY-OEC-turbo-4g, Station-M2, Orange-Pi-3B, X88Pro20, LubanCat-1, Rock-3C, Inspur-MD1000fnnas
rk3528HLink-H28K, Radxa-E20C, H96-Max-M2, HK1-Rbox-K8S, HT2, CD1000fnnas
rk3328BeikeYun, Chainedbox-L1-Pro, Station-M1, Bqeel-MVR9, Renegade/Fireflyfnnas
rk3318RX3318-Boxfnnas
h6Vplus, Tanix-TX6, TX6-H, T95-max, TQC-A01fnnas
h618OrangePi-Zero3, H618-DevBoard(PCDN), Vontar-h618, BT-100M, BT-1000M, PaiNet-P3, X98Hfnnas

[!TIP] Currently, s905 series boxes can only boot from TF/SD/USB, while other box models support writing to eMMC. For more information, please refer to the ✅Supported Device List Instructions. To add new supported devices, refer to section 12.15 in the documentation: Adding New Supported Devices.

Instructions for Installing and Upgrading FnNAS

Select the FnNAS system corresponding to your device model. Refer to the respective instructions for usage on different devices.

  • Install FnNAS to eMMC

  1. For Rockchip platforms, please refer to Chapter 8 of the documentation. The installation procedure is the same as Armbian.

  2. For Amlogic and Allwinner platforms, use tools like Rufus or balenaEtcher to write the system image to a USB drive, then insert the prepared USB drive into the box. Check your router's management interface for a newly connected device named 'debian' and obtain its IP address (e.g., 192.168.1.15). Access http://192.168.1.15:5666 via a browser to enter the FnNAS account creation interface. After creating a custom account and logging into the FnNAS system, enable SSH in System SettingsSSH. Then use an SSH client to connect to the system terminal and execute the following commands:

sudo -i
fnnas-install
OptionalDefaultOptionsDescription
-mnoyes/noUse mainline u-boot
-ayesyes/noUse the ampart partition adjustment tool
-lnoyes/noDisplay full device list

Example: fnnas-install -m yes

[!TIP] Partition option description: Custom system rootfs size is supported when available disk space exceeds 16GiB (default: 16GiB).

During system reinstallation, the script automatically detects the partition structure on the eMMC. If a personal data partition (P3) is detected, Option 3 will be activated in the partition menu. Selecting this option strictly preserves the current partition table layout, ensuring that data within the P3 partition is not overwritten. After installation, you can directly mount and access this partition via the 'Storage Manager' interface in FnNAS.

OptionalDescription
1Rootfs partition limit to 16GiB.
2[default] Rootfs partition expand to full disk (100%).
3Retain current Rootfs size (Preserve P3 Data).
≥16Enter a number (GiB) to specify Rootfs partition size.
  • Update FnNAS Kernel

Login to FnNAS system SSH terminal → Execute the following commands:

sudo -i
fnnas-update
OptionalDefaultOptionsDescription
-rophub/fnnas<owner>/<repo>Set the repository for downloading kernels from github.com
-kLatest versionKernel versionSet the kernel version
-byesyes/noAutomatically back up the current kernel when updating
-mnoyes/noUse mainline u-boot
-sNoneNone/DiskName[SOS] Restore the system kernel on eMMC/NVMe/sdX or other disks
-hNoneNoneView help

Example: fnnas-update -k 6.18.18

When specifying the kernel version via the -k parameter, you can specify an exact version number, e.g., fnnas-update -k 6.18.18, or specify a kernel series prefix, e.g., fnnas-update -k 6.18. When a series prefix is specified, the latest version within that series will be used automatically.

When updating the kernel, the current kernel is automatically backed up in the /ddbr/backup directory. The last 3 kernel versions are retained. If the newly installed kernel is unstable, you can roll back to a backed-up kernel at any time. If a kernel update causes the system to fail to boot, you can restore the system kernel via fnnas-update -s.

  • Create Swap for FnNAS

When running memory-intensive applications such as docker, if the device's memory is insufficient, you can create a swap partition to use a portion of disk space as virtual memory. The parameter unit for the command below is GB, with a default value of 1.

Login to FnNAS system SSH terminal → Execute the following command:

fnnas-swap 1
  • Control LED Display

Login to FnNAS system SSH terminal → Execute the following command:

fnnas-openvfd

Refer to the LED Screen Display Control Instructions for configuration.

  • Backup/Restore eMMC Original System

Supports backing up and restoring the box's eMMC via TF/SD/USB boot. It is recommended to back up the original Android TV system before installing FnNAS on a new device, so the original system can be restored if needed.

Please boot the FnNAS system from TF/SD/USB → Execute the following command:

fnnas-ddbr

Enter b when prompted to back up the system, or r to restore.

[!IMPORTANT] Alternatively, you can flash the Android system into eMMC via USB flashing. Android system images can be obtained from Tools.

  • Sync Latest Service Scripts

To update all service scripts in the system to the latest version, login to FnNAS system SSH terminal → Execute the following command:

fnnas-sync

Local Packaging

  1. Clone the repository locally: git clone --depth 1 https://github.com/ophub/fnnas.git

  2. Install necessary dependencies (e.g., 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)
  1. Enter the ~/fnnas root directory, create a fnnas-arm64 folder, and place the FnNAS image file (e.g., fnos_arm_1.0.0_258.img) into the ~/fnnas/fnnas-arm64 directory.

  2. In the ~/fnnas root directory, run sudo ./renas -b s905x3 -k 6.18.18 to generate the FnNAS image file for the specified board. The generated files are saved in the ~/fnnas/out directory.

  • Local Packaging Parameter Description

ParameterMeaningDescription
-bBoardSpecifies the target device codename (default is all). You can specify a single device (e.g., -b s905x3) or connect multiple codenames with underscores to compile them together (e.g., -b s905x3_s905d). The parameter also supports special keywords for batch compilation: all compiles every device in the database, first50 compiles the first 50 devices, range50_100 compiles devices from the 51st to the 100th (similarly for range100_150), and last20 compiles the last 20 devices. Additionally, you can compile by hardware platform (amlogic, rockchip, allwinner) to build all images for that specific platform, for example, -b amlogic. Appending numeric values to the platform name allows you to compile a specific range within that platform's support list; for example, -b amlogic50 builds the first 50 devices under the Amlogic platform, and -b amlogic50_100 builds the 51st to the 100th devices. For a complete list of supported device codenames, please refer to the BOARD configuration items in model_database.conf. Default: all
-rKernelRepoSpecifies the <owner>/<repo> of the github.com kernel repository. Default: ophub/fnnas
-kKernelSpecifies the kernel version, e.g., -k 6.18.18. Multiple kernels are joined with _, e.g., -k 6.18.6_6.18.18.
-aAutoKernelSets whether to automatically adopt the latest kernel version within the same series. When set to true, the kernel library is checked for a newer version in the same series as the kernel specified in -k (e.g., 6.18.18), and automatically switches to the latest version if available. When set to false, the specified kernel version is compiled. Default: true
-sSizeSets the system image partition size (Unit: MiB). When setting only the ROOTFS partition size, specify a single value, e.g., -s 6144. When setting both BOOTFS and ROOTFS partition sizes, join the two values with /, e.g., -s 512/6144. Default: 512/6144
-eRootfsExpandSets the automatic expansion size (Unit: GiB) of the system root partition. Default: 16
-nBuilderNameSets the FnNAS system builder signature. Do not include spaces in the signature. Default: None
  • sudo ./renas : Use default configuration to package for all TV box models.
  • sudo ./renas -b s905x3 -k 6.18.18 : Recommended. Package with the specified kernel using default configuration.
  • sudo ./renas -b s905x3 -k 6.18.y : Use default configuration, automatically using the latest version of the 6.18.y series kernel.
  • sudo ./renas -b s905x3 -k 6.18.18 -s 6144 : Use default configuration, specify one kernel and one model for packaging, with the system partition size set to 6144 MiB.
  • sudo ./renas -b s905x3_s905d : Use default configuration to package all kernels for multiple TV box models. Use _ to join multiple models.
  • sudo ./renas -b s905x3 -e 32 : Use default configuration to package for the s905x3 model, with the rootfs automatic expansion size set to 32 GiB.

Building Images via GitHub Actions

  1. Workflow configuration files are located in .github/workflows.

  2. On the Actions page, select Build FnNAS Image to compile using build-fnnas-image.yml. Click the Run workflow button to start the build. In the options panel, you can set the FnNAS image download URL in Custom fnnas image download url, e.g., https://fnnas.com/.../fnos_arm_1.0.0_258.img.xz. If not specified, the official image stored in fnnas_base_image will be used by default.

- 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.18.y
    rootfs_expand: 16
  • GitHub Actions Image Build Parameter Description

The parameters correspond to the local packaging commands described above.

ParameterDefaultDescription
fnnas_pathNoneSets the path to the official Arm64 original FnNAS image file. Supports workflow file paths (e.g., fnnas/*.img.xz) and network download URLs (e.g., https://fnnas.com/.../fnos_arm_1.0.0_258.img.xz)
fnnas_boardallSets the target board for packaging. Refer to -b for details
kernel_repoophub/fnnasSpecifies the <owner>/<repo> of the github.com kernel repository. Refer to -r for details
fnnas_kernel6.18.ySets the kernel version. Refer to -k for details
auto_kerneltrueSets whether to automatically adopt the latest kernel within the same series. Refer to -a for details
fnnas_size512/6144Sets the BOOTFS and ROOTFS partition sizes. Refer to -s for details
rootfs_expand16Sets the automatic expansion size (Unit: GiB) of the system root partition. Refer to -e for details
builder_nameNoneSets the FnNAS system builder signature. Refer to -n for details
  • Local FnNAS Kernel Build Parameter Description

ParameterMeaningDescription
-rdebs_repoSpecifies the <owner>/<repo> of the debs kernel repository on github.com. Default: ophub/fnnas
-edebs_installSets whether to install official .deb kernel packages for different platforms. Options: amlogic / rockchip / allwinner / none. Default: none
-tdtbs_installSets whether to install additional dtbs files missing from the official release. Options: true / false. Default: true
-kdtbs_versionSpecifies the kernel version, e.g., -k 6.18.18. Default: 6.18.y
  • sudo ./rekernel : Uses default configuration. Does not install debs kernel packages or supplement dtbs files; packages the kernel from the current FnNAS image directly.
  • sudo ./rekernel -e amlogic : Installs the amlogic debs kernel packages into the current system, then proceeds with kernel packaging.
  • sudo ./rekernel -t true : Installs additional dtbs files (missing from official sources) into the current system, then proceeds with kernel packaging.
  • sudo ./rekernel -e allwinner -t false : Installs the allwinner debs kernel packages into the current system without installing additional dtbs files, then proceeds with kernel packaging.

Building FnNAS Kernel via GitHub Actions

For details on compiling the FnNAS-specific kernel, please refer to build-fnnas-kernel.yml.

- name: Build FnNAS Kernel
  uses: ophub/fnnas@main
  with:
    build_target: kernel
    fnnas_path: fnnas/*.img
    dtbs_install: true
    dtbs_version: 6.18.y

The parameters correspond to the local packaging commands described above.

ParameterDefaultDescription
fnnas_pathNoneSets the path to the official Arm64 original FnNAS image file.
debs_repoophub/fnnasSpecifies the <owner>/<repo> of the debs kernel repository on github.com. Refer to -r for details
debs_installnoneSets whether to install official .deb kernel packages. Refer to -e for details
dtbs_installtrueSets whether to install additional dtbs files missing from the official release. Refer to -t for details
dtbs_version6.18.ySets the kernel version. Refer to -k for details
  • GitHub Actions Output Variable Description

FnNAS image and kernel builds use the same output parameters.

Uploading to Releases requires setting Workflow Read and Write Permissions for the repository. See Usage Instructions for details.

ParameterDefaultDescription
${{ env.PACKAGED_OUTPUTPATH }}outFnNAS system and kernel files output path
${{ env.PACKAGED_OUTPUTDATE }}04.13.1058Packaging date (month.day.hourminute)
${{ env.PACKAGED_STATUS }}successPackaging status: success / failure

FnNAS Contributors

First of all, thanks to experts like coolsnowwolf and unifreq for providing technical guidance on adapting this project for FnNAS. Also, thanks to the numerous contributors for their support of the Armbian/OpenWrt systems. This project directly inherited and utilized the resources and technical solutions from these projects during the FnNAS adaptation process. Thank you all for your contributions and sharing, enabling FnNAS to run on more devices.

The u-boot, kernel, and firmware resources used in this system are primarily sourced from the unifreq/openwrt_packit project. Some files were contributed and shared by users through Pull and Issues in projects such as amlogic-s9xxx-armbian / amlogic-s9xxx-openwrt / fnnas / luci-app-amlogic / kernel / u-boot. To acknowledge these pioneers and contributors, they have been recorded in CONTRIBUTORS.md. Thank you again for giving new life and value to these devices.

Other Distributions

  • The amlogic-s9xxx-armbian project provides the Armbian system for TV boxes, which is also applicable to FnNAS-compatible devices.
  • The amlogic-s9xxx-openwrt project provides the OpenWrt system for TV boxes, which is also applicable to FnNAS-compatible devices.
  • unifreq has created OpenWrt systems for various boxes including Amlogic, Rockchip, and Allwinner. It is a benchmark project in the TV box community and is highly recommended.
  • cooip-jm shared extensive guides on Armbian, OpenWrt, LXC, Docker, AdGuard, and other applications in his wiki, which is recommended for reference.

Links

License

The fnnas © OPHUB is licensed under GPL-2.0

关于 About

Supports running FnNAS on Amlogic, Allwinner, and Rockchip devices. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588, rk3568, rk3399, rk3328, h6, etc.
a311dallwinneramlogicarm64debianfnnasfnosnasrk3399rk3528rk3566rk3568rk3588rockchips905ds905x3s912s922x

语言 Languages

Shell96.4%
Perl3.6%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
167
Total Commits
峰值: 29次/周
Less
More

核心贡献者 Contributors