ODROID-N2+是韩国开发板厂商Hardkernel在2020年7月推出的,但直到最近我才拿到了 Amlogic S922X Rev C SBC。Hardkernel方面是希望我使用 Panfrost 开源 GPU 驱动程序测试他们最新的Ubuntu 21.10 镜像。本篇文章我们就一起来看看。
ODROID-N2+套件拆箱
我们先来看看我从韩国 SBC 制造商那里收到的套件。




ODROID-N2+ 现在仅提供 4GB RAM,因为旧的 2GB ODROID-N2 现在已经不再提供了。所以我们的ODROID-N2+有四个 USB 3.0 端口、HDMI 2.0 视频输出、千兆以太网网络和一个 40 针 GPIO 接头,而且是通过一个在开发板底部的更大散热器来散热。

风扇安装、首次启动和系统信息
正如我们要在下面看到的那样,风扇并不是必需的。但既然这个套件里有,我们就用一用。我使用了4 个垫片(共提供5个)将其安装在了散热器顶部。

所以现在我们可以将开发板稍微升高,以便为开发板的超静音散热器提供更好的气流。由于开发板自带的eMMC flash上预装了Ubuntu 21.10,所以我只需要连接以太网、HDMI、USB键盘和鼠标、USB 3.0硬盘和12V/2A电源就可以开始使用了。

