友善电子(FriendlyELEC)于2020年12月初推出了基于瑞芯微RK3399处理器的NanoPi R4S路由器SBC,并给我们寄了一份测评样品。我原本打算像之前测试NanoPi R2S和NanoPi NEO3一样,测试热性能、以太网和USB。但是由于Armbian现在还不可用,我暂时还无法使用我常用的一些工具。
因此,我就改用了友善电子提供的镜像来测试该开发板/网关。最开始使用的是基于Ubuntu Core 20.04的FriendlyCore,但是测试中遇到了一些问题,这些问题我会在这次测评中详细给大家介绍。接着我切换到基于OpenWrt 19.07的FriendlyWrt上,它工作得更好,但是我还是遇到了一些细微的问题。也许等过段时间,Armbian镜像发布或者友善电子修复了缺陷之后,再测试可能会好些。
NanoPi R4S网关开箱
在测试软件之前,让我们先看看我收到了什么。

NanoPi R4S SBC在其金属外壳内,还有一张16GB的A1级microSD卡,后来我发现,它预装了FriendlyWrt。

后面板包括USB-C电源端口、WAN和LAN千兆以太网端口以及复位按钮。

前面板配有两个USB3.0端口、一个MicroSD卡插槽,还有一个看起来像标准安装摄像头的螺纹,用来做固定的。

经过验证,确实是固定用的。这样,我就可以把网关装在相机的三脚架上了。这里其实也可以考虑一些创新和性价比高的固定方案。

在我拆解这个设备之前,让我们从左到右来一个盘点:NanoPi NEO3、NanoPi R2S和NanoPi R4S。最后这个比前两个大得多了。
NanoPi R4S 拆解
让我们打开机箱。取出四个橡胶垫,松开机箱底部的四个螺丝,我们就可以接触到电路板了。

再卸下固定电路板的两颗螺丝后,我们可以完全取出电路板了。我们能看到处理器是通过一个导热垫与金属外壳接触的。


FriendlyCore 20.04 (Ubuntu Core)
我起初以为microSD卡是空白的,所以我就去NanoPi R4S的维基页面下载了最新版本的FriendlyCore镜像,也就是rk3399-sd-FriendlyCore-focal-4.19-arm64-20201027.img,并通过USBImager将其烧录到了SD卡里。然后我将卡插入NanoPi R4S,将以太网电缆连接到WAN和LAN端口,并使用 MINIX NEO P2 USB-C电源适配器供电 。

