I purchased Qualcomm DragonBoard 410c development board last year, and first tested it and run some benchmark on the 96Boards compliant hardware with Android. I found that it was still work-in-progress, and decided to wait before trying Debian on the board. I’ve now done so, and will report by experience installing Debian Linux, playing with the board, and running Phoronix benchmarks to compare it to other ARM Linux boards.
Installing Debian on DragonBoard 410c
The first challenge is to navigate through the documentation that is not always clear or up-to-date. I eventually ended up on DragonBoard 410c Wiki on Github.
You then have to decided which image you want. While there are two official operating systems with Android and Debian, you can three “entities” releasiong their own images. For Debian specifically, you have the Linaro image, and Reference Platform Build (RPB) image. I could not find any changelog or known issues with the former, but the latter as its own Wiki with the latest release being RPB 16.03 (March 2016), and the next one scheduled to be RPB 16.06 in June.
That’s the current list of known issues
- bug 285 USB host doesn’t detect any plugged devices
- bug 121 [RPB] Cannot soft power off or shutdown db410c
- bug 284 [RPB] Dragon board Display sleep not working
- bug 289 [RPB] USB devices don’t work after reboot
- bug 207 [RPB] Bluetooth does not work on Dragon board debian
- bug 153 [RPB] Missing information about hwpack usage
USB host not working did not inspire confidence, so I first tested the Linaro image. The (other) Wiki points to the “latest version”, but the link would point to Linaro Debian 16.02 release, while I could find a more recent Linaro Debian 16.04 which I downloaded in a terminal:
1 2 |
wget https://builds.96boards.org/releases/dragonboard410c/linaro/debian/16.04/dragonboard410c_sdcard_install_debian-83.zip unzip dragonboard410c_sdcard_install_debian-83.zip |
I used a micro SD card to install it. If you use Windows, simply use Win32DiskImager, but in computer running Linux or in Windows via Windows subsystem for Linux, you may want to do it in the terminal. First check the SD card device with lsblk. Mine was /dev/sdb, but your may be different, and I use /dev/sdX in the command below tp flash the Debian installer to a micro SD card:
1 2 3 4 |
sudo umount /dev/sdX* sudo apt install pv sudo dd if=db410c_sd_install_debian.img | pv | sudo dd of=/dev/sdX bs=16M sync |
Now remove the micro SD card from your computer and insert it in to the board, set the jumper to boot from SD card on the DragonBoard 410c, and connect the power. I could see LED 1 blinking, but nothing on my HDMI TV. Last time, I did not manage to make the serial console (requiring a 1.8V USB to TTL board or cable) using Hardkernel ODROID board, so I went to the support forums, and after several minutes of reading, I found that the RPB image is recommended, as well as a clear explanation between the Linaro and RPB images:
Use the Reference Platform Build instead of the Linaro release. The Reference Platform is an integrated build with support for multiple boards, and that is where all engineering effort is going. The Linaro build is the old single-platform image that we’re not working on anymore.
The reference platform will run on all 96boards CE (Consumer Edition) and EE (Enterprise Edition), while the Linaro image is built specifically for a given board, and they are not really working on it. [Update: This answer was specific to Hikey board, and for DragonBoard 410c there are two images provided by Qualcomm Landing Team and the Reference Platform team]
So let’s start again from scratch using the RPB image, and download the bootloader, Linux kernel and rootfs to my Ubuntu computer:
1 2 3 |
wget https://builds.96boards.org/releases/dragonboard410c/linaro/rescue/latest/dragonboard410c_bootloader_emmc_linux-*.zip wget https://builds.96boards.org/releases/reference-platform/debian/dragonboard410c/16.03/dragonboard410c-boot-linux-*.img.gz wget https://builds.96boards.org/releases/reference-platform/debian/dragonboard410c/16.03/dragonboard410c-rootfs-debian-jessie-alip-*.emmc.img.gz |
Now find a micro USB to USB cable to connect to DragonBoard 410c, install fastboot…
1 |
sudo apt-get install android-tools-fastboot |
.. and check the device is detected:
1 2 |
jaufranc@FX8350:~$ fastboot devices ddb2310 fastboot |
Good. After making sure the jumper switch is set to 0000 on the board again, we can extract the three files, and install Debian as follows:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
unzip dragonboard410c_bootloader_emmc_linux-\*.zip fastboot flash partition gpt_both0.bin fastboot flash hyp hyp.mbn fastboot flash modem NON-HLOS.bin fastboot flash rpm rpm.mbn fastboot flash sbl1 sbl1.mbn fastboot flash sec sec.dat fastboot flash tz tz.mbn fastboot flash aboot emmc_appsboot.mbn fastboot erase boot fastboot erase rootfs fastboot erase devinfo gunzip dragonboard410c-boot-linux-\*.img.gz fastboot flash boot dragonboard410c-boot-linux-*.img gunzip dragonboard410c-rootfs-debian-jessie-alip-\*.emmc.img.gz fastboot flash rootfs dragonboard410c-rootfs-debian-jessie-alip-*.emmc.img |
That was a lot of commands to install the operating system… Now you can unplug the board, remove the micro USB cable, and connect the power again. After a few seconds, you should see the kernel log, and eventually LXDE desktop environment.
You’ll be asked to configure WiFi, and you’re basically done.
DragonBoard 410c Debian System Info
I’ve then run a few command to learn more about the image and system:
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 |
linaro@linaro-alip:~$ uname -a Linux linaro-alip 4.4.0-104-arm64 #1 SMP Debian 4.4.0.linaro.104-1.linarojessie.1 (2016-03-01) aarch64 GNU/Linux linaro@linaro-alip:~$ cat /etc/issue Debian GNU/Linux 8 \n \l linaro@linaro-alip:~$ free -h total used free shared buffers cached Mem: 833M 766M 67M 105M 20M 375M -/+ buffers/cache: 370M 463M Swap: 0B 0B 0B linaro@linaro-alip:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 10M 0 10M 0% /dev tmpfs 167M 7.0M 160M 5% /run /dev/mmcblk0p10 6.9G 1.9G 4.8G 28% / tmpfs 417M 5.4M 412M 2% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 417M 0 417M 0% /sys/fs/cgroup tmpfs 84M 12K 84M 1% /run/user/1000 tmpfs 84M 0 84M 0% /run/user/0 /dev/mmcblk0p1 64M 22M 42M 35% /media/linaro/00BC-614E linaro@linaro-alip:~$ cat /proc/cpuinfo processor : 0 BogoMIPS : 38.40 Features : fp asimd evtstrm crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 0 processor : 1 BogoMIPS : 38.40 Features : fp asimd evtstrm crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 0 processor : 2 BogoMIPS : 38.40 Features : fp asimd evtstrm crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 0 processor : 3 BogoMIPS : 38.40 Features : fp asimd evtstrm crc32 CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 0 |
One of the main advantage of 96Boards should be recent Linux version,and that’s exactly what we have here with Linux 4.4 running on the board. Out of a total of 866MB reported RAM, 64MB is free, and the 6.9GB rootfs has 4.8 GB available to the user. Snapdragon 410 SoC is correctly reported as being a quad core Cortex A53 (0xd03) processor.
I used file utility to make sure a 64-bit rootfs is being used here:
1 2 |
file /bin/dash /bin/dash: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=3633fbb61d3404a6128e851115663017f9c47efd, stripped |
Finally, there’s a bunch of modules pre-loaded on the board:
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 |
linaro@linaro-alip:~$ lsmod Module Size Used by ctr 16384 1 ccm 20480 1 bnep 28672 2 bluetooth 606208 5 bnep arc4 16384 2 wcn36xx 77824 0 mac80211 749568 1 wcn36xx cfg80211 647168 1 mac80211 input_leds 16384 0 usbmouse 16384 0 usbkbd 16384 0 joydev 20480 0 hid_generic 16384 0 usbhid 61440 0 hid 131072 2 hid_generic,usbhid cpufreq_userspace 16384 0 cpufreq_powersave 16384 0 cpufreq_stats 16384 0 cpufreq_conservative 24576 0 evdev 24576 7 wcn36xx_platform 16384 0 ci_hdrc_msm 16384 0 ci_hdrc 49152 1 ci_hdrc_msm udc_core 28672 1 ci_hdrc qcom_spmi_temp_alarm 16384 0 snd_soc_msm8x16 77824 1 qcom_spmi_vadc 28672 0 rtc_pm8xxx 16384 0 industrialio 77824 2 qcom_spmi_temp_alarm,qcom_spmi_vadc ehci_msm 16384 0 msm_rng 16384 0 usb3503 16384 0 extcon_usb_gpio 16384 0 uio_pdrv_genirq 16384 0 gpio_keys 20480 0 uio 24576 1 uio_pdrv_genirq cpufreq_dt 20480 0 ipv6 462848 38 autofs4 49152 2 ext4 700416 1 mbcache 24576 1 ext4 jbd2 143360 1 ext4 btrfs 1204224 0 xor 20480 1 btrfs raid6_pq 106496 1 btrfs phy_msm_usb 36864 2 sdhci_msm 16384 0 sdhci_pltfm 16384 1 sdhci_msm |
Testing Debian on DragonBoard 410c
The thing that often do not work on ARM Linux board are 3D graphics and hardware video decoding, so I’ve specifically tested these two, and also played with the pre-installed Chromium browser.
If I understand correctly the debian image comes with Freedreno open source graphics driver, and if that’s the case I have the first ever platform with working open source 3D graphics drivers:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
linaro@linaro-alip:~$ es2gears EGL_VERSION = 1.4 (DRI2) vertex shader info: fragment shader info: info: 2250 frames in 5.0 seconds = 449.910 FPS 2193 frames in 5.0 seconds = 438.425 FPS linaro@linaro-alip:~$ es2gears_x11 EGL_VERSION = 1.4 (DRI2) vertex shader info: fragment shader info: info: 2236 frames in 5.0 seconds = 447.200 FPS 2193 frames in 5.0 seconds = 438.512 FPS |
So that means both framebuffer and X11 3D graphics acceleration are working. Nice !
I also tried to play Tuxracer as it was part of the board’s test results provided by Linaro.
1 |
sudo apt-get install extremetuxracer |
It works, but it’s so slow that it’s barely playable (see video below).
I installed VLC to play 1080op h.264 videos, but based on the CPU usage the system is clearly using software decoding, and there’s no audio via HDMI. I’ve asked about those two issues on the forums about 24 hours ago, but I have yet to get a reply.
Chromium loads OK, but I did notice some freezes during use, and YouTube will struggle at full screen at 1080p, in similar way to many other low end ARM Linux platforms.
DragonBoard 410c Linux Benchmarks
Let’s install the latest version of Phoronix…
1 2 3 |
sudo apt-get install php5-cli php5-gd wget http://phoronix-test-suite.com/releases/repo/pts.debian/files/phoronix-test-suite_6.2.1_all.deb sudo dpkg -i phoronix-test-suite_6.2.1_all.deb |
…and run some benchmarks to compare against other development boards:
1 |
phoronix-test-suite benchmark 1604204-GA-1604082GA37 |
After over 3 hours the results are in. Bear in mind that the board does not have heatsink, just a metallic shield, and this may affects the performance. It’s also running an OS with a 64-bit ARM rootfs, while platforms like Raspberry Pi 3 features a 64-bit processor running 32-bit code.
I like to check John the Ripper for multi-threaded performance.
While FLAC audio encoding is nice to single threaded performance.
In theory the CPU performance of Snapdragon 410 and Broadcom BCM2837 (as found in RPi 3) should be equal since both are quad core Cortex A53 processors @ 1.2 GHz, but for some reasons DragonBoard 410c is a little slower in the multi-threaded benchmark, and quite faster during FLAC audio encoding likely due to software differences (Aarch64 vs Aarch32).
You can find the full results @ http://openbenchmarking.org/result/1605068-GA-1604204GA12
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
Excellent review, looks like the end-user experience could use some documentation and workflow cleanup, but seems like the software itself is maturing and coming along nicely.
Excellent review indeed! This part in particular brought a tear to my eye:
‘If I understand correctly the debian image comes with Freedreno open source graphics driver, and if that’s the case I have the first ever platform with working open source 3D graphics drivers’
I thought I’d never live to see the day. Upstream kernels and OSS GL stacks – the way those devices were meant to be run. /raises teacup
@Jean-Luc Aufranc (CNXSoft), can you comment on the heat dissipation of the board – does it come with a sink, and do the CPU cores throttle notably?
Hey, that’s a r0p0 part – the very first A53 revision! It features some funky errata, like the this one: http://comments.gmane.org/gmane.comp.compilers.clang.scm/109670
Will you be testing Android?
@Karl Johnson
I’ve shortly played with Android last December @ http://www.cnx-software.com/2015/11/21/dragonboard-410c-development-board-quick-start-guide-and-android-benchmarks/
If you mean a review like for TV boxes, then I don’t have plan for this. I think that board is mostly interesting for app development with the latest Android version.
@blu
You can see what the board looks like @ http://www.cnx-software.com/wp-content/uploads/2015/11/96Boards_Power_Adapter.jpg
So no proper heatsink. I think it’s throttling a little based on John the Ripper results, but I have not checked it formally. RPI monitor would be a nice thing to run, but I’m not sure it supports that board.
I did try to check the temp with an IR thermometer, and temp was only about 45 C, but the metallic shield is a bit shiny, so it may have skewed the results.
Sorry for the confusion at the documentation side, it’s a lot better but still not perfect. The RPB is a general effort that Linaro is doing for the multiple boards we support, in a way to exercise the idea of a common kernel and rootfs, which is why we recommend it. On the other side, we also have another Debian build for DB410c, which is maintained by the Qcom Landing Team. That build can be found at https://builds.96boards.org/releases/dragonboard410c/linaro/debian. The message in the forum recommending RPB and saying that the Linaro build is not supported was only for HiKey, for DB410c… Read more »
Regarding the huge amount of commands to flash, that is only required for a clean flash (or when switching between Debian and Android). After that is done, you can keep updating only the boot and rootfs images (via fastboot).
@Jean-Luc Aufranc (CNXSoft)
If /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq is available RPi-Monitor will already graph throttling behaviour. My first steps when trying to support a new board to get thermal and voltage values if available are then as follows:
I’ve been asked to test Retroarch game emulator: sudo apt -y install build-essential libxkbcommon-dev zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev git git clone https://github.com/libretro/RetroArch.git cd RetroArch ./configure --enable-kms --enable-egl && make -j4 sudo make install 12345 sudo apt -y install build-essential libxkbcommon-dev zlib1g-dev libfreetype6-dev libegl1-mesa-dev libgbm-dev libavcodec-dev libsdl2-dev libsdl-image1.2-dev libxml2-dev gitgit clone https://github.com/libretro/RetroArch.gitcd RetroArch./configure --enable-kms --enable-egl && make -j4sudo make install But it won’t build: CC intl/msg_hash_eo.c command.c: In function ‘command_event’: command.c:1630:12: error: ‘CMD_EVENT_LOAD_CONTENT_FFMPEG’ undeclared (first use in this function) case CMD_EVENT_LOAD_CONTENT_FFMPEG: ^ command.c:1630:12: note: each undeclared identifier is reported only once for each function it appears in Makefile:130:… Read more »
FFmpeg is needed to record or live streaming video you can disable it for now by adding –disable-ffmpeg
./configure –enable-kms –enable-egl –disable-ffmpeg && make -j4
Thank you for your test.
@gouchi
Same problem after disabling ffmpeg. Does RetroArch build on other ARM platforms?
@Jean-Luc Aufranc (CNXSoft)
Yes it compiled fine on other ARM platform.
Can you git pull to get last update because there was buildfix for compiling without ffmpeg just 3 hours ago 😉
git pull
make clean
./configure –enable-kms –enable-egl –disable-ffmpeg && make -j4
@gouchi
It’s OK now. It runs.
@Jean-Luc Aufranc (CNXSoft)
Great !
You can check this tutorial for getting started :
http://www.libretro.com/index.php/getting-started-with-retroarch
Don’t forget to get assets and core from Online Updater.
@gouchi
Accessing the Core Updater does nothing. The other part Core Info Files, Assets, etc… can all be downloaded. But since I can’t load any cores I’m stuck.
@Jean-Luc Aufranc (CNXSoft)
@gouchi
One reason could be that aarch64/arm64 is not supported, only armhf and armel -> http://buildbot.libretro.com/nightly/linux/
@Jean-Luc Aufranc (CNXSoft)
I see.
Can you try to compile test gl core ?
cd RetroArch/cores/libretro-test-gl
make -j2
Then you can Load the core (testgl_libretro.so) and then Start core to see if it is working.
About your audio/video issue, I see there is an answer on the forum. Have you tested it ?
Otherwise, there is a solution for cooling and boosting your dragonboard’s performance, I think: https://www.element14.com/community/community/designcenter/single-board-computers/blog/2016/02/01/cooling-the-dragonboard-410c-and-ifc6410p. what do you think about it ?
Can you test supertuxkart and tell us if it works well ? 🙂
@gouchi
I’ve built it but it won’t show in the list of cores.
@Beta-Pictoris
Yes, I had already tried that image, but it would not boot at all.
That’s hack has a massive heatsink, even bigger than the board. 🙂
I’ve moved on to other boards right now, so I’m not sure when I’ll be able to do further tests.
@Jean-Luc Aufranc (CNXSoft)
The default path for the cores is ~/.config/retroarch/cores so you need to copy testgl_libretro.so to this path. You can load it with Load Core then start it with Start Core.
@Jean-Luc Aufranc (CNXSoft) Can you, please, check if there are any OpenCL libs on the fs? Something along:
ldconfig -p | grep OpenCL
@blu
Nothing.
@gouchi
All I get is a black window with the title “RetroArch TestCore GL v1”.
@Beta-Pictoris
I’ve installed SuperTuxKart, and it was quite playable, quite smoother than TuxRacer.
@Jean-Luc Aufranc (CNXSoft) Thanks. Oh well, some day.. Baby steps.
@Jean-Luc Aufranc (CNXSoft)
Can you try to launch it with :
retroarch –verbose -L ~/.config/retroarch/cores/testgl_libretro.so > /tmp/log.txt 2>&1
And paste the log.txt to hastebin ?
Thank you very much for your tests.
@Jean-Luc Aufranc (CNXSoft)
Ok, thanks.
It seems Raspberry pi 3 could be used as mini-pc: http://www.pcworld.com/article/3057888/computers/raspberry-pi-3-review-the-revolutionary-35-mini-pc-cures-its-biggest-headaches.html
Do you think the same think for dragonboard ?
@Beta-Pictoris
Both boards have about the same performance, so if RPi 3 is acceptable as a mini Desktop PC to you, Dragonboard will be too.
If you are used to faster machines, the user experience may still be frustrating at times.
Has anyone gotten gamepads/joysticks to work on the Dragonboard? I’m porting my SmartGear multi-system emulator to it and the code runs fine, but the system won’t recognize any USB gamepads or bluetooth gamepads. If someone would like to test my game emulator, please let me know ([email protected]
@Larry Bank
Enabling joystick support is often just a matter of enabling drivers in the kernel. The post http://www.cnx-software.com/2012/09/11/building-kernel-modules-for-allwinner-a10-devices-android/ might help as it shows a list of drivers to enable for joystick support. It was written in 2012, so there might be newer drivers to enable for more recent joysticks but it should give an idea of what to do.
Kodi on DragonBoard 410c -> http://www.96boards.org/project/kodidragonboard/
No source code updates for nearly a year though.
How OTA is generated and how to update the device to latest software ??