Yocto Zeus Release for i.MX6/i.MX7 Platforms

Published on April 10, 2020

We are pleased to announce a new Yocto release Zeus for our Nitrogen6/7 family of SBC and SOMS based on i.MX6/7 processors. Below you will find the download link for the images as well as detailed instructions for the build including a features set.

For the Impatient

You can download the Yocto images from here:

We also provide a Nitrogen6x X11 image to see if there's still traction for it. Let us know if you need it for another platform.

Update 20200622 changelog:
  • Updated to latest qcacld-2.0 driver and qca-firmware
  • Disabled auto bringup of p2p0 in Network Manager which was causing WiFi connection issues
Update 20200514 changelog:
  • Added support for Bluetooth audio streaming
  • Added miscellaneous useful packages
  • Updated to latest qcacld-2.0 driver and qca-firmware (most notably to support BT 5.0)

As usual, you'll need to register on our site and agree to the EULA because it contains NXP content.

How to Burn

You can program the SW to eMMC using the instructions below: programming-emmc-on-i-mx6/7 You can also program the SW to SD Card or USB Stick via zcat and dd under Linux:

~$ zcat *boundary-image*.wic.gz | sudo dd of=/dev/sdX bs=1M
In addition, you can use the balenaEtcher utility to flash the eMMC, SD Card or USB stick via Windows or Linux: balenaEtcher

Build procedure

This image uses the zeus branch of our boundary-bsp-platform repository. To build the image, we recommend using a Docker Container so that you can build with a reproducible and stable build environment. Otherwise, you’ll need these packages installed as well as this repo tool that can be installed like this:

~$ sudo apt-get install repo
Then create your build directory and initialize everything.
~$ mkdir ~/yocto-zeus && cd yocto-zeus
~/yocto-zeus$ repo init -u https://github.com/boundarydevices/boundary-bsp-platform -b zeus
~/yocto-zeus$ repo sync
Next, setup the environment for building. In this image, we will be building our boundary-wayland distro for the target machine
~/yocto-zeus$ MACHINE=<MACHINE> DISTRO=boundary-wayland . setup-environment build
Now bitbake boundary-image-multimedia-full which is equivalent to fsl-image-multimedia-full with Boundary-specific packages such as BD-SDMAC support.
~/yocto-zeus/build$ bitbake boundary-image-multimedia-full
After some time this should build the same image as above, with the layers being at commits as per the time when repo sync was executed. If you are interested in each project revision at the time of the build, you can find a frozen manifest for those images here. The image file will deploy to tmp/deploy/images/{MACHINE}/boundary-image-multimedia-full-{MACHINE}.wic.gz.

Build procedure for X11 based Nitrogen6x image

As mentioned, we also offer an X11 based build for Nitrogen6x. Simply follow the above procedure up until repo sync, but instead setup the build as follows: The only difference is we now will be building boundary-eval-image for nitrogen6x with the fslc-x11 distro instead:

~/yocto-zeus$ MACHINE=nitrogen6x DISTRO=fslc-x11 . setup-environment boundary-eval-image
Now bitbake boundary-eval-image which is basically core-image-sato-dev with Boundary-specific packages added such as BD-SDMAC support.
~/yocto-zeus/boundary-eval-image$ bitbake boundary-image-multimedia-full
After some time this should build the same image as above. The image file will deploy to tmp/deploy/images/{MACHINE}/boundary-eval-image-{MACHINE}.wic.gz.

Features List

The images built above contains the following components:

  • Weston 5.0.0 for i.MX
  • GStreamer1.0 1.16.1
  • GPU Vivante libraries 6.2.4p4.0
  • VPU libraries 5.4.38
  • Firmware-imx 8.1.1
  • qcacld-2.0 Wi-Fi driver for BD-SDMAC
  • BlueZ 5.50 with support for BD-SDMAC

The next sub-sections will describe how to test most features.

GPU acceleration

In order to test the GPU, you can either use the standard Weston EGL programs or the ones provided by Vivante. Here are a few examples:

root@<MACHINE>:~# weston-simple-egl &
root@<MACHINE>:~# cd /opt/viv_samples/vdk/
root@<MACHINE>:/opt/viv_samples/vdk# ./tutorial7

Nitrogen8M GPU

Camera input

Camera MIPI-CSI input can be checked using our Nit6X_5MP_MIPI with GStreamer:

root@<MACHINE>:~# gst-launch-1.0 imxv4l2videosrc device=/dev/video1 ! autovideosink;

nitrogen8m-camera

VPU decoding

Here is an example using GPlay tool:

root@<MACHINE>:~# wget http://linode.boundarydevices.com/videos/Hobbit-1080p.mov
root@<MACHINE>:~# gst-launch-1.0 playbin uri=file:///home/root/Hobbit-1080p.mov video-sink=imxipuvideosink

VPU encoding

Here is an example using gstreamer:

root@<MACHINE>:~# gst-launch-1.0 imxv4l2videosrc device=/dev/video1 ! imxvpuenc_h264 bitrate=10000 ! filesink location=test.mp4

Ethernet

Once the eth0 interface is up, you can use iperf3 to check Ethernet performances:

root@<MACHINE>:~# iperf3 -c 192.168.1.60                                                                                                                         
Connecting to host 192.168.1.60, port 5201
[  5] local 192.168.1.13 port 32880 connected to 192.168.1.60 port 5201
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.00  sec  1.09 GBytes   938 Mbits/sec    0             sender
[  5]   0.00-10.04  sec  1.09 GBytes   932 Mbits/sec                  receiver

Wi-Fi

Same goes for the Wi-Fi that can be tested just as easily:

root@<MACHINE>:~# nmcli d wifi connect <network_name> password <password>
root@<MACHINE>:~# iw wlan0 link
Connected to a4:3e:51:08:54:f6 (on wlan0)
        SSID: Jabu_5GHz
        freq: 5240
        RX: 3243 bytes (31 packets)
        TX: 9117 bytes (48 packets)
        signal: -79 dBm
        tx bitrate: 15.0 MBit/s MCS 0 40MHz short GI
root@nitrogen8mm:~# ping google.com -Iwlan0                                                                                                                       
PING google.com (216.58.198.206): 56 data bytes
64 bytes from 216.58.198.206: seq=0 ttl=55 time=3.470 ms
...

Bluetooth

For products with a Silex bluetooth module, you'll be able to connect using our handy silex-uart script with the following commands:

root@<MACHINE>:~# /usr/share/silex-uart/silex-uart.sh start
Starting silex-uart
rfkill on/off cycle.
silex found
root@<MACHINE>:~# hciconfig hci0 up
root@<MACHINE>:~# hcitool scan
Scanning ...
11:22:DE:AD:BE:EF    Some Device

CAN

CAN is supported on Nitrogen6 MAX. You'll be able to bring up the interface using these commands:
root@<MACHINE>:~# ip link set can0 up type can bitrate 500000
root@<MACHINE>:~# ifconfig can0 up

From this point, you can use commands such as cansend and candump to send or display messages on the bus respectively.

Chromium (X11 Only)

Chromium-x11 version chromium-x11_80.0.3987.132:   If you have any issues, please email support@boundarydevices.com