At work I spend most of time on SBSA Reference Platform. Especially in firmware part (Arm Trusted Firmware also known as TF-A and Tianocore EDK2 also known as UEFI). However, for some time, I have felt the need to experiment with some UEFI-related task on existing hardware.
I first searched for “affordable” SystemReady SR system. But options were either Ampere Altra or NVIDIA Grace, both prices at 3000 EUR or more.
So I looked at the budget market and bought a FriendlyELEC NanoPC-T6 SBC.
Some words about the hardware
The FriendlyELEC NanoPC-T6 is a SBC (Seriously Bad Computer) based on Rockchip RK3588 SoC. It has some interesting on-board features:
- 8 cpu cores (4x Cortex-A76, 4x Cortex-A55)
- 16GB of memory
- 32MB of SPI flash for storing firmware
- 64GB of eMMC (not visible under Linux)
- USB 2 ports
- USB 3 ports (one type A, one type C)
- 2 HDMI outputs
- 1 HDMI input
- m.2 type M slot for 2280 card (such as NVMe)
- m.2 type E slot for 2230 card (such as Wi-Fi)
- 2 2.5GbE network ports
- USB-C serial console port (CH341 chip)
- microSD card slot
- Power, Reset, MaskROM buttons
- audio jack
It comes with metal case which works also as a heatsink.
![NanoPC-T6 in the case NanoPC-T6 in the case](/files/2024/08/nanopc-700x.jpg)
Out of the box experience
As you know I expect a good “out of the box” experience. And NanoPC-T6 was like any other SBC I used in the past — unpleasant, horrible and frustrating.
The device came with a fork of U-Boot 2017.09, configured in such terrible way that it was incapable of booting any standard distro images I tried. I managed to boot the pre-installed Android 12 on the eMMC but quickly rebooted to avoid dealing with it.
I managed to boot Debian ‘testing’ manually but there was no networking available under 6.9.x kernel.
I Then moved on to other things as my schedule was quite busy.
UEFI experience
This week I reserved some time to get NanoPC-T6 running properly. I downloaded a Rockchip tool called “upgrade_tool” and used it to flash a UEFI image from the EDK2-RK3588 project.
Experience was much, much better. The firmware was now capable of booting distro images, allowed me to choose between ACPI or DeviceTree for hardware description and had proper EFI Shell — almost like a well-developed systems.
I went with ACPI mode and booted directly to Fedora ‘rawhide’ system stored on a USB drive. Linux 6.11-rc booted, found devices plugged into USB 3 ports, recognized both network interfaces (Realtek 8125 ones) and the NVME drive as well. There was video output on the HDMI screen (in a hardcoded 1080p resolution).
I then copied the system from the USB3 drive to the NVME, set the proper boot order and enjoyed a nicely working system.
DeviceTree?
But aren’t Seriously Bad Computers (SBCs) expected to run with DeviceTree? ACPI is for MS Windows, not for Linux or *BSD systems, right?
So I decided to boot into DT land. It took me a while as I had to remind myself how it works and ensure that UEFI firmware will use the 6.11-rc DTB instead of one for 5.10-rk or 6.1-rk vendor kernels.
Finally it booted — or rather, it “kind of” booted…
No USB, no PCIe == no NVME == boot into emergency mode because the root filesystem is not present…
Future plans
What will future bring? I am going to find out. I have ordered a Wi-Fi card for m.2 type E slot to see how it performs and I am going to spend some time around this EDK2 fork to make some experiments on real hardware.