2016-05-06

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:

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:

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:

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:

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:

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

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.



Click to Original Size

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:

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

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:

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:

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

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.
[embedded content]

DragonBoard 410c Linux Benchmarks

Let’s install the latest version of Phoronix…

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.



Click to Enlarge

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

Tweet 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…

Show more