NanoPi NEO3进阶日记第一天——从零编译专属OpenWrt固件
2026/7/16 2:25:49 网站建设 项目流程

1. 准备工作:认识你的NanoPi NEO3

NanoPi NEO3是一款只有信用卡大小的开源硬件开发板,搭载了Rockchip RK3328四核处理器,支持1GB/2GB DDR4内存。它最大的特点是只有一个千兆以太网口,但通过USB 3.0接口可以扩展更多网络功能。我最初拿到这块板子时,就被它小巧的体积和强大的性能吸引了——毕竟能用这么小的设备跑OpenWrt还能当轻量级NAS用,确实很酷。

在开始编译之前,你需要准备以下硬件:

  • NanoPi NEO3开发板
  • 至少8GB的TF卡(建议用三星Pro或闪迪High Endurance系列)
  • 5V/2A的Type-C电源适配器
  • 有线网络连接环境

软件方面则需要:

  • 一台运行Ubuntu 20.04/22.04的电脑(物理机或虚拟机均可)
  • 基本的Linux命令行操作经验

2. 搭建编译环境

2.1 安装基础依赖包

首先更新你的Ubuntu系统,然后安装编译OpenWrt所需的工具链。打开终端执行以下命令:

sudo apt update sudo apt upgrade -y sudo apt install -y build-essential clang flex bison g++ gawk gcc-multilib \ g++-multilib gettext git libncurses5-dev libssl-dev python3-distutils \ rsync unzip zlib1g-dev file wget

这里有个小技巧:如果你用的是虚拟机,建议分配至少4个CPU核心和8GB内存,否则编译过程会非常缓慢。我曾经试过在2核4G的虚拟机上编译,整整花了6个小时...

2.2 获取FriendlyWrt源码

FriendlyELEC官方维护的FriendlyWrt是基于OpenWrt的定制版本,对NanoPi系列有更好的硬件支持。我们使用git克隆源代码:

git clone https://github.com/friendlyarm/friendlywrt --depth 1 -b master-v21.02 cd friendlywrt

注意这里的--depth 1参数可以只下载最新代码而不包含历史记录,节省下载时间。如果网络不好导致克隆失败,可以尝试用国内镜像源:

git clone https://gitee.com/friendlyarm/friendlywrt --depth 1 -b master-v21.02

3. 配置编译选项

3.1 初始化配置

进入源码目录后,先运行配置菜单:

make menuconfig

这时会出现一个蓝色界面的配置菜单。我们需要重点关注以下几个部分的设置:

  1. Target System:选择Rockchip RK3328
  2. Subtarget:选择Default
  3. Target Profile:选择NanoPi NEO3

3.2 自定义软件包

在配置菜单中,你可以通过方向键导航到各个选项,按空格键选择/取消选择。以下是我推荐的基础软件包组合:

  • LuCI(Web管理界面):在LuCI -> Collections中选择luci
  • USB支持:Kernel modules -> USB Support中全选
  • 文件系统支持:Kernel modules -> Filesystems中添加ext4、ntfs、vfat
  • 网络工具:Network -> File Transfer中添加curl、wget
  • 存储工具:Utilities -> Disc中添加fdisk、e2fsprogs

有个实用技巧:按/键可以搜索特定包。比如想找"docker"相关包,直接输入/docker就能快速定位。

4. 开始编译

4.1 启动编译进程

配置完成后,保存退出,然后执行:

make -j$(nproc)

这里的-j$(nproc)表示使用所有CPU核心并行编译。如果你遇到编译错误,可以先尝试单线程编译定位问题:

make -j1 V=s

编译过程中可能会遇到各种依赖问题。我遇到最常见的问题是下载失败,这时可以手动下载对应的包放到dl/目录下。比如某个包下载超时,终端会显示类似这样的信息:

Downloading https://mirror.example.com/package.tar.gz

你可以用浏览器或其他下载工具先下载这个文件,然后放到dl/目录下,再重新执行make命令。

4.2 处理常见错误

这里分享几个我踩过的坑:

  1. golang编译错误:OpenWrt某些组件需要golang,如果版本不匹配会导致编译失败。解决方法是指定正确的golang版本:

    export GOROOT=/usr/lib/go-1.18 export PATH=$GOROOT/bin:$PATH
  2. 内存不足:编译时如果遇到"internal compiler error: Killed"通常是因为内存不足。可以创建swap空间临时解决:

    sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
  3. 内核配置冲突:如果修改过内核配置导致无法启动,可以尝试恢复默认配置:

    make target/linux/clean make target/linux/prepare