我看到电源指示灯(红色的)亮了,状态指示灯(绿色的)闪烁了,但LAN和WAN指示灯是熄灭的。接着,我去我的路由器网页查找新设备的IP,但是什么都没有看到。我猜测也许是因为第一次开机所以需要很长的时间,但五分钟后我还是没有看到IP。最后,我重启了一下设备,得到了一个IP地址,终于可以使用默认的pi/pi凭据通过SSH访问设备了。
让我们通过inxi命令来看看具体的细节:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
sudo inxi -Fc0 System: Host: NanoPi-R4S Kernel: 4.19.111 aarch64 bits: 64 Console: tty 0 Distro: Ubuntu 20.04.1 LTS (Focal Fossa) Machine: Type: ARM Device System: FriendlyElec NanoPi R4S details: N/A serial: f748058df14cbaed Battery: ID-1: test_battery charge: 100% condition: N/A CPU: Topology: 6-Core (2-Die) model: N/A variant-1: cortex-a53 variant-2: cortex-a72 bits: 64 type: MCP MCM Speed: 1200 MHz min/max: 408/1416:1800 MHz Core speeds (MHz): 1: 408 2: 408 3: 408 4: 408 5: 1608 6: 1608 Graphics: Device-1: display-subsystem driver: rockchip_drm v: N/A Device-2: rk3399-dw-hdmi driver: dwhdmi_rockchip v: N/A Device-3: malit860 driver: mali v: N/A Display: server: X.org 1.20.8 driver: mali tty: 79x23 Message: Advanced graphics data unavailable in console for root. Audio: Device-1: rk3399-dw-hdmi driver: dwhdmi_rockchip Device-2: simple-audio-card driver: asoc_simple_card Sound Server: ALSA v: k4.19.111 Network: Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet driver: r8169 IF: eth1 state: down mac: d2:ed:28:cf:85:22 Device-2: rk3399-gmac driver: rk_gmac_dwmac IF-ID-1: eth0 state: up speed: 1000 Mbps duplex: full mac: 80:1f:12:fc:2f:96 Drives: Local Storage: total: 14.84 GiB used: 100.4 MiB (0.7%) ID-1: /dev/mmcblk1 model: SC16G size: 14.84 GiB Partition: ID-1: / size: 11.11 GiB used: 100.4 MiB (0.9%) fs: overlay source: ERR-102 Sensors: System Temperatures: cpu: 26.0 C mobo: N/A Fan Speeds (RPM): N/A Info: Processes: 147 Uptime: 1h 01m Memory: 3.75 GiB used: 206.1 MiB (5.4%) Init: systemd runlevel: 5 Shell: bash inxi: 3.0.38 |
通过inxi命令,我检测到了两个以太网设备。但eth1是关闭的,即使我通过命令打开它,也没有检测到链接:
1 2 3 |
pi@NanoPi-R4S:~$ sudo ifconfig eth1 up pi@NanoPi-R4S:~$ sudo mii-tool eth1 eth1: no link |
我想也许可以通过npi-config命令配置试试。理论上来说,该命令应该预先已经安装在FriendlyCore中了,但是实际并没有:
1 2 |
pi@NanoPi-R4S:~$ sudo npi-config sudo: npi-config: command not found |
我也想到用sbc-bench.sh脚本测试了,温度值显示很不正常,仅仅只有26°C:
1 2 3 4 5 |
sudo ./sbc-bench.sh -m [sudo] password for pi: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 09:14:27: 1608/ 600MHz 1.86 1% 0% 0% 0% 0% 0% 26.0°C 09:14:32: 1800/1416MHz 1.79 18% 8% 2% 0% 5% 1% 26.0°C |
用红外线温度计测得的温度大约是39°C。

