After testing ODROID-XU3 Lite with Android 4.4, and finding a workaround to some HDMI issues, I could finally try out Ubuntu, or rather Lubuntu with LXDE instead of Unity, in Hardkernel low cost octa-core development board. I’ll start this review by explaining how to install and setup Lubuntu on the board, followed by running various program to test the system usability as a desktop computer with LibreOffice, Chromium, XBMC, and 3D graphics, and finally run some performance tests with Phoronix Test Suit, build the Linux kernel natively, and transcode a video with avconf.
Setting Up Ubuntu on ODROID-XU3 Lite
All firmware images for ODROID development boards, can be found on odroid.in website, and if you want Ubuntu 14.04 image, go to ubuntu_14.04lts folder, to select the latest firmware file for your board. The latest image for ODROID-XU3 (Lite) is currently ubuntu-14.04.1lts-lubuntu-odroid-xu3-20141105.img.xz, it’s the same for micro SD card or eMMC boot. You should have gotten a eMMC to micro SD adapter if you’ve purchased an eMMC module from Hardkernel.
You can download, extract, and flash the image with dd (Linux) or Win32DiskImager (Windows). For example. in a terminal in a Linux computer:
1 2 3 4 |
wget http://odroid.in/ubuntu_14.04lts/ubuntu-14.04.1lts-lubuntu-odroid-xu3-20141105.img.xz sudo apt-get install xz pv xz -d ubuntu-14.04.1lts-lubuntu-odroid-xu3-20141105.img.xz dd if=ubuntu-14.04.1lts-lubuntu-odroid-xu3-20141105.img | pv | sudo dd of=/dev/sdX |
Where X is the letter of your micro SD or eMMC module inserted into your computer. Check the value carefully with lsblk before running the dd command, or you may lose your data stored on other drives connected to your computer,. For extra safety, you could also consider doing this procedure in a virtual machine, for example by running Ubuntu in VirtualBox.
Now insert the micro SD card or connect the eMMC module to the board, and you configure the boot switch between the Ethernet and USB ports as shown below using a pen or tweezers. For eMMC both must be in high position, whereas for SD card boot one must be down.
Now connect a keyboard, mouse, the HDMI cable, Ethernet, and/or other peripherals you may want to connect and power up the board by connecting the provided 5V/4A power supply. A typical boot should complete in around 22 seconds, although the first boot might take a little longer.
A this stage, the installation is nearly complete, and you should already have a usable system, however, if you’ll see that the rootfs partition is only 4.9GB with 310 MB available (that’s after installing LibreOffice):
1 2 3 |
df -h Filesystem Size Used Avail Use% Mounted on /dev/mmcblk0p2 4.9G 4.4G 310M 94% / |
Since my eMMC module has a capacity of 16GB, it would be nice to use all of it. Normally, you’d use fdisk/parted, and resize2fs to get the full size, but Hardkernel provides ODROID Utility that can do just that among others. So click on the icon on the top right to launch the program, input the password (odroid), and after running apt-get update automatically, the following interface should appear.
Click on Resize your root partition, and after making sure the root partition is in /dev/mmcblkp2, click <Yes> to continue and resize the root partition on your micro SD card or eMMC module. After a reboot, you can check all the available storage in a terminal:
1 2 3 |
df -h Filesystem Size Used Avail Use% Mounted on /dev/mmcblk0p2 15G 4.4G 9.4G 32% / |
9.4GB available out of a 15GB partition. Perfect! The setup is now complete.
Using ODROID-XU3 Lite as a Desktop Computer / Media Player
The Ubuntu image comes pre-loaded with Firefox, Chromium, Transmission, Arduino IDE, Abiword, PacmanFM, XBMC and a few others programs. Since they probably wanted to keep the image reasonably small, they did not install large program, but I install LibreOffice for a better office suite, and Nautilus for a file manager with Network Shares access:
1 |
sudo apt-get install libreoffice nautilus |
The system is extremely responsive, and if you’re using a computer with a mechanical drive, ODROID-XU3 Lite will boot and load programs much faster than your full-blown Intel/AMD computer.
The best way to showcase ODROID-XU3 (Lite) capabilities is to shoot a video, so I’ve just done that showing:
- 20 seconds boot
- ODROID Utility options
- List of installed applications
- LibreOffice (Writer)
- Chromium – Multi-tabs, YouTube (embedded / full screen; VP9 / H.264/AVC1), and Candy Crush Saga (Flash game) in Facebook
- 3D hardware acceleration with es2gears
- XBMC Media Player with 2D/3D OpenGL ES and hardware video decoding.
- Power off
I’ve also opened a terminal running htop to show the eight cores CPU usage during these tests.
Side note: Since my camera (Canon Powershot A2300 HD) is pretty poor at shooting videos of screens, I’ve used SJ1000 action camera instead as the image is much sharper, but there’s a fisheye effect due to the wider angle of such camera. There are some tools in Linux including Python scripts and KDEnlive that can remove the fishing effect, but they introduce some aliasing, which does not look nice in this type of video, although it’s probably acceptable for content without text or thin lines.
Based on these tests, ODROID-XU3 Lite can be used as a desktop replacement or an XBMC media center, but you have to be aware of some limitations:
- YouTube embedded videos play usually well, and 360p/480p full screen video play quite well, but the user experience is not very good with 1080p full screen videos, either with VP9 or H.264 codec.
- Adobe Flash is not pre-installed, but in Chromium, it should be quite easy to install libpepperflash.so to enable Flash support. I have not tried, but normally, flash performance on ARM is rather subpar compared to x86.
- The window manager may not be hardware accelerated with the GPU.
For all other uses, ODROID-XU3 Lite is clearly the best ARM Linux platform, I’ve tried so far, with a fast eMMC, 2D/3D hardware accelerated graphics (for apps that support OpenGL ES only), and hardware video decoding.
Other Use Cases and Performance
Before starting some benchmarks, I’ll check what type of Exynos 5422 I have in my system:
1 2 |
root@odroid:~# dmesg | grep BIN [ 0.355271] [c6] CPU Info : Samsung Exynos5422 Soc is BIN2 |
BIN1 is for the Exynos 5422 processor clocked up to 2.2 GHz found in ODROID-XU3 board, and BIN2 is limited to 1.8 GHz, and normally found in the Lite version of the board which I’m reviewing right now.
Phoronix Suite Benchmarks
Antutu is the most famous benchmark in Android, but in Linux, Phoronix Test Suite is the reference. It’s a bit more complicated to use than Antutu, but more flexible, and thorough.
1 2 3 |
sudo apt-get install php5-cli php5-gd php5-gd wget http://phoronix-test-suite.com/releases/repo/pts.debian/files/phoronix-test-suite_5.4.0_all.deb sudo dpkg -i phoronix-test-suite_5.4.0_all.deb |
After apt-get install,. I had to run “sudo apt-get install -f” to complete the installation.
Than I’ve followed the instructions here, and selected four tests from the suite to test audio encoding, multi-core file compression, server, and disk I/Os:
1 |
phoronix-test-suite batch-benchmark pts/encode-mp3 pts/compress-7zip pts/apache pts/iozone |
It turns out the iozone test for disk I/O takes nearly five hours, and recently my computer tends to turn off randomly, and since I started the test from an ssh console, the test got interrupted, so I only ran encode-mp3, compress-7zip, and apache benchmarks which last only about 15 minutes in total.
Out of the three test, compress-7zip failed because of a lack of memory:
1 2 |
[c4] Out of memory: Kill process 9593 d [16693.088181] [c4] Killed process 9593 (7za) total-vm:1844536kB, anon-rss:1509B |
So the whole Phoronix benchmarks did not exactly work out as expected, but you can find the result for MP3 encoding and Apache tests @ http://openbenchmarking.org/result/1412146-LI-20141214131
I’ve compared the ODROID-XU3 Lite results to some recent results on Openbenchmarking website including an Intel Core i3-4150 quad core system (cpu-ubuntu), an older Intel Atom N570 system (2G), and Radxa Pro board powered by Rockchip RK3188 processor. So Exynos 5422 can’t match a recent Core i3 processor yet (which by itself costs more than ODROID-XU3 Lite board), but does well against N570 netbook processor, and is about twice as fast as Radxa Rock Pro board in these two tests.
Mainline kernel compilation
People may want to use this powerful low cost Octa core board in build farm, so I though it would be fun to try building Linux mainline kernel natively. Let’s installing dependencies, and get the source latest Linux release (3.18) first.
1 2 3 4 |
sudo apt-get install libncurses5-dev gcc make git exuberant-ctags git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git cd linux-stable git checkout -b stable v3.18 |
Ubuntu 14.04 comes with gcc 4.8.2 only, but this compiler will break Linux mainline build, so I had to install gcc 4.9 instead:
1 2 3 |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-4.9 |
You’ll also note some ODROID boards are already part of mainline, probably with partial support, but unfortunately ODROID-XU3 (Lite) kernel has not been upstreamed yet.
1 2 3 4 5 |
root@odroid:~/linux-stable# ls -l arch/arm/boot/dts | grep odr -rw-r--r-- 1 root root 8334 Dec 14 14:11 exynos4412-odroid-common.dtsi -rw-r--r-- 1 root root 1310 Dec 14 14:11 exynos4412-odroidu3.dts -rw-r--r-- 1 root root 829 Dec 14 14:11 exynos4412-odroidx2.dts -rw-r--r-- 1 root root 1691 Dec 14 14:11 exynos4412-odroidx.dts |
Anyway, let’s build the kernel for Exynos processor, and see how fast the board can compile a Linux kernel:
1 2 3 4 5 6 |
make exynos_defconfig time make -j8 CC=gcc-4.9 ... real 5m43.746s user 31m25.235s sys 4m11.130s |
So it takes less than 6 minutes to build the kernel on ODROID-XU3 Lite, about 4 times longer than on a powerful, but much more power hungry (300W) AMD FX8350 based computer. In other words, it should be possible to achieve the same performance as my computer using 4 or 5 ODROID-XU3 Lite boards in a mini build farm using distcc compilation for about the same price, but only a fraction of the power consumption, and of course native compilation has advantages over cross-compilation, since some tests may have to be skipped for the latter.
Video Transcoding with avconv
Finally, one follower on G+ asked me to test MPEG2 to H.264 video transcoding with ffmpeg. The latter does not seem to be available, and as been replaced by avconc, so I installed libav-tools instead, and ran the transcoding.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
sudo apt-get install libav-tools time avconv -i big_buck_bunny_1080p_MPEG2_MP2_25fps_6600K.MPG \ -vcodec libx264 -minrate 300k -maxrate 300k -bufsize 1835k bbb-h.264.avi avconv version 9.16-6:9.16-0ubuntu0.14.04.1, Copyright (c) 2000-2014 the Libav s built on Aug 10 2014 18:32:09 with gcc 4.8 (Ubuntu/Linaro 4.8.2-19ubuntu1) Guessed Channel Layout for Input Stream #0.1 : stereo Input #0, mpeg, from 'big_buck_bunny_1080p_MPEG2_MP2_25fps_6600K.MPG': Duration: 00:00:44.74, start: 0.240000, bitrate: 7159 kb/s Stream #0.0[0x1e0]: Video: mpeg2video (Main), yuv420p, 1920x1080 [PAR 1:1 Dc Stream #0.1[0x1c0]: Audio: mp2, 44100 Hz, stereo, s16p, 160 kb/s [libx264 @ 0x6c9c0] using SAR=1/1 [libx264 @ 0x6c9c0] MB rate (734400000) > level limit (2073600) [libx264 @ 0x6c9c0] using cpu capabilities: ARMv6 NEON [libx264 @ 0x6c9c0] profile High, level 5.2 Output #0, avi, to 'bbb-h.264.avi': Metadata: ISFT : Lavf54.20.4 Stream #0.0: Video: libx264, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=-1--1c Stream #0.1: Audio: libmp3lame, 44100 Hz, stereo, s16p Stream mapping: Stream #0:0 -> #0:0 (mpeg2video -> libx264) Stream #0:1 -> #0:1 (mp2 -> libmp3lame) Press ctrl-c to stop encoding frame= 1035 fps= 8 q=55.0 size= 30701kB time=40.52 bitrate=6206.7kbits/s |
It took 2 minutes 31 seconds to encode a 44 seconds video, so real-time 1080p video transcoding is currently not feasible with avconv / ffmpeg.
Have said that, Exynos 5422 supports video decoding and encoding, so it should be possible to write a program using the MFC (Multi-Format Codec) driver for Exynos. I could not find any sample code, but having a look a XBMC source code for ODROID boards might be a start, since it’s using the MFC drivers for decoding.
ODROID-XU3 Lite can be purchased directly from Hardkernel for $99 + shipping, or through distributors like Ameridroid (USA) or Pollin Electronics (Germany). Adding an eMMC module, an HDMI cable, and the serial debug board to your order is recommended, although you could replace the eMMC with a fast micro SD card (class 10 or greater) for a still decent performance.
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
Cool stuff, did you try with the Performance governor?
As all ARM arch chips seems to have a delay (in the ms range) when it changes frequencies/voltages, that has a large effect on pretty much everything.
@anon
I did not mess with the governor, but it’s already set to performance.
Actual new Hardkernel Odroid Devices arn’t available at pollin.de for the last months….
wondering about it… and very bad thing in Front of chrismas…
Well done. Then now we can replace Android with Linux as daily OS connected to TV ? This is your suggestion ? Or Linux is better for a desk like Windows ?
Did you do any reviews of nVidia’s Jetson-TK1? I’m very curious how this performs compared to it on Linux.
Thank you very much for a great and detailed review. I will ask Santa to get one for Christmas 🙂
using -preset superfast (or one of the other faster presets) in the line above would get you a lot faster encode at the expense of quality OC, and using mp4 container and aac audio as the output is far more usual for generic playback on android devices OC as aac is very limited on current hw assisted lit today…. on x86 i use something like this ———————- for f in *.mkv do name=echo "$f" | sed -e "s/.mp4$//g" ./ffmpeg -threads 0 -i “$f” -f mp4 -vcodec libx264 -crf 16 -minrate 800k -maxrate 1800k -bufsize 1800k -refs 3 -preset slow -vprofile… Read more »
oops i missed #!/bin/bash at the top of the script, doh! —— #!/bin/bash for f in *.mkv do name=echo “$f” | sed -e “s/.mp4$//g” ./avconv -threads 0 -i “$f” -f mp4 -vcodec libx264 -crf 16 -minrate 1800k -maxrate 1800k -bufsize 1800k -refs 3 -preset superfast -vprofile high -strict -2 -acodec aac -ac 2 -ab 192k -vf yadif,gradfun,hqdn3d,unsharp=5:5:0.5 “$name.MP4″ done pause ——————————– put this mp4-encode.script in a dir with the standalone avconv and some mkv files to encode, click the mp4-encode.script scipt and wait till its finished…. you can also remove the vf filters if you want to make it slightly… Read more »
The Jetson TK1 got full HW acceleration up to 4K videos:
http://tuomas.kulve.fi/blog/2014/09/18/xbmc-for-tegra-with-full-hw-acceleration/
Some review on the Jetson TK1:
http://bitkistl.blogspot.co.at/2014/03/evaluating-jetson-tk1-board.html
@mark
If you just use XBMC, then you could also use Linux. However, if you plan on watching online videos such as YouTube, Android will be better. I think it’s also possible to watch YouTube with XBMC plugins, in that case it might be OK.
@xcore
I’ve tried the following command, but it’s still encoding at 8 fps:
avconv -i big_buck_bunny_1080p_MPEG2_MP2_25fps_6600K.MPG -preset superfast \
-vcodec libx264 -minrate 300k -maxrate 300k -bufsize 1835k bbb-h.264.avi
Competition to win an ODROID-XU3 board (the full version with Display Port):
https://plus.google.com/u/0/102407583165771869503/posts/Xqyen3LX6yz
i looked at ali and geek for emmc module and found nothing is it called something else or do we have to buy it from hardkernel
@adem
If you want an eMMC module, better buy from Hardkernel, and you’ll also get a micro SD card adapter for the module making it easier to flash the firmware to the card. I don’t think eMMC module are standard parts, but maybe I’m wrong.
Hi! Can you test webrtc video encoding with this board?
i mean chat with your PC or at least broadcast to your PC using chrome and webrtc?
here’s sample WebRTC link: https://www.webrtc-experiment.com/broadcast/
And thanks a lot for the review 🙂
@Roman
I’ll test a bit later. Note to oneself: works in Chrome, but not Firefox…