大多数时候开发板都是完全静音的,因为散热器只有在温度超过 65°C 时才会启动,只要不超过它的负载,启动时就听不到它的声音,所以我还抬起开发板检查了一下风扇是否正常旋转。接着,回到我们的第一次开机。
就像你们所看到的,我还是没有更换我已经坏掉的测试用电视。
开发板工作正常,屏幕上的垂直线只是因为我的 LG 电视坏了。日志显示 Hardkernel 用户,我们可以使用 odroid 密码登录了。但是当我稍后使用 SSH 时,我发现我需要使用 odroid/odroid,因为 Hardkernel 只是odroid 的一个用户名。
我们来查看一下系统信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
odroid@ubuntu:~$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=21.10 DISTRIB_CODENAME=impish DISTRIB_DESCRIPTION="Ubuntu 21.10" odroid@ubuntu:~$ uname -a Linux ubuntu 5.14.0-odroid-arm64 #1 SMP PREEMPT Ubuntu 5.14.13-202110221853~impish (2021-10-22) aarch64 aarch64 aarch64 GNU/Linux odroid@ubuntu:~$ free -mh total used free shared buff/cache available Mem: 3.6Gi 628Mi 2.3Gi 137Mi 668Mi 2.8Gi Swap: 1.3Gi 0B 1.3Gi odroid@ubuntu:~$ df -mh Filesystem Size Used Avail Use% Mounted on tmpfs 370M 1.7M 369M 1% /run /dev/mmcblk0p2 29G 5.6G 22G 21% / tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock /dev/mmcblk0p1 220M 37M 166M 19% /boot tmpfs 370M 88K 370M 1% /run/user/1000 /dev/sda2 241G 85G 144G 38% /media/odroid/USB3_EXT4 /dev/sda1 245G 194G 51G 80% /media/odroid/USB3_NTFS /dev/sda4 200G 175G 24G 89% /media/odroid/USB3_BTRFS /dev/sda3 245G 163G 82G 67% /media/odroid/USB3_EXFAT odroid@ubuntu:~$ |
Ubuntu 21.10 按预期安装在了 32GB eMMC 闪存(29GB rootfs)上,其系统配备 4GB RAM,其中 3.6GB 可用于 Linux。
我们可以获得有关 inxi 的更多详细信息,包括确认其在 Ubuntu 21.10 镜像中使用的Panfrost开源 GPU 驱动程序。如下你们可以参考:
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 |
odroid@ubuntu:~$ inxi -Fc0 System: Host: ubuntu Kernel: 5.14.0-odroid-arm64 aarch64 bits: 64 Console: tty pts/1 Distro: Ubuntu 21.10 (Impish Indri) Machine: Type: ARM Device System: Hardkernel ODROID-N2Plus details: N/A CPU: Info: 6-Core (2-Die) model: N/A variant-1: cortex-a73 variant-2: cortex-a53 bits: 64 type: MCP MCM Speed: 2208 MHz min/max: 1000/2016:2400 MHz Core speeds (MHz): 1: 2016 2: 2016 3: 2208 4: 2208 5: 2208 6: 2208 Graphics: Device-1: meson-g12a-vpu driver: meson_drm v: kernel Device-2: meson-g12a-mali driver: panfrost v: kernel Device-3: meson-g12a-dw-hdmi driver: meson_dw_hdmi v: kernel Display: server: X.org 1.20.13 driver: loaded: meson_dw_hdmi note: n/a (using device driver) tty: 203x55 Message: Advanced graphics data unavailable in console. Try -G --display Audio: Device-1: meson-g12a-dw-hdmi driver: meson_dw_hdmi Device-2: axg-sound-card driver: axg_sound_card Sound Server-1: ALSA v: k5.14.0-odroid-arm64 running: yes Sound Server-2: PulseAudio v: 15.0 running: yes Sound Server-3: PipeWire v: 0.3.32 running: yes Network: Device-1: meson-g12a-dwmac driver: meson8b_dwmac IF: eth0 state: up speed: 1000 Mbps duplex: full mac: 00:1e:06:42:cb:88 Drives: Local Storage: total: 960.63 GiB used: 620.82 GiB (64.6%) ID-1: /dev/mmcblk0 vendor: Samsung model: BJTD4R size: 29.12 GiB ID-2: /dev/sda type: USB vendor: Seagate model: 1 Expansion size: 931.51 GiB Partition: ID-1: / size: 28.3 GiB used: 5.57 GiB (19.7%) fs: ext4 dev: /dev/mmcblk0p2 ID-2: /boot size: 219.4 MiB used: 36.7 MiB (16.7%) fs: ext4 dev: /dev/mmcblk0p1 Swap: ID-1: swap-1 type: file size: 1.34 GiB used: 0 KiB (0.0%) file: /swapfile Sensors: System Temperatures: cpu: 42.6 C mobo: N/A Fan Speeds (RPM): N/A Info: Processes: 256 Uptime: 9m Memory: 3.61 GiB used: 859 MiB (23.2%) Init: systemd runlevel: 5 Shell: Bash inxi: 3.3.06 |
音频部分也很有趣,新的PipeWire音频和视频服务器与更传统的 ALSA(高级Linux声音架构)和 PulseAudio(跨平台的,可通过网络工作的声音服务)是一起运行的。
基准
我们在开发板上运行一些headless和图形基准测试。
我会从 SBC Bench 开始:
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 |
$ wget https://raw.githubusercontent.com/ThomasKaiser/sbc-bench/master/sbc-bench.sh $ sudo /bin/bash ./sbc-bench.sh -c WARNING: this tool is meant to run only on Debian Stretch, Buster, Bullseye or Ubuntu Bionic, Focal. When running on other distros results are partially meaningless or can't be collected. Press [ctrl]-[c] to stop or [enter] to continue. sbc-bench v0.8.1 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. Checking cpufreq OPP... Done. Memory performance (big.LITTLE cores measured individually): memcpy: 2256.6 MB/s (0.9%) memset: 7755.6 MB/s memcpy: 4299.9 MB/s memset: 7477.0 MB/s 7-zip total scores (3 consecutive runs): 9800,9774,9802 OpenSSL results (big.LITTLE cores measured individually): type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes aes-128-cbc 176082.23k 523975.23k 1013665.45k 1359812.61k 1510255.27k 1520052.91k aes-128-cbc 421729.18k 1043425.51k 1584737.54k 1810880.17k 1904719.19k 1911783.42k aes-192-cbc 167821.18k 465602.20k 827600.55k 1048505.69k 1136981.33k 1142565.55k aes-192-cbc 391623.20k 926669.76k 1324086.87k 1521390.93k 1589032.28k 1593972.05k aes-256-cbc 162742.46k 427874.47k 717046.87k 877222.91k 938270.72k 942221.99k aes-256-cbc 378114.54k 847673.83k 1187437.06k 1313454.42k 1363293.53k 1366933.50k Full results uploaded to http://ix.io/3DtN. Please check the log for anomalies (e.g. swapping or throttling happenend) and otherwise share this URL. |
我没有检测到throttling,throttling是当CPU温度过高后通过降频保护CPU的一种机制。而且我也没有听到风扇的声音,但根据报告的温度来看风扇应该是在工作的:
1 2 3 4 5 6 7 8 9 10 11 12 |
System health while running 7-zip multi core benchmark: Time big.LITTLE load %cpu %sys %usr %nice %io %irq Temp 22:26:18: 2400/2016MHz 4.98 9% 0% 8% 0% 0% 0% 48.8°C 22:26:42: 2400/2016MHz 4.97 90% 0% 89% 0% 0% 0% 64.2°C 22:27:02: 2400/2016MHz 4.99 81% 0% 80% 0% 0% 0% 58.2°C 22:27:22: 2400/2016MHz 4.89 91% 0% 90% 0% 0% 0% 60.2°C 22:27:45: 2400/2016MHz 5.34 91% 0% 90% 0% 0% 0% 65.8°C 22:28:05: 2400/2016MHz 5.16 80% 0% 79% 0% 0% 0% 60.1°C 22:28:25: 2400/2016MHz 5.34 89% 0% 87% 0% 0% 0% 58.6°C 22:28:49: 2400/2016MHz 5.67 91% 0% 90% 0% 0% 0% 65.4°C 22:29:09: 2400/2016MHz 5.56 81% 0% 80% 0% 0% 0% 58.9°C |
风扇的声音不大,我笔记本电脑风扇的噪音就盖过 ODROID-N2+ 风扇发出的噪音了,所以风扇的声音几乎听不见。请注意,风扇仅在要求更高的多线程 7-zip 基准测试期间触发,大部分时间未激活。测试在环境温度是在 28°C 的房间内进行的。

