For those of you who prefer Debian over Ubuntu, we’re glad to offer an updated Debian Jessie with the newest 4.1.15-2.0.0 kernel .
The same good old XFCE4 was used since it offers the best trade-off speed/size for Debian GUI desktop environment. As usual, a console image is also available for those who don’t need a GUI desktop.
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:
- 20161207-nitrogen-4.1.15_2.0.0_ga-jessie-en_US-xfce_armhf.img.gz
- 20161207-nitrogen-4.1.15_2.0.0_ga-jessie-en_US-console_armhf.img.gz
Update#1 :
- Update#1 Release Notes
- 20170620-nitrogen-4.1.15_2.0.0_ga-jessie-en_US-xfce_armhf.img.gz
- 20170620-nitrogen-4.1.15_2.0.0_ga-jessie-en_US-console_armhf.img.gz
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.
Tip: 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-j8-fb $ sudo apt-get purge imx-gpu-viv-j8-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. It is a much more talkative program, although dd does do it’s job honestly. I don’t like mute programs, you never know whats happening in a 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 $ gunzip 20161207-nitrogen-4.1.15_2.0.0_ga-jessie-en_US-console_armhf.img.gz $ sudo ddrescue -D --force 20161207-nitrogen-4.1.15_2.0.0_ga-jessie-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.
Type lsblk with unplugged SDHC reader, then insert the device, and type lsblk again. A new node will be added , that is your SDHC reader/writer device.
Usernames and passwords
Two users are defined for use on the system: debian 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 debian has sudo privileges, so you can place your ssh public key (normally $HOME/.ssh/id_rsa.pub) to the system like so :
debian@nitrogen:~$ sudo mkdir /root/.ssh [sudo] password for debian: debian@nitrogen:~$ sudo nano /root/.ssh/authorized_keys ... paste content of $HOME/.ssh/id_rsa.pub here debian@nitrogen:~$ sudo chmod 600 /root/.ssh/auth* debian@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 accelerations
- C&M VPU accelerations
- Wi-Fi and Bluetooth modules for Tiwi-BLE, Murata, BD_BCOM, QCA9377/Silex
- All kind of storage devices , SDHC card, eMMC, SATA hdd, USB pen sticks, cell modems
- All of our supported touch panels
- IMX Capture devices including OV56xx parallel and mipi cameras, Toshiba BD-HDMI-MIPI converter, UVC cameras
- It supports i.MX6Q/DL/SX and i.MX7D board’s BSP
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-12j )
- GPU driver was upgraded to Vivante 5.0.11p7.4 ( meta-package name: imx-gpu-viv-j8-… ). 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 system modular, and more upgradeable, 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.3
- 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 Jessie 8.6 . Here are some main component versions :
- Xorg server 1.16.4
- gstreamer1.0 1.4.4
- bluez 5.23
- Qt5 5.3.2
- apt 1.0.9.8.3
- chromium-browser 48.0.2564.82
- dpkg 1.17.27
- gcc/g++ 4.9.2
- firefox 45.5
- libwayland 1.6.0
- XFCE Desktop Environment 4.10.1
- The desktop icon structure is similar to Ubuntu now, the demo icons are grouped in the same way.
- Silex WiFi / Bluetooth is now supported in Jessie also, not only in Xenial.
Let’s see some interesting new demos, this is a screen of the imx-gpu-sdk OpenGLESv2 Blur demo, a spinning bubble with environment mapping:
You can find many other interesting samples in the SDK, including GLESv2, GLESv3, OpenVG.
This Qt5 Qml demo below shows how to apply various effects on a running video stream, using GPU shaders :
You can apply various effects on a playing video and/or recording camera screen . Source is available.
Chromium browser supports WebGL , although its not very fast, it could help a lot to realize some tasks. This is an example from the web:
We added a modified uvcview for better UVC camera support :
The above program shows the most popular HD C920 camera, but if someone is willing to spend more on a HDMI -> USB3.0 capture device, the result is even better, almost perfect, crystal clear 1080p video stream depending on the camera, for example Canon/Nikon/Sony DSLR’s or Sony Handycam. The 1920x1080p 30fps is still the barrier, the 4k video comes with the new i.MX8 SoC.
The command line tool bluetoothctl is the same as before, you can create connections, pair up with nearby devices. Just a reminder :
debian@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] debian@nitrogen:~$
Of course you can use the GUI bluetooth tools as well when you are in the XFCE desktop.
GPU development libraries
The package imx-gpu-viv-j8-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}"
Alternatively you can use the much more precise pkg-config way, in the makefile. Setting the flags in case of X11 system :
PKG_CONFIG_PATH = /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig
EGL :
CFLAGS += $(shell pkg-config --cflags egl_x11)
LDFLAGS += $(shell pkg-config --libs egl_x11)
GLESv1 :
CFLAGS += $(shell pkg-config --cflags glesv1_cm_x11)
LDFLAGS += $(shell pkg-config --libs glesv1_cm_x11)
GLESv2 :
CFLAGS += $(shell pkg-config --cflags glesv2_x11)
LDFLAGS += $(shell pkg-config --libs glesv2_x11)
OpenVG :
CFLAGS += $(shell pkg-config --cflags vg_x11)
LDFLAGS += $(shell pkg-config --libs vg_x11)
In case of FB backend change the _x11 postfix above to _fb, thats all.
OpenCL is the same at both fb and x11 :
CFLAGS += $(shell pkg-config --cflags opencl)
LDFLAGS += $(shell pkg-config --libs opencl)
Check the directory /usr/lib/arm-linux-gnueabihf/vivante/pkgconfig for more information
As always, please give us some feedback and let us know how things work for you.






Comments 9
I’m having an issue using the tun module with this image. It appears that the tun module is not available for loading or built into the kernel. For example, running the following command yields:
$ sudo modprobe tun
FATAL: Module tun not found
Is there a way to load the tun module? I’m attempting to use this image as an OpenVPN client and receive the following error upon connecting:
[…]
Wed Dec 14 10:54:47 2016 ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
Wed Dec 14 10:54:47 2016 Exiting due to fatal error
Author
Hi Curious,
I’m gonna upgrade kernel soon with the universal TUN driver, 1…2 days, please give me a little time.
Hi,
The Unit Test is missing from this image as far as I see. I went to “https://github.com/boundarydevices/imx-linux-test”. However I was not sure which branch to download. I would like to be able to compile the test project on my board also for further customisation and testing.
Please let me know. Thanks.
Author
Hi User,
The repository you linked is an android kernel repo, not linux kernel. It has only android branches. You can't run it on ubuntu/debian kernel.
Is there any source code of Unit Test for debian?
By the way, I tried to download the kernel to compile the modules for my testing. I have tried several methods to get the source codes:
from a link in FAQ: https://github.com/boundarydevices/linux-imx6/tree/boundary-imx_4.1.15_1.0.0_ga
and also I tried “apt-get source linux-image-$(uname -r)”
I can successfully make the “capture” module without any changes. However I cannot load the newly compiled module after removing the old one by “rmmod” command. I get “the invalid module format” error message.
I am not sure whether this helps or not but the only difference that I see with modinfo is in vermagic field (it is 4.1.15-11-boundary-12j for the original one. For my compile version it is “4.1.15”)
Could you please let me know whether I got the source properly or not?
Hi,
Actually the repo you are pointing to is for Android so I wouldn’t recommend using it (in case it includes Android specifics).
Instead, you should have a look at the Yocto recipe for this package:
https://github.com/Freescale/meta-freescale/blob/master/recipes-bsp/imx-test/imx-test.inc
This tells you that the latest version, for the latest 4.1.15_2.0.0 kernel is:
http://www.nxp.com/lgfiles/NMG/MAD/YOCTO/imx-test-5.7.tar.gz
Regards,
Gary
Hello,
I’m a bit stuck, trying to get the combination of an BD-SL-i.MX6 board and a NIT6X_5MP_MIPI camera module working. I’ve found the old (2013) MIPI camera support note, which points to the Wiki, but that doesn’t seem to go anywhere. Searching at the Wiki delivers a couple things (Like HDMI to MIPI) that aren’t helpful and the same article I started from. My end objective is to generate a capture-able h.264 AV stream that I can stream elsewhere.
Working somewhat from the old support note, I see both ov5642* and ov5640* kernel modules loaded. Does that mean I don’t have to “disable the ov5642 module and enable the ov5640 module? It looks like the ov5642 is bound to /dev/video0 and ov5640 is bound to /dev/video1. Is that correct? Is /dev/video1 going to be useful for me?
I’ve tried a few of the gstlaunch examples that I’ve found, but the examples seem to have bit-rotted a bit (changed names, etc). Is there a current example available that will give me a video stream of some sort?
Thanks,
Ken Aaker
Hi Ken,
Yes the old blog post about camera are now all outdated. Which is why we send people to the Wiki.
In your case, you want to make an app that streams video, so have a look at the “Application Development” section.
We just made the GStreamer section more obvious with direct examples of how to use the CSI/MIPI camera.
https://boundarydevices.com/wiki/application-development/
Regards,
Gary
Thanks for the information Gary, it’s starting to do something useful. Now I just have to finish figuring out the details.
Regards,
Ken