真奇怪!我查看sysfs,会看到三个温度区:
1 2 3 4 5 6 |
pi@NanoPi-R4S:~$ cat /sys/devices/virtual/thermal/thermal_zone0/temp 34444 pi@NanoPi-R4S:~$ cat /sys/devices/virtual/thermal/thermal_zone1/temp 34444 pi@NanoPi-R4S:~$ cat /sys/devices/virtual/thermal/thermal_zone2/temp 26000 |
zone2现在似乎是能使用的,但很显眼,它的硬编码值为26°C。另外,sbc bench脚本在进入/sys/devices/目录之前要先检查一下另一个文件:
1 2 |
cat /sys/class/hwmon/hwmon0/temp1_input 26000 |
硬编码值的结果也是26°C,因此我在脚本中注释与此文件相关的部分,使其改用了thermal_zone0。
1 2 3 |
sudo ./sbc-bench.sh -m Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 04:57:34: 1416/ 408MHz 0.00 0% 0% 0% 0% 0% 0% 35.6°C |
看起来好多了。接着,让我们运行benchmark脚本试试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
sudo ./sbc-bench.sh -c sbc-bench v0.7.5 Installing needed tools. This may take some time... Done. Checking cpufreq OPP... Done. Executing tinymembench. This will take a long time... Done. Executing OpenSSL benchmark. This will take 3 minutes... Done. Executing 7-zip benchmark. This will take a long time... Done. Executing cpuminer. This will take 5 minutes... Done. Checking cpufreq OPP... Done. Memory performance (big.LITTLE cores measured individually): memcpy: 1625.4 MB/s memset: 8431.7 MB/s (1.0%) memcpy: 3589.5 MB/s (1.2%) memset: 8545.4 MB/s (2.3%) Cpuminer total scores (5 minutes execution): 10.39,10.38,10.37,10.36,10.35,10.34,10.33 kH/s 7-zip total scores (3 consecutive runs): 5690,5844,5787 OpenSSL results (big.LITTLE cores measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 117574.08k 354357.06k 696504.83k 946934.10k 1056814.42k 1063796.74k aes-128-cbc 345815.47k 794550.68k 1154592.77k 1280458.07k 1344244.39k 1352466.43k aes-192-cbc 112159.06k 315819.05k 570631.51k 730835.63k 796188.67k 799899.65k aes-192-cbc 330109.00k 726448.43k 982510.25k 1135289.00k 1181499.39k 1186491.05k aes-256-cbc 109038.23k 291820.14k 495495.59k 611941.38k 657126.74k 657926.83k aes-256-cbc 319159.24k 663780.86k 902803.03k 978935.81k 1016075.61k 1018975.57k Full results uploaded to http://ix.io/2HEU. Please check the log for anomalies (e.g. swapping or throttling happenend) and otherwise share this URL. |
未检测到节流。例如,7-zip的分数(~5800)与RockPi 4C的分数大致相同,Rockchip RK3399的时钟为1.8/1.4GHz,两个SBC都是如此。
由于我们无法安装armbianmonitor工具,因此也没有美观的图表。但我们仍然可以通过上面的日志以及运行7-zip的多核测试命令和cpuminer 命令的日志里看到,CPU温度从未超过60°C:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
System health while running 7-zip multi core benchmark: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 05:47:07: 1800/1416MHz 5.16 0% 0% 0% 0% 0% 0% 45.6°C 05:47:28: 1800/1416MHz 5.41 88% 1% 87% 0% 0% 0% 50.6°C 05:47:48: 1800/1416MHz 5.70 83% 1% 82% 0% 0% 0% 50.6°C 05:48:11: 1800/1416MHz 5.54 81% 1% 79% 0% 0% 0% 50.6°C 05:48:31: 1800/1416MHz 5.45 76% 1% 74% 0% 0% 0% 48.1°C 05:48:55: 1800/1416MHz 5.47 90% 1% 88% 0% 0% 0% 51.1°C 05:49:16: 1800/1416MHz 5.71 85% 1% 84% 0% 0% 0% 52.2°C 05:49:38: 1800/1416MHz 5.60 83% 0% 82% 0% 0% 0% 51.7°C 05:50:01: 1800/1416MHz 5.86 82% 1% 80% 0% 0% 0% 52.2°C 05:50:22: 1800/1416MHz 5.85 74% 1% 72% 0% 0% 0% 50.0°C 05:50:42: 1800/1416MHz 5.82 96% 1% 94% 0% 0% 0% 52.2°C 05:51:04: 1800/1416MHz 5.69 85% 1% 84% 0% 0% 0% 52.2°C 05:51:25: 1800/1416MHz 5.58 84% 1% 83% 0% 0% 0% 53.3°C 05:51:47: 1800/1416MHz 5.43 81% 1% 79% 0% 0% 0% 53.3°C 05:52:08: 1800/1416MHz 5.35 76% 1% 74% 0% 0% 0% 50.6°C 05:52:31: 1800/1416MHz 5.68 91% 2% 88% 0% 0% 0% 52.8°C System health while running cpuminer: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 05:52:37: 1800/1416MHz 5.48 0% 0% 0% 0% 0% 0% 50.0°C 05:52:59: 1800/1416MHz 5.63 99% 0% 99% 0% 0% 0% 56.1°C 05:53:22: 1800/1416MHz 5.73 100% 0% 99% 0% 0% 0% 56.1°C 05:53:44: 1800/1416MHz 5.88 100% 0% 99% 0% 0% 0% 56.1°C 05:54:07: 1800/1416MHz 5.92 100% 0% 99% 0% 0% 0% 56.7°C 05:54:30: 1800/1416MHz 6.16 100% 0% 99% 0% 0% 0% 57.2°C 05:54:53: 1800/1416MHz 6.12 100% 0% 99% 0% 0% 0% 57.2°C 05:55:16: 1800/1416MHz 6.13 100% 0% 99% 0% 0% 0% 57.2°C 05:55:39: 1800/1416MHz 6.14 100% 0% 99% 0% 0% 0% 58.3°C 05:56:02: 1800/1416MHz 6.10 100% 0% 99% 0% 0% 0% 58.3°C 05:56:25: 1800/1416MHz 6.12 100% 0% 99% 0% 0% 0% 58.3°C 05:56:47: 1800/1416MHz 6.09 100% 0% 99% 0% 0% 0% 58.3°C 05:57:10: 1800/1416MHz 6.11 100% 0% 99% 0% 0% 0% 58.3°C 05:57:33: 1800/1416MHz 6.08 100% 0% 99% 0% 0% 0% 59.4°C |
这意味着CPU冷却工作做得很好,我相信即便在2.0GHz的情况下CPU应该也运行作良好。在同样测试中对比来看,NanoPi R2S温度达到85°C,性能确实略有些低了。要知道R2S测试时是冬天,所以虽然环境温度是30°C,但实际应该对应的应该再24°C左右。
我们用iperf工具全双工传输来检查千兆以太网端口(eth0):
1 2 3 4 5 6 7 |
Client connecting to 192.168.1.2, TCP port 5001 TCP window size: 298 KByte (default) ------------------------------------------------------------ [ 6] local 192.168.1.4 port 51780 connected with 192.168.1.2 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-60.0 sec 3.07 GBytes 439 Mbits/sec [ 6] 0.0-60.0 sec 6.14 GBytes 878 Mbits/sec |
仅上传:
1 2 3 4 5 6 |
Client connecting to 192.168.1.4, TCP port 5001 TCP window size: 391 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.2 port 38860 connected with 192.168.1.4 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-60.0 sec 6.44 GBytes 921 Mbits/sec |
仅下载:
1 2 3 4 5 6 |
Client connecting to 192.168.1.2, TCP port 5001 TCP window size: 340 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.4 port 51820 connected with 192.168.1.2 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-60.0 sec 6.57 GBytes 941 Mbits/sec |
FriendlyWrt (OpenWrt)
FriendlyCore实际也存在一些问题,而且NanoPi R2S Wiki中的信息也有限,所以我打算尝试一下FriendlyWrt,我将rk3399-sd-friendlywrt-5.4-20201111.img.zip烧录到MicroSD卡中。 这次在获取IP地址时没有任何问题,并且板上的WAN和LED也都是按照预期方式工作的(绿灯亮)。我可以使用SSH以root用户身份登录而无需输入任何密码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
ssh root@192.168.1.2 The authenticity of host '192.168.1.2 (192.168.1.2)' can't be established. RSA key fingerprint is SHA256:BPBd3bkZXAHzM6S7s8oE883esQlNccHuuOuJzlqVADM. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.1.2' (RSA) to the list of known hosts. BusyBox v1.30.1 () built-in shell (ash) ___ _ _ _ __ _____ _____ | __| _(_)___ _ _ __| | |_ \ \ / / _ \_ _| | _| '_| / -_) ' \/ _` | | || \ \/\/ /| / | | |_||_| |_\___|_||_\__,_|_|\_, |\_/\_/ |_|_\ |_| |__/ ----------------------------------------------------- FriendlyWRT 19.07.4, r11208-ce6496d796 ----------------------------------------------------- === WARNING! ===================================== There is no root password defined on this device! Use the "passwd" command to set up a new password in order to prevent unauthorized SSH logins. -------------------------------------------------- |
但是,我没有继续执行该命令,而是使用笔记本电脑的网络浏览器访问了LuCi Web界面。

通过下图,我们可以看到LAN和WAN端口是如何配置的。WAN端口是DHCP和DHCPv6客户端。

(接上)而且LAN端口配置为网桥集来管理了192.168.2.0子网。 这样的话,设备就被配置成为路由器了。
但是出于测试目的,我删除了网桥,并将eth1 LAN端口设置为DHCP客户端,以便可以在同一网络上获得IP:

然后,我使用全双工传输对WAN端口进行了测试:
1 2 3 4 5 6 7 |
Client connecting to 192.168.1.2, TCP port 5001 TCP window size: 484 KByte (default) ------------------------------------------------------------ [ 6] local 192.168.1.4 port 54200 connected with 192.168.1.2 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-60.0 sec 5.56 GBytes 796 Mbits/sec [ 6] 0.0-60.0 sec 5.90 GBytes 845 Mbits/sec |
接着又对LAN口也进行了全双工传输测试:
1 2 3 4 5 6 7 |
Client connecting to 192.168.1.10, TCP port 5001 TCP window size: 246 KByte (default) ------------------------------------------------------------ [ 6] local 192.168.1.4 port 42058 connected with 192.168.1.10 port 5001 [ ID] Interval Transfer Bandwidth [ 4] 0.0-60.0 sec 6.01 GBytes 860 Mbits/sec [ 6] 0.0-60.0 sec 5.83 GBytes 835 Mbits/sec |
这些测试结果都很好。 我还在MicroSD卡旁边的USB端口上连接了USB 3.0硬盘,从而来测试USB 3.0端口。这个过程出现了一些错误:
1 2 3 4 5 6 7 8 9 |
[ 4016.615349] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4017.582838] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4018.534752] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4019.486422] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4020.438725] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4021.390783] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4022.342405] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4023.294942] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? [ 4024.247236] usb usb8-port1: Cannot enable. Maybe the USB cable is bad? |
当我切换到另一个USB 3.0端口时,工作都正常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[ 4501.341310] usb 6-1: new SuperSpeed Gen 1 USB device number 2 using xhci-hcd [ 4501.367210] usb 6-1: New USB device found, idVendor=0bc2, idProduct=2312, bcdDevice= 6.36 [ 4501.368004] usb 6-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 4501.368674] usb 6-1: Product: Expansion [ 4501.369152] usb 6-1: Manufacturer: Seagate [ 4501.369561] usb 6-1: SerialNumber: NA495NNC [ 4501.390736] scsi host0: uas [ 4501.394727] scsi 0:0:0:0: Direct-Access Seagate Expansion 0636 PQ: 0 ANSI: 6 [ 4501.401310] sd 0:0:0:0: [sda] Spinning up disk... [ 4504.889125] .ready [ 4504.891192] sd 0:0:0:0: [sda] 1953525167 512-byte logical blocks: (1.00 TB/932 GiB) [ 4504.892476] sd 0:0:0:0: [sda] Write Protect is off [ 4504.893052] sd 0:0:0:0: [sda] Mode Sense: 2b 00 10 08 [ 4504.894397] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, supports DPO and FUA [ 4504.948967] sda: sda1 sda2 sda3 sda4 [ 4504.957469] sd 0:0:0:0: [sda] Attached SCSI disk |
然后,我在LuCi和命令行中配置了SAMBA共享,从而将文件从笔记本电脑传输到NanoPi R4S连接的USB 3.0硬盘上。

传输是可以正常运营的,速度大约为16MB / s,对于USB 3.0驱动器来说确实有点慢了。 而其他基于arm的平台,一般都通过千兆以太网和USB 3.0来运行OpenWrt的。在相同的测试环境(以及相同的USB硬盘)中可以达到接近50MB/s的速度。另外,软件优化问题可能也会有所影响。
结论
与以前的NanoPi R2S相比,NanoPi R4S的设计更好了。尤其是在散热设计方面,因为该板安装在金属外壳中,而且在负载情况下也从未超过60°C。 网络性能方面,似乎也很不错。 不过,目前友善电子主要还是专注于OpenWrt映像(FriendlyWrt),而不是Ubuntu Core,所以现在Ubuntu Core还存在一些问题。 此外,其中一个USB 3.0端口也有问题,不过我觉得这应该只是暂时的。 如果你打算在路由器/网关上使用将OpenWrt,那应该没问题。但是如果你想使用基于Debian的Linux发行版,建议你先等兼顾稳定性和更好的性能的Armbian镜像出来。
最后,我要感谢友善电子将NanoPi R4S寄给我测评。如果你们有兴趣的话,你们可以在友善电子的商店或全球速卖通上购买到和本次测评一样的产品。4GB RAM、带有金属外壳的NanoPi R4S,价格是69美元(包邮)。

文章翻译者:Taylor Lee,瑞科慧联(RAK)高级嵌入式开发工程师,有丰富的物联网和开源软硬件经验,熟悉行业主流软硬件框架,对行业发展动向有着敏锐的感知力和捕捉能力。
想买一个来试试