AIO-3399J Development Board Review with Ubuntu 16.04

Regular readers will know that Firefly team sent  me several of their Rockchip boards for evaluation, and I started with a review of ROC-RK3328-CC development board powered by Rockchip RK3328 processor. This time, I went with the high-end AIO-3399J board comprised of a features-packed baseboard and a Rockchip RK3399 system-on-module.

Just like with the previous review, I’ve decided to focus on Linux support, in this case Xunbuntu 16.04, and I’ll do an Android review on the company releases Android 8.1 for Firefly-RK3399 board.

First Boot with AIO-3399J Board

Before booting the board, I inserted the heatsink, and connected the provided WiFi antennas. I also connected some devices and cables, including a mouse,  the male to male USB cable to the top USB 3.0 (OTG) port for firmware update, a HDMI cable to my TV, and Ethernet cable, as well as the serial debug board.

AIO-3399J WiFi, Heatsink, USB Firmware Update
Click to Enlarge

The final step was to connect the 12V power supply, and I immediately got output to the serial console (/dev/ttyUSB0 configured with 1,500,000 bps 8N1, no hardware flow control), and a few seconds later the Android 7.1 launcher showed up.

AIO-3399J Android 7.1
Click to Enlarge

But I wanted to run a Linux distributions, so I went over the download page, and selected the latest Ubuntu 16.04 image (AIO-3399J_xubuntu1604_20180119.7z), which actually happens to be Xubuntu 16.04 (Ubuntu + Xfce desktop environment).  Just make sure you select “Google Drive” instead of “Official” if you are outside of China, as the download speed should be much higher that way.

Now that we have out firmware file, we just need to follow the upgrade instructions for Linux or Windows with respectively Linux_Upgrade_Tool or AndroidTool.

My computer is running Ubuntu 18.04, so I went with the Linux method. First you need to make you’ve connected your male to male USB cable between your computer and the board with power connected.

AIO-3399J Reset & Recovery Buttons, Debug HeaderWe need to enter “loader mode” as follows: keep pressing the recovery button, press and release the reset button, and about two seconds later, release the recovery button.

If everything is working as expected, the serial console output should look like:


If you have not setup the serial console, that should not be a problem, and after uncompressing the firmware, we can flash it as follows:


This normally take about a minute or so, and that’s the output from the command upon success:


The board will be automatically reboot, and Xubuntu desktop should show on your HDMI TV/monitor after a few seconds.

AIO-3399J Development Board Review with Ubuntu 16.04
Click to Enlarge

I then remove the male to male USB cable, and instead added a USB keyboard, and a USB 3.0 drive. You may notice I had some overscan issues (edges cut) in the photo above, but setting aspect ratio to “Just Scan” in my LG television fixed the issue.

Here’s the very first boot serial log for reference:

The kernel booted in about 20 seconds.

Some system info with the usual commands:


It’s not exactly the most recent Ubuntu version, but everything else is as expected with a 15GB rootfs, and around 1.9GB total RAM. I won’t update Ubuntu at first, in case this breaks a few things, but I’ll do it later in this review.  The board detect all four partitions on my drives, but can only mount NTFS and EXT4 partition, since exFAT and BTRFS are not enabled in the kernel.

No modules are loaded since they are built-in the kernel like with ROC-RK3328-C, and gpios appears to be enable:


Firefly has one of the best documentation for drivers and I/Os I’ve seen so far, and they explain how to define the behavior in device tree files, program the drivers in C language, and debug with sysfs.

For example, we can see more details about the pins with the following commands:


Commands to turn off and on again one of the Blue LED close to the DC jack:


Command to read ADC values using sysfs:


and some PWM info:


AIo-3399J has many I/O headers, and all marked on the other side of the board.

AIO-3399J board pinout

3D Graphics (OpenGL ES) on AIO3399-J with Ubuntu 16.04

Let’s move to test whether 3D graphics acceleration is enabled by installating the usual tools:


es2_info reports Arm Midgard  r13p0 GPU driver is indeed loaded:


es2gears works OK with Midgard driver at around 55 fps.

RK3399 es2gearsglmark2-es2 could also run just fine, and with more sample than on ROC-RK3328-CC since OpenGL ES 3.2 is supported (and not just version 2.0),

RK3399 glmark2-es2
Click to Enlarge

glmark2-es2 output: