Buildroot 2020.08 release for i.MX platforms

Published on September 7, 2020

Buildroot 2020.08 has just been published and we're glad to provide new images!Buildroot It has been a long time since our last release due to missing i.MX 8M features but today marks the first of many releases for all our platforms.

For the impatient

You can download pre-built Buildroot 2020.08 images from here: In order to flash those images you can either follow our video on this topic: Or for those fluent in command lines, you can simply use zcat: ~$ zcat 2020*br2020.08-nitrogen*.img.gz | sudo dd of=/dev/sdX bs=1M

What's new?

Buildroot 2020.08 release

It would be too long of a list to enumerate all the changes Buildroot went through since last release. For recent changes, we invite you to check the last release announcement: We'll focus on the i.MX changes for this release in the next sections.

Boundary Devices layer

We still provide our own Boundary Devices external layer in order to include proprietary bits like WiFi/BT driver/firmware: This includes the following custom configurations

New features

Buildroot 2020.08 includes the following versions of packages:
  • BlueZ5 5.54
  • GStreamer 1.16.2
  • GStreamer-imx v0.13.0 for i.MX6
  • GStreamer-imx v2.0 for i.MX8M*
  • imx-codec 4.3.5
  • imx-gpu-viv 6.4.0.p2.4
  • imx-vpu-hantro 1.15.0 for i.MX8M*
  • imx-vpu for i.MX6
  • Linux kernel 5.4.x_2.1.0
  • qcacld-2.0 LEA-2.0 Wi-Fi driver
  • Qt5 5.15.0
  • Wayland 1.18.0
  • Weston 8.0.0
Regarding i.MX8M support, 3 patches unfortunately didn't hit the master branch for this release in order to properly support Weston. Hopefully those will be merged for next Buildroot release so we don't need a fork on Github. There are a few differences between Yocto and Buildroot releases at this stage:
  • Buildroot images use standard packages without NXP modifications
    • This applies to GStreamer, Weston, libdrm, wayland etc...
    • The main drawback is that Weston can't be used with G2D
    • The (big) advantage is that it makes the codebase much easier to maintain, being able to use all the latest packages without having to be stuck at an earlier version chosen by NXP
  • Open-source gstreamer-imx plugin is used instead of NXP forks
    • This allows us to have imx-related changes for GStreamer in 1 package only

Build procedure

Just like our Yocto image, we now use a Docker file to build our images on our Jenkins server so that everyone can use the exact same environment. This ensures reproducible builds without having to think about missing dependencies. If interested in using this approach, we invite you to read the following blog post using the following docker file: Otherwise you can follow Buildroot documentation to know the host requirements: Once your development environment is setup properly, you can
  1.  Download the source code. To ease the repo cloning process, we decided to create a manifest to match what is done for Yocto/Android:
~$ sudo apt-get install repo ~$ mkdir ~/br2020.08 && cd br2020.08 ~/br2020.08$ repo init -u -b 2020.08.x ~/br2020.08$ repo sync
  1. Create an output folder for your configuration:
~/br2020.08$ make BR2_EXTERNAL=$PWD/buildroot-external-boundary/ -C $PWD/buildroot/ O=$PWD/output nitrogen8mm_qt5_gst1_defconfig ~/br2020.08$ cd output
  1. Build the image
~/br2020.08/output$ make
  1. Your image is now ready!
~/br2020.08/output$ ls -l images/sdcard.img ~/br2020.08/output$ sudo dd if=images/sdcard.img of=/dev/sdX bs=1M

Testing the image

As usual, the login for this image is root with no password. The external repository README details many commands that can be tested on the image. Since i.MX8M support is new, we will detail some of the commands here.
  • Once booted up, the Weston desktop should appear automatically, from there you can start a 3D test to ensure GPU acceleration
# cd /usr/share/examples/viv_samples/vdk/ # ./tutorial7 -h 720
  • Then you can start the Qt5 Cinematic Demo which is a known GPU stress-test as it includes many effects
# CinematicExperience-demo -platform wayland
    • Here you might need to adapt the demo resolution, here are the commands used for our 1280x800 MIPI display
# sed -i 's/1920/1280/' /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience.qml # sed -i 's/1080/720/' /usr/share/Qt5/CinematicExperience/Qt5_CinematicExperience.qml
  • You can also check the GStreamer VPU acceleration by decoding the well known Big Buck Bunny video
# wget -P /root/ # gst-launch-1.0 filesrc location=/root/trailer_1080p_h264_mp3.avi ! decodebin ! waylandsink
  • If you have our OV5640 5MP MIPI camera, you can check the GStreamer video capture
# gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720 ! waylandsink
  • As for Wi-Fi connectivity, the image embeds the minimum to get you started
# wpa_passphrase MYSSID MYPASSWORD >> /etc/wpa_supplicant.conf # /etc/init.d/S50wpa-supplicant stop # sleep 1 # /etc/init.d/S50wpa-supplicant start # iw wlan0 link Connected to a4:3e:51:08:54:f6 (on wlan0) SSID: MYSSID freq: 5660 RX: 47685 bytes (747 packets) TX: 2054 bytes (0 packets) signal: -58 dBm tx bitrate: 150.0 MBit/s MCS 7 40MHz short GI # udhcpc -i wlan0 udhcpc: started, v1.31.1 udhcpc: sending discover udhcpc: sending select for udhcpc: lease of obtained, lease time 86400 deleting routers adding dns # ping -I wlan0 PING ( 56 data bytes 64 bytes from seq=0 ttl=116 time=6.971 ms 64 bytes from seq=1 ttl=116 time=13.145 ms ...
  • Finally, if you want to use Bluetooth connectivity, the procedure goes as follows
# echo 0 > /sys/class/rfkill/rfkill0/state # sleep 1 # echo 1 > /sys/class/rfkill/rfkill0/state # hciattach /dev/ttymxc0 qca 2000000 -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 : 48668 bytes Total Length : 48412 bytes Patch Data Length : 48388 bytes Signing Format Version : 0x1 Signature Algorithm : 0x2 Event Handling : 0x3 Reserved : 0x0 Product ID : 0x0008 Rom Build Version : 0x0302 Patch Version : 0x03e8 Reserved : 0x8000 Patch Entry Address : 0x19b08 ==================================================== ==================================================== TLV Type : 0x2 Length : 1992 bytes Change Vendor Baud from 0x0e to 0x0d Failed to open /etc/bluetooth/firmware.conf Ignoring invalid deep sleep config value Failed to open /etc/bluetooth/firmware.conf ==================================================== Device setup complete # echo 1 > /sys/class/rfkill/rfkill2/state # hciconfig hci0 up # hcitool scan Scanning ... 48:C1:AC:00:D7:DCVoyager PRO+