VideoStrong VS-RD-RK3399 (aka VS-RK3399) is a features-packed development board powered by Rockchip RK3399 hexa core core processor which offers an alternative to Firefly-RK3399 board. The company sent me a development kit for evaluation, and I’ve already looked into VS-RD-RK3399 hardware and SDK in the first part of the review. Today, after shortly looking into the pre-installed Android 7.1 OS to make sure the board boots fine, I’ll report my experience with Debian 9, and building it from source.

A Quick Look at Android 7.1
I connected the board to my HDMI TV, added an Ethernet cable, and after powering it, VS-RK3399 promptly booted into Android 7.1 with the following launched.

It just has a few apps pre-installed, and lack Google Play store, but as I’ve seen in the new version of the SDK, a patch for Google Play store is provided, if that’s something you need for your use case.

The version I had pre-installed was built on August 14, 2017 with Android 7.1.2 OS running on top of Linux 4.4.55 kernel.
The storage section shows plenty of space left out of the 29.12GB flash partition, and the NTFS and EXT-4 partitions of my USB drives were mounted properly.
However, Explorer app would keep on reporting all USB partitions were NOT mounted. I had to use my smartphone to transfer the screenshots over Bluetooth. Adb would have been another option. Anyway, the Android version I had on my board was pretty rough, but I can see they’ve released another Android image in VS3399 board’s MEGA folder. I have not tried it, since I’ve spent enough time playing with Android on RK3399 with TV boxes such as Yundoo Y8 and Vorke Z3.
Installing Debian
So instead I went to the aforelinked MEGA folder, and downloaded VS-RD-RK3399-linuxSDK, which not only have the SDK like last month, but also a Debian image.
So I downloaded debia_linux_20170905.rar, and the rar file in linux_update_tools, but the latter actually contains (outdated versions of) Windows based Rockchip’s AndroidTool & DriverAssistant, but since I’m using Ubuntu, I went with upgrade_tool instead just like I did for Rock64 board quick start guide.
We’ll need to enter recovery mode to flash the Debian image. While the board is running keep pressing the recovery button, press the reset button shortly, count to 2 or 3, and release the recovery button. When you connect the USB type C to USB 3.0 cable between the board and your computer, you should see the board in the kernel log (dmesg):
1 2 3 4 5 6 |
[27848.566693] usb 1-2.4.3: new high-speed USB device number 9 using ehci-pci [27848.681892] usb 1-2.4.3: New USB device found, idVendor=2207, idProduct=0006 [27848.681896] usb 1-2.4.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [27848.681899] usb 1-2.4.3: Product: rk3399_mid [27848.681901] usb 1-2.4.3: Manufacturer: rockchip [27848.681904] usb 1-2.4.3: SerialNumber: 3WR50DRVSU |
How we can extract the Debian firmware, and flash it with upgrade_tool:
1 2 |
unrar x debia_linux_20170905.rar upgrade_tool uf debia_linux_20170915.img |
if successful the procedure is successful, the output should like the four lines below:
1 2 3 4 |
Loading firmware... Support Type:RK330C FW Ver:6.0.01 FW Time:2017-09-05 09:28:30 Loader ver:1.06 Loader Time:2017-06-03 17:22:39 Upgrade firmware ok. |
and the board should have automatically rebooted to Debian 9.
Testing Debian 9 on VS-RK3399 Board
Now that the installation is complete, we can start to play with the Debian on the board. Or can’t we? There’s no menu available at all, and only the Trash icon on the desktop. If I right click I get some more menus…
So I went into Desktop Preferences, enabled some other icons, and change the right click behavior.
Now I can launch some apps such as the terminal emulator and Chromium web browser, but they don’t show on the desktop at all, despite clearly running “somewhere”…
I then noticed I can move the mouse cursor beyond he left side of the HDMI TV, so I’d assumed there must be another display enabled. I tried to connect Dodocool DC30S hub to the USB type C port since it supports DisplayPort, but I get no signal on my other monitor, so the extra display must be connected via eDP or MIPI DSI, and the company sent me neither.
I could see the image is based on Linaro ALIP rootfs, so I connected to the board via SSH, hoping that linaro/linaro username and password would work, and they did:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
linaro@linaro-alip:~$ uname -a Linux linaro-alip 4.4.55 #474 SMP Tue Sep 5 09:09:33 CST 2017 aarch64 GNU/Linux linaro@linaro-alip:~$ cat /etc/issue Debian GNU/Linux 9 \n \l linaro@linaro-alip:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 29G 1.4G 27G 5% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 940K 1.9G 1% /dev/shm tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup tmpfs 388M 0 388M 0% /run/user/0 tmpfs 388M 8.0K 388M 1% /run/user/1000 /dev/sda3 245G 163G 82G 67% /media/linaro/USB3_EXFAT /dev/sda2 241G 163G 66G 72% /media/linaro/USB3_EXT4 /dev/sda1 245G 152G 93G 63% /media/linaro/USB3_NTFS linaro@linaro-alip:~$ free -m total used free shared buff/cache available Mem: 3877 268 3164 41 443 3537 Swap: 0 0 0 |
The image runs Debian 9 with Linux 4.4.55, and we have a 29GB rootfs, and 3877 MB memory in total.
We can get some more details about the CPU with 2 Cortex A72 cores clocked at up to 1.8 GHz, and 4 Cortex A53 cores clocked at up to 1.416 GHz:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
sudo lshw -C cpu *-cpu:0 description: CPU product: cpu-map physical id: 0 bus info: cpu@0 size: 408MHz capacity: 1416MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:1 description: CPU product: cpu physical id: 1 bus info: cpu@1 size: 408MHz capacity: 1416MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:2 description: CPU product: cpu physical id: 2 bus info: cpu@2 size: 408MHz capacity: 1416MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:3 description: CPU product: cpu physical id: 3 bus info: cpu@3 size: 408MHz capacity: 1416MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:4 description: CPU product: cpu physical id: 4 bus info: cpu@4 size: 1800MHz capacity: 1800MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:5 description: CPU product: cpu physical id: 5 bus info: cpu@5 size: 1800MHz capacity: 1800MHz capabilities: half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt lpae evtstrm aes pmull sha1 sha2 crc32 cpufreq *-cpu:6 DISABLED description: CPU product: cpu physical id: 6 bus info: cpu@6 *-cpu:7 DISABLED description: CPU product: idle-states physical id: 7 bus info: cpu@7 |
The Gigabit Ethernet port and WiFi module are both detected:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sudo lshw -C network *-network:0 description: Wireless interface physical id: 7 logical name: wlan0 serial: 44:2c:05:2a:57:38 capabilities: ethernet physical wireless configuration: broadcast=yes driver=wl driverversion=0 multicast=yes wireless=IEEE 802.11 *-network:1 description: Ethernet interface physical id: 8 logical name: eth0 serial: 1e:77:b1:cb:99:1b size: 1Gbit/s capacity: 1Gbit/s capabilities: ethernet physical tp aui bnc mii fibre 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=st_gmac driverversion=March_2013 duplex=full ip=192.168.0.111 link=yes multicast=yes port=MII speed=1Gbit/s |
I could not find Bluetooth however using “communication”, and the list of buses or bridges only showed USB ports, no PCI(e) interfaces:
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
sudo lshw -C bus *-core description: Motherboard physical id: 0 *-usbhost:0 product: Generic Platform OHCI controller vendor: Linux 4.4.55 ohci_hcd physical id: 1 bus info: usb@6 logical name: usb6 version: 4.04 capabilities: usb-1.10 configuration: driver=hub slots=1 speed=12Mbit/s *-usbhost:1 product: EHCI Host Controller vendor: Linux 4.4.55 ehci_hcd physical id: 2 bus info: usb@5 logical name: usb5 version: 4.04 capabilities: usb-2.00 configuration: driver=hub slots=1 speed=480Mbit/s *-usbhost:2 product: xHCI Host Controller vendor: Linux 4.4.55 xhci-hcd physical id: 3 bus info: usb@4 logical name: usb4 version: 4.04 capabilities: usb-3.00 configuration: driver=hub slots=1 speed=5000Mbit/s *-usbhost:3 product: xHCI Host Controller vendor: Linux 4.4.55 xhci-hcd physical id: 4 bus info: usb@3 logical name: usb3 version: 4.04 capabilities: usb-2.00 configuration: driver=hub slots=1 speed=480Mbit/s *-usbhost:4 product: Generic Platform OHCI controller vendor: Linux 4.4.55 ohci_hcd physical id: 5 bus info: usb@2 logical name: usb2 version: 4.04 capabilities: usb-1.10 configuration: driver=hub slots=1 speed=12Mbit/s *-usbhost:5 product: EHCI Host Controller vendor: Linux 4.4.55 ehci_hcd physical id: 6 bus info: usb@1 logical name: usb1 version: 4.04 capabilities: usb-2.00 configuration: driver=hub slots=1 speed=480Mbit/s *-usb description: USB hub product: USB2.0 Hub vendor: Genesys Logic, Inc. physical id: 1 bus info: usb@1:1 version: 85.36 capabilities: usb-2.00 configuration: driver=hub maxpower=100mA slots=4 speed=480Mbit/s |
lspci did not return anything either.
Build a Debian Image from Source
Since the image is not really usable with LCD display, I won’t perform more tests on Debian firmware, and instead will work with the SDK, trying to build my own image from source. We can extract the Linux SDK we’ve gotten from the MEGA link:
1 2 3 |
cd VS-RD-RK3399-linuxSDK/Debian_linux_SDK tar xf VS-RD-Rk3399-Linxu-SDK.tgz cd VS-RD-Rk3399-Linxu-SDK/ |
…and follow / adapt the instructions in VS-RK3399 Linux SDK Compile and build (EN).pdf document found in VS-RD software datasheet folder.
The company recommends a build machine running Ubuntu 14.04 / 16.04 64-bit, and I installed some dependencies on my Ubuntu 16.04 computer:
1 |
sudo apt install git gnupg flex bison gperf build-essential zip tar curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib cmake tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 lzop |
as well as ARM/ARM64 GCC toolchain and other tools and libraries:
1 |
sudo apt install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf device-tree-compiler lzop libncurses5-dev libssl1.0.0 libssl-dev |
We can now build u-boot:
1 2 3 |
cd u-boot/ make rk3399_linux_defconfig make ARCHV=aarch64 -j8 |
It should only take a few seconds, and we can make sure the build went fine:
1 2 |
uboot version: U-Boot 2014.10-RK3399-06 (Sep 23 2017 - 19:18:27) pack uboot.img success! |
Next up is the the Linux kernel:
1 2 |
cd ../kernel make ARCH=arm64 rockchip_defconfig |
We have to choose an image to build with the dts file of our choice:
1 2 3 4 |
ls arch/arm64/boot/dts/rockchip/rk3399-videostrong*.dts arch/arm64/boot/dts/rockchip/rk3399-videostrong-board-dulelcd.dts arch/arm64/boot/dts/rockchip/rk3399-videostrong-board-edp.dts arch/arm64/boot/dts/rockchip/rk3399-videostrong-board-mipi.dts |
The -edp image is with eDP LCD display, -mipi is for MIPI LCD display, and the -dulelcd must be for both (“dual LCD”). So there’s no option for no LCD at all right now, and I’m not sure why there’s a need for three DTS files for the board, as surely this should be possible to select/configure the LCD outputs are runtime (TBC). But let’s use the MIPI LCD one:
1 |
make ARCH=arm64 rk3399-videostrong-board-mipi.img -j8 |
I did not go that well, as the build failed:
1 2 |
Makefile:983: recipe for target 'drivers' failed make: *** [drivers] Error 2 |
I tried with rk3399-videostrong-board-edp.img again, and same error, but I noticed more details by scrolling up:
1 2 3 |
make[3]: *** No rule to make target 'drivers/input/touchscreen/gsl3673.o', needed by 'drivers/input/touchscreen/built-in.o'. Stop. scripts/Makefile.build:403: recipe for target 'drivers/input/touchscreen' failed make[2]: *** [drivers/input/touchscreen] Error 2 |
We can see gsl3673.c file is missing:
1 2 |
ls drivers/input/touchscreen/gsl3673* drivers/input/touchscreen/gsl3673.c-old drivers/input/touchscreen/gsl3673.h |
So I renamed the c-old file to c, and could complete the build:
1 2 3 |
Image: kernel.img is ready Pack to resource.img successed! Image: resource.img (with rk3399-videostrong-board-mipi.dtb logo.bmp logo_kernel.bmp) is ready |
Now we can build the complete firmware from source using buildroot:
1 2 3 4 |
cd ../buildroot make rockchip_rk3399_defconfig cd .. ./build_all.sh -j8 |
The build all script will take a long while as it downloads and builds all packages. It took over 2 hours on my machine. I ended with:
1 2 3 |
rm -f *~ core *.core rm: cannot remove '.rkmkdirs': No such file or directory build all Done |
It looks OK, except for the script failed to remove one file/directory. Let’s try to create the firmware file:
1 |
./mkfirmware.sh |
Sadly that part failed too because of conflicts with a patch:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Package rootfs.img now build rootfs >>> mpp release Patching Applying 0001-buildroot-allow-select-the-memory-allocator.patch using patch: Error: duplicate filename '0001-buildroot-allow-select-the-memory-allocator.patch' Conflicting files are: already applied: /media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/package/rockchip/mpp/0001-buildroot-allow-select-the-memory-allocator.patch to be applied : /media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/package/rockchip/mpp/0001-buildroot-allow-select-the-memory-allocator.patch package/pkg-generic.mk:165: recipe for target '/media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/output/build/mpp-release/.stamp_patched' failed make[1]: *** [/media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/output/build/mpp-release/.stamp_patched] Error 1 Makefile:41: recipe for target '_all' failed make: *** [_all] Error 2 build rootfs Done... cp: cannot stat '/media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/buildroot/output/images/rootfs.ext4': No such file or directory cp: cannot stat '/media/hdd/edev/rockchip/rk3399/VS-RD-RK3399-linuxSDK/Debian_linux_SDK/VS-RD-Rk3399-Linxu-SDK/buildroot/device/rockchip/rk3399/rockimg/parameter.txt': No such file or directory create uboot.img...done. create trust.img...done. create loader...done. create resource.img...done. create kernel.img...done. Image: image in rockimg is ready |
That failures means the rootfs was not built, and the script is so bad did not stop during mpp build failure, and continued building other libs:
1 2 |
ls rockimg/ kernel.img MiniLoaderAll.bin resource.img trust.img uboot.img |
I have not tried to fix the issue, as I don’t know how many other issues are hidden in that big piles of code. VideoStrong should look into and provide an SDK that actually builds.. In case the build works, we should get rootfs.img file that can be flashed with AndroidTool if we follow the instructions in the PDF file.
However, you’ll also be able to flash the files one by one using upgrade_tool in Linux, no need to have a Windows machine for any part of the process.
It’s hard to recommend VS-RD-RK3399 if you are an individual who want a platform for development since software support and documentation are rather poor, but if you are a company that plans to order in quantity, you should have direct support from the company, and you can contact them via Alibaba’s VideoStrong page. If you have a good skills, and are ready to work to solve whatever issues, you can also purchase the board for $168.32 (2GB/16GB) or $213.29 (4GB/32GB) on GearBest where it is sold under the MECOOL brand (Coupon GBCNA will give a 14% discount), or Aliexpress. For reference, Firefly-RK3399 in equivalent memory/storage configuration sells for $179 and $219 on Aliexpress. It’s also listed on Amazon US for $149.99/$199.99.

Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress