Ubuntu Xenial for i.MX6/7 boards – August 2016 (kernel 4.1.15)

Published on August 3, 2016

Archived Notice

This article has been archived and may contain broken links, photos and out-of-date information. If you have any questions, please Contact Us.


Ubuntu Xenial 16.04 - Mate desktop

At last the new Long Term Support Ubuntu has arrived. It's full name Ubuntu Xenial Xerus 16.04 LTS, it will be supported for 5 years by Canonical (till April 2021). This time we created a MATE desktop, not an LXDE one. This desktop is very similar to the old but beloved and very popular Gnome2 . And of course we added a console image also, for those who don't need GUI desktop, but a headless server or console application. These systems contain NXP/Freescale licensed content, so you will need to register on our web-site and log in before you can accept the license agreement and download the images from here:

Update#1 :

Update#2 :

Important !

Before installing this image please check your U-Boot version. The 4.1.15 kernel requires U-Boot version 2015.07 or higher, version 2016.03 is recommended. With this U-Boot you can use the new USB Mass Storage Gadget to program the eMMC.

Tipp: If you want more free space on the console image's SD card, you can uninstall demos anytime, they take lot of space :

$ sudo apt-get purge imx-gpu-sdk-x8-fb $ sudo apt-get purge imx-gpu-viv-x8-test

Programming the image

The image is a slightly-less-than-4GiB image file containing the partition table.  Inspired by ubuntu-mate.org, I changed over from dd to another disk copy program called ddrescue. Its much more talkative program, although dd does do it's job honestly, I don't like mute programs, you never know whats happening in the given moment. For example if you want to create an SD card for a console image, you need to do the following :

$ sudo apt-get install gddrescue xz-utils util-linux $ unxz 20160802-nitrogen-4.1.15_1.2.0_ga-xenial-en_US-console_armhf.img.xz $ sudo ddrescue -D --force 20160802-nitrogen-4.1.15_1.2.0_ga-xenial-en_US-console_armhf.img /dev/sdX

You have to replace sdX with your actual SDHC reader/writer device. Use the lsblk command to check it.

At 1:10 I typed lsblk command with unplugged SDHC reader, then I plugged it in, and at 1:15 I checked again. A new node was added , sdg , obviously that was my SDHC reader/writer device.

Usernames and passwords

Two users are defined for use on the system: ubuntu and root. The password for each is Boundary (capital B).

An ssh server is configured on the system, though it does not allow password-based authentication for user root.

User ubuntu has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :

ubuntu@nitrogen:~$ sudo mkdir /root/.ssh [sudo] password for ubuntu: ubuntu@nitrogen:~$ sudo nano /root/.ssh/authorized_keys ... paste content of $HOME/.ssh/id_rsa.pub here ubuntu@nitrogen:~$ sudo chmod 600 /root/.ssh/auth* ubuntu@nitrogen:~$ sudo chmod 600 /root/.ssh/

What's supported

Since the images above include our stable 4.1.15 kernel, essentially everything is supported including Vivante GPU and C&M VPU accelerations, Wi-Fi and Bluetooth modules (Tiwi BLE, Murata, BD_BCOM ), all of our storage devices (SDHC card, eMMC, SATA, USB sticks, cell modems) and all of our supported touch panels, OV56xx cameras, Toshiba BD-HDMI-MIPI converter. It supports i.MX6Q/DL/SX and i.MX7D boards.

The packaging (inluding kernel) is done in the normal debian way, so apt-get update/dist-upgrade will keep your image up and running the latest as patches come out.

What's new in this release

  • The Linux kernel was upgraded to 4.1.15 ( meta-package name: linux-boundary-12x )
  • GPU driver was upgraded to Vivante 5.0.11p7.4 ( meta-package name: imx-gpu-viv-x8-... ). Unfortunately this is not the latest driver, because the latest one had some problems with chromium-browser. I preferred stability, I'll upgrade this later when all the problems were eliminated for sure.
  • The module galcore (CONFIG_MXC_GPU_VIV) was removed from the kernel, and it's an externally built module. This change makes the graphics sytem modular, and more upgradable, at the price of longer kernel upgrading time. Upgrading kernel takes about 3-4 minutes now, instead of 30 seconds, because every kernel upgrade rebuilds the galcore driver from sources, because its a DKMS module.
  • The package gstreamer-imx was upgraded to 0.12.2
  • The new NXP/Vivante GPU SDK was added : imx-gpu-sdk 2.2.2 . You can get the source with the usual apt-get source command.
  • The distribution was upgraded to the new Xenial Xerus. Here are some main component versions :
    • Xorg server 1.18.3
    • gstreamer1.0 1.8.2
    • bluez 5.37
    • Qt5 5.5.1
    • apt 1.2.12
    • chromium-browser 48.0.2564.82
    • dpkg 1.18.4
    • gcc/g++ 5.4.0
    • firefox 47.0
    • libwayland 1.9.0
    • MATE Desktop Environment 1.14.1
  • The package gst1.0-fsl-plugins was removed by default (still installable), the better gstreamer-imx replaces it.
  • The previous Ubuntu Trusty used upstart init daemon, while the new one uses systemd init system. This is quite significant change, Xenial is similar to Debian Jessie now. The consequence of this change : developers must port their upstart scripts (/etc/init) to systemd services/targets or at least to sysv init scripts. Because fortunately Xenial still runs the sysv init scripts (/etc/init.d). After all, systemd is a better system indeed and it seems it becomes a standard init system. I know this is not a solace for those who must port their init scripts to sysv/systemd. The services must be started stopped by systemctl command, and the journalctl command replaces dmesg.

Let's see some interesting new options. This is a screen of the new imx-gpu-sdk :

IMX GPU SDK 2.2.2 Gaussian Blur demo

You can find many intersting samples in the SDK, including GLESv2, GLESv3, OpenVG.

The new Qt5  5.5.1 has much more options than the Trusty's 5.2.1, this is a Qml example :

Qt 5.5.1 QML Video Fx demo

You can apply various effects on a playing video and/or recording camera screen . Of course source is available.

Chromium browser nicely supports WebGL , although its not the fastest thing what I've ever seen. But this board is not a game computer, and WebGL could help a lot to realize some tasks. This is an example from the web:

Chromium WebGL demo

At last the Qt5 allround demo was added also : 

Qt 5.5.1 QtDemo

This program demonstartes all the major blocks of Qt5

Since bluez is now version 5.37, you can use the command line tool bluetoothctl to control bluetooth dameon, and create connections, pair up with nearby devices. This tool was introduced in Debian Jessie first:

ubuntu@nitrogen:~$ sudo bluetoothctl [NEW] Controller 84:DD:20:DA:B1:8F Nitrogen6_max TiWi-BLE [default] [bluetooth]# scan on Discovery started [CHG] Controller 84:DD:20:DA:B1:8F Discovering: yes [NEW] Device 0C:1D:AF:A2:E3:78 Redmi [bluetooth]# info 0C:1D:AF:A2:E3:78 Device 0C:1D:AF:A2:E3:78 Name: Redmi Alias: Redmi Class: 0x5a020c Icon: phone Paired: no Trusted: no Blocked: no Connected: no LegacyPairing: no UUID: OBEX Object Push (00001105-0000-1000-8000-00805f9b34fb) UUID: Audio Source (0000110a-0000-1000-8000-00805f9b34fb) UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb) UUID: Headset AG (00001112-0000-1000-8000-00805f9b34fb) UUID: PANU (00001115-0000-1000-8000-00805f9b34fb) UUID: NAP (00001116-0000-1000-8000-00805f9b34fb) UUID: Handsfree Audio Gateway (0000111f-0000-1000-8000-00805f9b34fb) UUID: Phonebook Access Server (0000112f-0000-1000-8000-00805f9b34fb) UUID: PnP Information (00001200-0000-1000-8000-00805f9b34fb) UUID: Message Access Server (00001132-0000-1000-8000-00805f9b34fb) RSSI: -66 [bluetooth]# pair 0C:1D:AF:A2:E3:78 Attempting to pair with 0C:1D:AF:A2:E3:78 [CHG] Device 0C:1D:AF:A2:E3:78 Connected: yes [CHG] Device 0C:1D:AF:A2:E3:78 Modalias: bluetooth:v001Dp1200d1436 [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001105-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001112-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001116-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001132-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001200-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001800-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 UUIDs: 00001801-0000-1000-8000-00805f9b34fb [CHG] Device 0C:1D:AF:A2:E3:78 Paired: yes Pairing successful [bluetooth]# exit [DEL] Controller 84:DD:20:DA:B1:8F Nitrogen6_max TiWi-BLE [default] ubuntu@nitrogen:~$

Of course you can use the GUI bluetooth tools as well when you are in the MATE desktop.

GPU development libraries

The package imx-gpu-viv-x8-dev ( development headers and libraries for OpenGL / ESv2 / ESv3 / Khronos / OpenVG / OpenCL /G2D ) is installed by default. You have to set the headers path, before any other headers, or you might include the mesa headers first, and you don't want to do that. For example :

export CFLAGS="-I/usr/include/vivante ${CFLAGS}"

and you have to set the library path as well :

export LDFLAGS="-L/usr/lib/arm-linux-gnueabihf/vivante ${LDFLAGS}"




As always, please give us some feedback and let us know how things work for you.