作为参考,ODROID-N2+ 仍然比超频为 2.0 GHz的树莓派4快得多。由于支持 Panfrost 是 ODROID-N2+ 的 Ubuntu 21.10 镜像亮点之一,所以接下来我要仔细检查一下我是否需要启用 glxinfo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Extended renderer info (GLX_MESA_query_renderer): Vendor: Panfrost (0xffffffff) Device: Mali-G52 (Panfrost) (0xffffffff) Version: 21.3.0 Accelerated: yes Video memory: 3698MB Unified memory: yes Preferred profile: core (0x1) Max core profile version: 3.1 Max compat profile version: 3.1 Max GLES1 profile version: 1.1 Max GLES[23] profile version: 3.1 OpenGL vendor string: Panfrost OpenGL renderer string: Mali-G52 (Panfrost) OpenGL core profile version string: 3.1 Mesa 21.3.0-devel (git-4e7a777093) OpenGL core profile shading language version string: 1.40 OpenGL core profile context flags: (none) |
试了之后的结果是 Panfrost 与 Mesa 21.3 开发分支,glxinfo 的输出相当长,所以我将它放在了一个开源的在线粘贴板pastebin中。
现在是时候使用 es2gears 和 glmark2-es2 基准测试了。es2gears 可以在全屏模式下轻松以 60 fps 的速度运行。
glmark2-es2-wayland 也可以与 Panfrost 开源驱动程序配合使用。