5. 刷写固件

5.1 获取编译成果

编译完成后(顺利的话大约2-4小时),生成的固件位于:

bin/targets/rockchip/armv8/

你会看到多个文件,其中最重要的是:

  • openwrt-rockchip-armv8-friendlyarm_nanopi-neo3-squashfs-sysupgrade.img(升级用)
  • openwrt-rockchip-armv8-friendlyarm_nanopi-neo3-ext4-sysupgrade.img.gz(完整镜像)

5.2 刷写到TF卡

将TF卡插入电脑,使用dd命令或图形化工具如BalenaEtcher写入镜像。以dd命令为例:

sudo dd if=openwrt-rockchip-armv8-friendlyarm_nanopi-neo3-ext4-sysupgrade.img.gz of=/dev/sdX bs=4M status=progress

重要提醒:这里的/dev/sdX要替换为你实际的TF卡设备名,可以用lsblk命令查看。写错设备名可能导致数据丢失!

6. 首次启动与配置

6.1 网络连接

将刷好固件的TF卡插入NanoPi NEO3,连接网线和电源启动。默认情况下:

  • 以太网口作为WAN口,通过DHCP获取IP
  • 你需要通过USB WiFi模块或二级路由才能访问管理界面

一个小技巧:如果你没有USB WiFi模块,可以临时修改网络配置。在启动前将TF卡挂载到电脑,编辑/etc/config/network文件,将WAN口改为LAN口:

config device option name 'eth0' option macaddr 'xx:xx:xx:xx:xx:xx' config interface 'lan' option device 'eth0' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0'

6.2 登录管理界面

默认情况下,OpenWrt的Web管理地址是http://192.168.1.1,用户名root,密码为空。首次登录后建议:

  1. 立即设置密码
  2. 更新软件包列表:opkg update
  3. 安装中文语言包:opkg install luci-i18n-base-zh-cn

7. 进阶优化技巧

7.1 超频设置(谨慎操作)

RK3328默认运行在1.3GHz,可以通过修改设备树实现超频。编辑target/linux/rockchip/armv8/base-files/etc/board.d/02_network文件,在适当位置添加:

echo "performance" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor echo 1392000 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq

注意:超频可能导致系统不稳定或硬件损坏,建议配合散热片使用,并逐步测试稳定性。

7.2 启用Docker支持

如果你想在NanoPi NEO3上运行Docker容器,需要先安装相关组件:

opkg install dockerd docker-compose luci-app-dockerman /etc/init.d/dockerd start /etc/init.d/dockerd enable

由于NEO3性能有限,建议只运行轻量级容器。我测试过运行Alpine Linux容器占用约30MB内存,还算可以接受。

7.3 搭建简易NAS

通过USB 3.0接口连接硬盘,安装以下软件包即可实现基础NAS功能:

opkg install block-mount kmod-fs-ext4 kmod-usb-storage kmod-usb3 samba36-server

然后编辑/etc/samba/smb.conf配置文件,添加共享目录。例如:

[storage] path = /mnt/sda1 valid users = root read only = no create mask = 0755

最后设置Samba用户密码并启动服务:

smbpasswd -a root /etc/init.d/samba start /etc/init.d/samba enable

8. 常见问题排错

8.1 网络不稳定

如果遇到网络时断时续的情况,可能是电源供电不足。NanoPi NEO3的USB 3.0和以太网共用供电线路,当连接外置硬盘时可能导致电压下降。解决方法:

  1. 使用质量好的5V/2A电源
  2. 避免使用耗电大的USB设备
  3. /etc/config/network中降低网口速率:
config device option name 'eth0' option speed '100' option duplex 'full'

8.2 固件升级

当有新版本发布时,可以通过sysupgrade命令升级:

sysupgrade -v /tmp/openwrt-rockchip-armv8-friendlyarm_nanopi-neo3-squashfs-sysupgrade.img

升级前建议备份配置:

sysupgrade -b /tmp/backup.tar.gz

8.3 恢复出厂设置

如果配置出错导致无法启动,可以按住板载的复位按钮(如果有)或通过TF卡启动恢复模式。更彻底的方法是重新刷写固件。

经过一周的实际使用,我发现编译的固件在NanoPi NEO3上运行相当稳定。作为家庭网关,它能轻松应对200M宽带,同时作为轻量级NAS也能满足基本文件共享需求。最让我惊喜的是它的功耗——实测待机仅2W左右,24小时运行电费几乎可以忽略不计。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询