Yocto Mickledore Release for i.MX 8 Platforms
Published on August 9, 2023
We are pleased to announce a new Yocto release Mickledore for our Nitrogen8's family of SBCs and SOMs based on i.MX 8 processors. This release is based upon NXP 6.1.55_2.2.0 release and includes our latest 6.1 kernel, as well as support for our new Nitrogen8M Plus SMARC platform. Below you will find download links for the images as well as detailed instructions for building including a features set.
For the Impatient
You can download the Yocto images from here: Note that we now have support for sparse Fastboot Images!
- For Nitrogen8M platforms:
- For Nitrogen8M Mini platforms:
- For Nitrogen8M Plus platforms:
- For Nitrogen8ULP platforms:
- For Nitrogen93 platforms:
Update 20230926 changelog:
- Nitrogen8M Plus SMARC rev1 fixes.
Update 20231017 changelog:
- Nitrogen8ULP initial addition.
Update 20231108 changelog:
- Nitrogen8M Mini SMARC support.
Update 20231207 changelog:
- Nitrogen8M Mini SMARC fixes.
Update 20240306 changelog:
- Nitrogen8ULP and Nitrogen93 addition
Update 20240328 changelog:
- Laird meta-summit-radio layer addition (Wifi/BT )
Update 20240405 changelog:
- 8ULP support for M33 communication
Update 20240524 changelog:
- Update to use Laird wpa-supplicant/networkmanager from meta-summit-radio
Update 20240611 changelog:
- Touchscreen fixes in kernel
Update 20240820 changelog:
- RPMSG device trees update
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-mx-platforms 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
Lastly, if using the fastboot image (.wic.sparse
), you can program the eMMC via the following:
~$ fastboot flash emmc *boundary-image*.wic.sparse
Build procedure
This image uses the boundary-imx-6.1.55-2.2.0 (mickledore) 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 ~/mickledore && cd mickledore
~/mickledore$ repo init -u https://github.com/boundarydevices/boundary-bsp-platform -b boundary-imx-6.1.55-2.2.0
~/mickledore$ repo sync
Next, setup the environment for building. For this image we will be building the fsl-imx-xwayland-boundary distro for the target machine
~/mickledore$ MACHINE= DISTRO=fsl-imx-xwayland-boundary . imx-setup-release.sh -b build
Now bitbake boundary-image-multimedia-full which is equivalent to fsl-image-multimedia-full with Boundary-specific packages added such as BD-SDMAC support.
~/mickledore/build$ bitbake boundary-image-multimedia-full
If you wish to build chromium into your image, simply bitbake boundary-image-multimedia-full-chromium which is equivalent to the above with chromium added.
~/mickledore/build$ bitbake boundary-image-multimedia-full-chromium
NOTE: If building chromium, a minimum of 16GB RAM + 16GB swap is required or else chromium will not compile.
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
.
Features list
The image built above contains the following components:
- Linux kernel 6.1
- U-Boot 2022.04
- Weston 11.0.1 for i.MX
- GStreamer 1.22.0 for i.MX
- GPU Vivante libraries 6.4.11.p1.2
- VPU Hantro libraries v1.29.0
- ISP VVCAM v4.2.2.22.0
- Sona IF573 WiFi 6E + Bluetooth Driver
- Sterling LWB5+ Wifi+Bluetooth Driver
- BD-SDMAC Driver
- BlueZ 5.66
The next sub-sections will describe how to test most features.
Display support
Please make sure your platform includes the latest U-Boot:
This version of U-Boot supports the display configuration, allowing to use any of the following displays:
- HDMI display (up to 4k, 1080p recommended)
- 7" 1280x800 BD070LIC2
- 10" 1280x800 BD101LCC2
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
GPU acceleration
As usual, in order to test the GPU you can use the example apps provided by Vivante:
root@:~# /opt/imx-gpu-sdk/GLES2/Blur/GLES2.Blur_Wayland_XDG -d
Camera input
You can test Camera MIPI-CSI input using our OV5640 MIPI with GStreamer:
root@:~# gst-launch-1.0 v4l2src device=/dev/video0 ! \
video/x-raw,width=1280,height=720 ! waylandsink
Basler camera input
This build fully supports the Basler daA3840 8MP camera from Basler when using our Nitrogen 8M Plus which is part of our Evaluation Kit:
The isp-vvcam
driver and imx8-isp
service are loaded automatically when the camera is detected.
From there a simple GStreamer pipeline will allow you to see the stream:
root@nitrogen8mp:~# gst-launch-1.0 -v v4l2src device=/dev/video2 ! waylandsink
...
[ 352.348796] wdr3 res: 1920 1080
[ 352.352471] enter isp_mi_start
[ 357.581179] ###### 62.42 fps ######
[ 362.771924] ###### 62.42 fps ######
IMX219 camera input
We now have support for the IMX219 camera using our Nitrogen8M Plus SMARC. We tested using the Arducam imx219:
It can be tested with gstreamer:
root@nitrogen8mp:~# gst-launch-1.0 -v v4l2src device=/dev/video2 ! waylandsink
Ethernet
Once the eth0
interface is up, you can use iperf3
to check Ethernet performances:
root@:~# 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
The following Wifi modules are supported:
You can test with nmcli as shown below:
root@:~# nmcli d wifi connect password
root@:~# 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@:~# 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
The following Bluetooth modules are supported:
You can test with hciconfig/hcitool as show below:
root@:~# hciconfig hci0 up
root@:~# hcitool scan
Scanning ...
VPU decoding
If your platform supports VPU decoding, here is an example on how to test it using the gplay tool:
root@:~# wget http://linode.boundarydevices.com/videos/Hobbit-1080p.mov
root@:~# gplay-1.0 /home/root/Hobbit-1080p.mov
VPU encoding
Here is a simple example that shows how to encode a video stream from the camera into H.264 using the VPU encoder:
root@:~# gst-launch-1.0 -v -e v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080' \
! vpuenc_h264 ! filesink location=test.h264
^C
root@:~# gst-launch-1.0 filesrc location=test.h264 typefind=true ! 'video/x-h264' ! \
h264parse ! vpudec ! waylandsink
CAN
For platforms with CAN, you'll be able to bring up the interface(s) using this following command:root@:~# ip link set can0 up type can bitrate 500000
From this point, you can use commands such as cansend and candump to send or display messages on the bus respectively.
NPU support
NPU support is fully integrated into this build when using our Nitrogen 8M Plus with TensorFlowLite and ARMNN support of the NPU. You can find various example demos here: IMX-MACHINE-LEARNING-UG.pdf If you have any issues, please email support@boundarydevices.com