这是onscreen测试的输出,如下所示:
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 44 45 |
$ glmark2-es2-wayland ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Panfrost GL_RENDERER: Mali-G52 (Panfrost) GL_VERSION: OpenGL ES 3.1 Mesa 21.3.0-devel (git-4e7a777093) ======================================================= [build] use-vbo=false: FPS: 687 FrameTime: 1.456 ms [build] use-vbo=true: FPS: 1242 FrameTime: 0.805 ms [texture] texture-filter=nearest: FPS: 1460 FrameTime: 0.685 ms [texture] texture-filter=linear: FPS: 1422 FrameTime: 0.703 ms [texture] texture-filter=mipmap: FPS: 1551 FrameTime: 0.645 ms [shading] shading=gouraud: FPS: 867 FrameTime: 1.153 ms [shading] shading=blinn-phong-inf: FPS: 881 FrameTime: 1.135 ms [shading] shading=phong: FPS: 736 FrameTime: 1.359 ms [shading] shading=cel: FPS: 743 FrameTime: 1.346 ms [bump] bump-render=high-poly: FPS: 402 FrameTime: 2.488 ms [bump] bump-render=normals: FPS: 2033 FrameTime: 0.492 ms [bump] bump-render=height: FPS: 1879 FrameTime: 0.532 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 930 FrameTime: 1.075 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 363 FrameTime: 2.755 ms [pulsar] light=false:quads=5:texture=false: FPS: 1794 FrameTime: 0.557 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 274 FrameTime: 3.650 ms [desktop] effect=shadow:windows=4: FPS: 597 FrameTime: 1.675 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 216 FrameTime: 4.630 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 83 FrameTime: 12.048 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 261 FrameTime: 3.831 ms [ideas] speed=duration: FPS: 487 FrameTime: 2.053 ms [jellyfish] <default>: FPS: 767 FrameTime: 1.304 ms [terrain] <default>: FPS: 36 FrameTime: 27.778 ms [shadow] <default>: FPS: 227 FrameTime: 4.405 ms [refract] <default>: FPS: 71 FrameTime: 14.085 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 1454 FrameTime: 0.688 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 1544 FrameTime: 0.648 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 1537 FrameTime: 0.651 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 1519 FrameTime: 0.658 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 1201 FrameTime: 0.833 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 1098 FrameTime: 0.911 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 2077 FrameTime: 0.481 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 1876 FrameTime: 0.533 ms ======================================================= glmark2 Score: 979 ======================================================= |
glmark2 的得分是 979 分。2019年的时候,我用ODROID-N2 在 Wayland 上运行 Ubuntu 18.04 + Gnome3 + Linux 5.0 和来自 Arm 的 GPU 驱动程序编写过相同的测试。当时的得分是 1,119 分。不过,那是两年前的事了,现在肯定有很多变化,但开源驱动程序似乎比闭源驱动程序慢一点。除此之外,我还可以看到 Panfrost 依赖于 OpenGL ES 3.1,而 Arm 驱动程序使用的是 OpenGL ES 3.2。
我还在offscreen模式下尝试了基准测试:
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 44 45 |
glmark2-es2-wayland --off-screen ======================================================= glmark2 2021.02 ======================================================= OpenGL Information GL_VENDOR: Panfrost GL_RENDERER: Mali-G52 (Panfrost) GL_VERSION: OpenGL ES 3.1 Mesa 21.3.0-devel (git-4e7a777093) ======================================================= [build] use-vbo=false: FPS: 532 FrameTime: 1.880 ms [build] use-vbo=true: FPS: 787 FrameTime: 1.271 ms [texture] texture-filter=nearest: FPS: 822 FrameTime: 1.217 ms [texture] texture-filter=linear: FPS: 834 FrameTime: 1.199 ms [texture] texture-filter=mipmap: FPS: 856 FrameTime: 1.168 ms [shading] shading=gouraud: FPS: 635 FrameTime: 1.575 ms [shading] shading=blinn-phong-inf: FPS: 610 FrameTime: 1.639 ms [shading] shading=phong: FPS: 581 FrameTime: 1.721 ms [shading] shading=cel: FPS: 581 FrameTime: 1.721 ms [bump] bump-render=high-poly: FPS: 343 FrameTime: 2.915 ms [bump] bump-render=normals: FPS: 937 FrameTime: 1.067 ms [bump] bump-render=height: FPS: 879 FrameTime: 1.138 ms [effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 931 FrameTime: 1.074 ms [effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 393 FrameTime: 2.545 ms [pulsar] light=false:quads=5:texture=false: FPS: 887 FrameTime: 1.127 ms [desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 312 FrameTime: 3.205 ms [desktop] effect=shadow:windows=4: FPS: 711 FrameTime: 1.406 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 226 FrameTime: 4.425 ms [buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 84 FrameTime: 11.905 ms [buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 267 FrameTime: 3.745 ms [ideas] speed=duration: FPS: 314 FrameTime: 3.185 ms [jellyfish] <default>: FPS: 584 FrameTime: 1.712 ms [terrain] <default>: FPS: 39 FrameTime: 25.641 ms [shadow] <default>: FPS: 197 FrameTime: 5.076 ms [refract] <default>: FPS: 66 FrameTime: 15.152 ms [conditionals] fragment-steps=0:vertex-steps=0: FPS: 861 FrameTime: 1.161 ms [conditionals] fragment-steps=5:vertex-steps=0: FPS: 858 FrameTime: 1.166 ms [conditionals] fragment-steps=0:vertex-steps=5: FPS: 837 FrameTime: 1.195 ms [function] fragment-complexity=low:fragment-steps=5: FPS: 854 FrameTime: 1.171 ms [function] fragment-complexity=medium:fragment-steps=5: FPS: 801 FrameTime: 1.248 ms [loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 817 FrameTime: 1.224 ms [loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 846 FrameTime: 1.182 ms [loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 842 FrameTime: 1.188 ms ======================================================= glmark2 Score: 609 ======================================================= |
分数比之前更低了,我觉得这测试结果不是很对劲。
ODROID-N2+的用户体验
我已经在开发板上测试了 Ubuntu 21.10 的一些受支持的功能,并了解了它作为台式机的运行情况:
- 多任务处理 – 冷启动(即关机完全断电后启动)开始按顺序启动Firefox、Thunderbird、LibreOffice Writer 和 Gimp等应用程序
- 使用 Firefox 和 Chromium 浏览网页 – 打开多个标签页,Youtube 1080p、1440p 和 2160p (4K),WebGL演示:Aquarium
- 使用 SuperTuxKart 和 Dolphin 模拟器玩游戏
你们可以通过观看视频了解更多,相关视频链接,点击此处可查看。
总之,ODROID-N2+ 对于 Arm 平台来说速度是很快的了。为了在 YouTube 中完美流畅地播放视频,此时最好使用 720p。Firefox 使用 H.264 视频解码限制为 1080p,而 Chromium 使用的 VP9 支持高达 4K,但无法观看。网页浏览器呈现3D画面的WebGL水族馆演示,具有 500 条鱼时在 Firefox 中以 16-17 fps 进行渲染。但在 Chromium 中仅 3 fps,可能是因为不支持/启用 GPU 加速。开源3D卡丁车游戏在全屏模式下也可正常运行,但并不像我想要的那么流畅。我在 Dolphin 模拟器中尝试了超级马里奥,效果非常很好。
我在 Dolphin 模拟器中遇到了白色背景上的白色文本问题,解决方法是在 Ubuntu 的外观设置中切换到深色主题。

我还想用其他程序和命令行实用程序播放 4K 视频,但我无法安装 Kodi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$ sudo add-apt-repository ppa:team-xbmc/ppa $ sudo apt install kodi Reading package lists... Done Building dependency tree... Done Reading state information... Done Some packages could not be installed. This may mean that you have requested an impossible situation or if you are using the unstable distribution that some required packages have not yet been created or been moved out of Incoming. The following information may help to resolve the situation: The following packages have unmet dependencies: kodi : Depends: kodi-bin (< 6:19.3+git20211024.1941-49a04cd6a7-0~impish.1~) but it is not installable Recommends: i965-va-driver but it is not installable Recommends: kodi-peripheral-joystick but it is not installable Recommends: kodi-inputstream-adaptive but it is not installable Recommends: kodi-inputstream-rtmp but it is not installable E: Unable to correct problems, you have held broken packages. |
这个时候,VLC 只会显示一个黑屏,音频播放正常,并且也没法安装wiki 中列出的命令行工具 kplayer 和 c2play,不过我也没有设法从源代码中构建后者。我也询问了Hardkernel,不过还没有收到答案,如果有解决方案,我会再更新这篇评测。对了,以看到下载页面仍然还没有 Ubuntu 21.10 可供下载,所以这可能意味着镜像仍在进行中。无论如何,我们可以在现代 SoC 中使用开源 Arm Mali GPU 驱动程序这还是十分令人开心的。

文章翻译者:Jacob,嵌入式系统测试工程师、RAK高级工程师,物联网行业多年工作经验,熟悉嵌入式开发、测试各个环节,对不同产品有自己专业的分析与评估。