Technexion PICO-PI-IMX7

The official Mender documentation explains how Mender works. This is a board-specific complement to the official documentation.

Board description

PICO-PI-IMX7 is the Starting Kit for Android Things

The i.MX 7Dual delivers high-performance processing for low-power requirements with a high degree of functional integration. The i.MX 7Dual features an advanced implementation of two ARM®Cortex®-A7 cores, which operate at speeds of up to 1.2 GHz, as well as the ARM® Cortex®-M4 core. The Pico variant is pin-compatible with the Intel® Edison for sensors and low-speed I/O, but also adds additional expansion possibilities for multimedia and connectivity, giving you cutting edge technology that can easily be expanded and implemented for IoT designs.


Test results

The Yocto Project releases in the table below have been tested by the Mender community. Please update it if you have tested this integration on other Yocto Project releases:

Yocto Project Build Runtime
sumo (2.5) :test_works: :test_works:
thud (2.6) :test_works: :test_works:

Build Means that the Yocto Project build using this Mender integration completes without errors and outputs images.

Runtime Means that Mender has been verified to work on the board. For U-Boot-based boards, the integration checklist has been verified.

Getting started


  • A supported Linux distribution and dependencies installed on your workstation/laptop as described in the Yocto Mega Manual

  • NOTE. Instructions depend on which Yocto version you intend to use.

  • Google repo tool installed and in your PATH.

Configuring the build

Setup Yocto environment

Set the Yocto Project branch you are building for:

# set to your branch, make sure it is supported (see table above)
export BRANCH="thud"

Create a directory for your mender-nxp setup to live in and clone the

meta information.

mkdir mender-nxp && cd mender-nxp

Initialize repo manifest:

repo init -u \
-m meta-mender-nxp/scripts/manifest-nxp.xml \
-b ${BRANCH}

Fetch layers in manifest:

repo sync

Setup build environment

Initialize the build environment:

source setup-environment nxp

NOTE! You need to accept the Freescale EULA at ‘…/sources/meta-freescale/EULA’. Please read it and in case you accept it, add:


in your local.conf.

Building the image

You can now proceed with building an image:

MACHINE=imx7d-pico bitbake core-image-base

Replace core-image-base with your desired image target.

Using the build output

After a successful build, the images and build artifacts are placed in tmp/deploy/images/imx7d-pico/.

  • tmp/deploy/images/imx7d-pico/core-image-base-imx7d-pico.sdimg

  • tmp/deploy/images/imx7d-pico/core-image-base-imx7d-pico.mender

  • tmp/deploy/images/SPL

  • tmp/deploy/images/u-boot.img

The disk image (with .sdimg suffix) is used to provision the device storage for devices without Mender running already. Please proceed to the official documentation on provisioning a new device for steps to do this.

On the other hand, if you already have Mender running on your device and want to deploy a rootfs update using this build, you should use the Mender Artifact files, which have .mender suffix. You can either deploy this Artifact in managed mode with the Mender server as described in Deploy to physical devices or by using the Mender client only in Standalone deployments.

Flash instructions

Based on the output artifacts described above we need to flash the SPL, u-boot.imx and core-image-base-imx7d-pico.sdimg separately to fully provision an device and for it to work with Mender.

Required software on the host PC:

git clone
cd imx_usb_loader && make

Loading U-Boot via USB Serial Download Protocol

Note: This method is convenient for development purposes.

If the eMMC has already a U-Boot flashed with DFU support then

the user can go to step 2 below in order to update U-Boot.

