We’ve received many requests for Yocto support on our Nitrogen8M Mini SBC based on the i.MX8M MINI processor. Below you will find the download link for the image as well as detailed instructions for the build including a features set.
For the Impatient
You can download the Yocto image from here:
As usual, you’ll need to register on our site and agree to the EULA because it contains NXP content.
The image is a SD card image that can be restored using zcat and dd under Linux.
~$ zcat *boundary-image*.wic.gz | sudo dd of=/dev/sdX bs=1M
For Windows users, please use Alex Page’s USB Image Tool.
This image uses the thud branch of our boundary-bsp-platform repository.
This is mostly a clone of fsl-community-bsp-platform with meta-boundary added in.
To build the image, 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-imx8m && cd yocto-imx8mm ~/yocto-imx8mm$ repo init -u http://github.com/boundarydevices/boundary-bsp-platform -b thud ~/yocto-imx8mm$ repo sync
Setup the environment for building, in this example we will be building our boundary-wayland distro for nitrogen8mm
~/yocto-imx8mm$ MACHINE=nitrogen8mm 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-imx8mm/build$ bitbake boundary-image-multimedia-full
After some time this should build the same image as above.
The image file will deploy to
The image built above contains the following components:
- GPU Vivante libraries 6.2.4p1.8
- VPU Hantro libraries v1.8.0
- GStreamer1.0 1.14.0 for i.MX
- Weston 4.0.0 for i.MX
- 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.
Please make sure your platform includes the latest U-Boot for i.MX8M MINI:
This version of U-Boot supports the display configuration, allowing to use any of the following displays:
- HDMI display (1080p)
- 7″ 1280×800 MIPI BD070LIC2_8M
- 8″ 1920×1200 MIPI BD080MCC1
- 10″ 1280×800 MIPI BD101LCC2_8M
Note that we’ve noticed that the NXP HDMI driver is picky when it comes to custom display timings (sometimes refuses to set the clock).
So if you are experiencing any issue with HDMI, please try entering the following commands in U-Boot in order to force the use of standard timings:
=> setenv cmd_custom 'setenv bootargs $bootargs drm_kms_helper.edid_firmware=HDMI-A-1:edid/1280x720.bin' => saveenv
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@nitrogen8mm:~# weston-simple-egl & root@nitrogen8mm:~# cd /opt/viv_samples/vdk/ root@nitrogen8mm:/opt/viv_samples/vdk# ./tutorial7
The i.MX8MM processor can decode videos with a resolution up to 1080p so here is an example using GPlay tool:
root@nitrogen8mm:~# wget http://linode.boundarydevices.com/videos/Hobbit-1080p.mov root@nitrogen8mm:~# gplay-1.0 Hobbit-1080p.mov
Camera MIPI-CSI input can be checked using our OV5640 MIPI with GStreamer:
root@nitrogen8mm:~# gst-launch-1.0 v4l2src device=/dev/video0 ! \ video/x-raw,width=1280,height=720 ! glimagesink
eth0 interface is up, you can use
iperf3 to check Ethernet performances:
root@nitrogen8mm:~# 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
Same goes for the Wi-Fi that can be tested just as easily:
root@nitrogen8mm:~# nmcli d wifi connect <network_name> password <password> root@nitrogen8mm:~# 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 (22.214.171.124): 56 data bytes 64 bytes from 126.96.36.199: seq=0 ttl=55 time=3.470 ms ...
For products with Bluetooth, you’ll be able to connect using these commands:
root@nitrogen8mm:~# echo 0 > /sys/class/rfkill/rfkill0/state root@nitrogen8mm:~# echo 1 > /sys/class/rfkill/rfkill0/state root@nitrogen8mm:~# hciattach /dev/ttymxc0 qca 3000000 -t30 flow Current Product ID : 0x00000008 Current Patch Version : 0x0111 Current ROM Build Version : 0x0302 Current SOC Version : 0x00000023 qca_soc_init: Rome Version (0x03020023) ==================================================== TLV Type : 0x1 Length : 33060 bytes Total Length : 32804 bytes Patch Data Length : 32780 bytes Signing Format Version : 0x1 Signature Algorithm : 0x2 Event Handling : 0x3 Reserved : 0x0 Product ID : 0x0008 Rom Build Version : 0x0302 Patch Version : 0x0114 Reserved : 0x8000 Patch Entry Address : 0x19b08 ==================================================== ==================================================== TLV Type : 0x2 Length : 1992 bytes Failed to open /etc/bluetooth/firmware.conf Ignoring invalid deep sleep config value Failed to open /etc/bluetooth/firmware.conf ==================================================== Device setup complete root@nitrogen8mm:~# echo 1 > /sys/class/rfkill/rfkill2/state root@nitrogen8mm:~# hciconfig hci0 up root@nitrogen8mm:~# hcitool scan Scanning ... 11:22:DE:AD:BE:EF Some Device
As usual, feel free to leave a comment below to share your experience.