Put pico board in Serial Boot Loader mode (refer to the PICO-iMX7D Quick Start Guide

page 18 (

Connect a USB to serial adapter between the host PC and pico.

Connect a USB cable between the OTG pico port and the host PC.

Open a terminal program such as minicom.

Copy SPL and u-boot.img to the imx_usb_loader folder.

Load the SPL binary via USB:

$ sudo ./imx_usb SPL

Load the u-boot.img binary via USB:

$ sudo ./imx_usb u-boot.img

Then U-Boot starts and its messages appear in the console program.

Use the default environment variables:

=> env default -f -a
=> saveenv

Flashing U-Boot into the eMMC

Run the DFU agent so we can flash the new images using dfu-util tool:

=> dfu 0 mmc 0

Flash SPL and u-boot.img into the eMMC running the following commands on a PC:

$ sudo dfu-util -D SPL -a spl
$ sudo dfu-util -D u-boot.img -a u-boot

The following message should be seen on the U-Boot prompt after a successful upgrade:

Ctrl+C to exit …​

Remove power from the pico board.

Put pico board into normal boot mode.

Power up the board and the new updated U-Boot should boot from eMMC.

Flashing Image into the eMMC

From the u-boot :

 => ums 0 mmc 0 

From the host :

 sudo dd if=core-image-base-imx7d-pico.sdmig of=/dev/sdX bs=1M ; sudo sync


If this post was useful to you, please press like, or leave a thank you note to the contributor who put valuable time into this and made it available to you. It will be much appreciated!


Thanks for sharing and contributing. Actually shouldn’t name of board should be wandaboard (just renamed from other vendor?). I looked to both of then and they look very similar, anyway I can be wrong.

It’s a pleasure to contribute :blush:, wanderboard is one of the redistributors of the pico pi imx7

OK I see. Thanks for clarification.

printer@mercedes:~/Dev/IMX/Picoboard/mender-nxp/build$ MACHINE=imx7d-pico bitbake core-image-base
Unable to create ‘’
[Errno 13] Permission denied: ‘’
ERROR: Unable to acquire lock ‘/home/sprinter/Dev/IMX/Picoboard/mender-nxp/build/bitbake.lock’, directory is not writable
getting this error

Seems a bit odd that you do not have permissions to create files in build directory. Did you setup environment with sudo or a different users?

I set up with sudo …my system wont run the source setup…x without sudo

I set up with sudo …my system wont run the source setup…x without sudo

Then that is the problem to solve first. It is not allowed to use sudo in any of the commands.

I do not know what would case this command:

source setup-environment nxp

To get permission errors.

sorry man
sprinter@mercedes:~/Dev/IMX/Picoboard$ source setup-environment nxp
Configuring for imx6qsabresd
mkdir: cannot create directory ‘/home/sprinter/Dev/IMX/Picoboard/nxp/conf’: Permission denied
Error: Cannot write to /home/sprinter/Dev/IMX/Picoboard/nxp, perhaps try sourcing with a writable path? i.e. . oe-init-build-env ~/my-build

it has something to do with user accounts …i cant run source without sudo ,maybe i need to add user account or something

Hm, it looks to me like your are not running the setup-environment file provided by meta-mender-community

What do the following commands show?

$ id
$ ls -l /home/sprinter/Dev /home/sprinter/Dev/IMX \
      /home/sprinter/Dev/IMX/Picoboard \

I had problems with my user permissions
sudo chown $USER:$USER ~ -R

did the quick fix …now its compiling smoothly thank you everyone

I had problems with my user permissions
sudo chown $USER:$USER ~ -R

did the quick fix …now its compiling smoothly thank you everyone

sprinter@mercedes:~/Dev/IMX/Picoboard/mender-nxp/build$ sudo …/…/imx_usb_loader/imx_usb …/build/tmp/deploy/images/imx7d-pico/u-boot.img
config file <…/…/imx_usb_loader//imx_usb.conf>
vid=0x066f pid=0x3780 file_name=mx23_usb_work.conf
vid=0x15a2 pid=0x004f file_name=mx28_usb_work.conf
vid=0x15a2 pid=0x0052 file_name=mx50_usb_work.conf
vid=0x15a2 pid=0x0054 file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x0061 file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x0063 file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x0071 file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x007d file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x0080 file_name=mx6ull_usb_work.conf
vid=0x1fc9 pid=0x0128 file_name=mx6_usb_work.conf
vid=0x15a2 pid=0x0076 file_name=mx7_usb_work.conf
vid=0x1fc9 pid=0x0126 file_name=mx7ulp_usb_work.conf
vid=0x15a2 pid=0x0041 file_name=mx51_usb_work.conf
vid=0x15a2 pid=0x004e file_name=mx53_usb_work.conf
vid=0x15a2 pid=0x006a file_name=vybrid_usb_work.conf
vid=0x066f pid=0x37ff file_name=linux_gadget.conf
vid=0x1b67 pid=0x4fff file_name=mx6_usb_sdp_spl.conf
vid=0x0525 pid=0xb4a4 file_name=mx6_usb_sdp_spl.conf
vid=0x1fc9 pid=0x012b file_name=mx8mq_usb_work.conf
no matching USB device found

help me why its not recognizing data

Can you disconnect and reconnect the USB OTG cable while viewing the system logs on your build host? I’m not sure which specific file for your host but on Ubuntu 18 it’s /var/log/syslog by default. It seems like your board is not being enumerated on the USB bus on your host.

I am able to list the device via lsusb and dmesg
sprinter@mercedes:~/Dev/IMX/Picoboard/mender-nxp/build$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 04ca:7053 Lite-On Technology Corp.
Bus 001 Device 003: ID 138a:003f Validity Sensors, Inc. VFS495 Fingerprint Reader
Bus 001 Device 002: ID 8087:0a2b Intel Corp.
Bus 001 Device 109: ID 18d1:4ee7 Google Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

I had earlier flashed android things on it using googles tool and I can view see it when i view the logs
more /var/log/syslog or dmesg ,lsusb

Is the format of your imx_usb.conf correct, as it doesnt match the format i’m using?

#vid:pid, config_file

0x15a2:0x0054, iw-spl-usb.conf

0x0525:0xb4a4, iw-uboot-usb.conf

I can build a Yocto thud image, and flash the target. It hangs at:

`[    3.238452] Waiting for root device /dev/mmcblk1p2...`

Changing u-boot variable mender_boot_part to 1, switches the hang to:

`[    3.238452] Waiting for root device /dev/mmcblk1p1...`

Sorry i change this :sweat: