Recommend OTA method


I’m going to do an OTA test for iMX6ULL. I’m using iMX6ULL WIFI, Bluetooth board and make some applications with C language and Golang to run in Linux Console. My board will be installed in a hospital and connected to the hospital server through TCP/IP but can’t use an internet. So I don’t need OTA method by cloud or external server. That is to say, I’m going to upgrade kernel or rootfs from only internal server. Please recommend which OTA method to use for this. I don’t want to pay a license fee and need an easy way to implement it.

Best regards.

Dear @HansKim72 , I’m afraid that what you are asking is something not remotely available, at least for the iMX6ULL.

Torizon, our new embedded Linux platform, offers OTA but it is not available for the iMX6ULL (only on a experimental basis and not intended for production):

Our flashing tool, TEZI, works on local servers (check this) but you would still need to launch TEZI from somewhere (USB - recovery or through Distro boot), and for this you would also need some local access to U-boot… An option would be to have a SD card with a local version of TEZI, but still you would need the access to the local machine’s bootloader to launch it.

The small flash and RAM doesn’t help in order to have a A/B partition scheme and in any case, you would have to go through the development of the whole solution by yourself.

I’m afraid that I don’t see an easy way on updating the system via OTA.

Hi. It doesn’t matter if it costs. Is there any way I can do OTA on iMX6ULL?

Hi @HansKim72, on paper and with the proper time and experience nothing is impossible but from our side, little work is done (what is mentioned above). You can check the below link that has some good videos and information of our OTA related partner ( that may help you:

Hi. If I use a Mender, should I use Yocto?

Yes, in almost any case Yocto customization is recommended (we use it to create our images) and in this case, with heavy customization, more so. In case you haven’t dealt with Yocto at this point in time, check the following, where we explain a more in detail how to setup and build our sample images (although the customization is really up to you):


Dear Alvaro,
I can compile the Yocto at the moment. I want to test Mendor but this is not easy. I visited Mendor website and studied them. But I don’t know how to make A/B partition for iMX6ULL. My application size is small and I will use console mode. So I think rootfs size is less than 150MB. I can use dual partition for rootfs. I read iMX7 Mendor instruction but I don’t understand. I can’t find the commands for download and compile. Please see the following? Where are the commmands?

master branch (Mender and Yocto) + rocko-next branch (Toradex)

git://, branch=master
git://, branch=master, branch=master, branch=wip-master
git://, branch=rocko-next
git://, branch=master

Also I don’t understand the following. I think these are the commands. Please suggest the real examples commands.

$ . /poky/oe-init-build-env

$ bitbake-layers add-layer /meta-freescale

$ bitbake-layers add-layer /meta-freescale-3rdparty

$ bitbake-layers add-layer /meta-toradex-bsp-common

$ bitbake-layers add-layer /meta-toradex-nxp

$ bitbake-layers add-layer

$ bitbake-layers add-layer

$ bitbake-layers add-layer

Dear @HansKim72, I believe you are checking Mender’s documentation, right?

In that same documentation it says below:

Finally, you can build the core-image-full-cmdline image using the following:

bitbake core-image-full-cmdline

This tutorial is for NAND versions of Colibri iMX7 so maybe you have to make some changes, but the NAND related commands should be pretty similar.

I haven’t tried but once you have a working environment it looks like it should work if you have the right commits applied.

Regards, Alvaro.

Yes. I want to add Mender in iMX6ULL. But I don’t know how to download the following. Please let me know the command for the following. And where do I download it to? Please let me know directory name.

git://, branch=master


I found the correct directory position. There are many meta-frescale and meta-xxxx directory. So I download meta-mender in here.

But I don’t know the following. Please let me know.
$ . /poky/oe-init-build-env

In my opinion is “/home/r/oe-core/layers” in my tree. But I don’t know . Is this “”/home/r/oe-core/build"?

Hi @HansKim72 , yes, should be something like that. Remember adding the MACHINE variable


Your explanation of Kernel, OE-Core, are easy. So even a beginner like me could easily followed.

But Mender document is vaguely explained, it is difficult to follow. Do you have an easy explanation like Kernel or OE-Core?

Your competitor, Variscite, has an easy explanation for SWUpdate. I want to use SWUpdate but I can’t now. I wish Toradex would be more considerate of consumers. Why should the engineer document be difficult? Wouldn’t it be a good easy explanation?

Hi @HansKim72 , try to add the layers manually in the conf/bblayers.conf file instead of using the bitbake-layers add-layer command.

Just to make sure that the environment is correct, are you able to build an image with bitbake core-image-minimal?

Hi, There are error messages.

r@p:~$ cd oe-core/
r@p:~/oe-core$ . /home/r/oe-core/layers/poky/oe-init-build-env \ /home/r/oe-core/build

You can also run generated qemu images with a command like 'runqemu qemux86'.

r@p:~/oe-core/build$ bitbake core-image-minimal<br>
ERROR: Unable to start bitbake server (None)<br>
ERROR: Server log for this session (/home/r/oe-core/build/bitbake-cookerdaemon.log):<br>
--- Starting bitbake server pid 3288 at 2019-12-11 14:24:17.578621 ---<br>
ERROR: Traceback (most recent call last):<br>
  File "/home/r/oe-core/layers/poky/bitbake/lib/bb/", line 168, in wrapped<br>
    return func(fn, *args)<br/>
  File "/home/r/oe-core/layers/poky/bitbake/lib/bb/", line 193, in parse_config_file<br>
    return bb.parse.handle(fn, data, include)<br/>
  File "/home/r/oe-core/layers/poky/bitbake/lib/bb/parse/", line 107, in handle<br>
    return h['handle'](fn, data, include)<br/>
  File "/home/r/oe-core/layers/poky/bitbake/lib/bb/parse/parse_py/", line 121, in handle<br>
    abs_fn = resolve_file(fn, data)<br/>
  File "/home/r/oe-core/layers/poky/bitbake/lib/bb/parse/", line 131, in resolve_file<br>
    raise IOError(errno.ENOENT, "file %s not found" % fn)<br/>
FileNotFoundError: [Errno 2] file /home/r/oe-core/build/../layers/meta-mender/conf/layer.conf not found<br>
ERROR: Unable to parse /home/r/oe-core/build/../layers/meta-mender/conf/layer.conf: [Errno 2] file /home/r/oe-core/build/../layers/meta-mender/conf/layer.conf not found<br>


Yes, we fully agree. This is why Torizon addresses this with an integrated OTA solution:

Hi could you create a new question about this so we can better track and monitor your question. Please include the information/documentation that you’re following to perform this build.

On quick inspection it seems in your build settings/local.conf that you need to set PREFERRED_VERSION_u-boot-toradex to either our 2016.11 or 2019.07 u-boot version. This seems to be the initial issue the build system has.

Best Regards,

I am working for mining industry and my situation is similar to yours - no cloud updates possible.

We are using SWUpdate on imx6ULL boards

It is well documented and Yocto integration is provided.
I always have 2 rootfs partitions. One of them is active, second one is for update. When new system image is downloaded to second partition swupdate is changing u-boot boot partition to second one using fw_setenv command. System is booted from second partition and new update will be written to the first one

It is possible to update system from any medium: www, mmc, usb stick etc.

Thanks. We made some progress put have error below every time mender updates…
Besides the error report it seems to work. But I’d like to dig deeper into root cause of the error…

Do you have same issue?

[   52.435802] UBIFS assert failed in ubifs_log_start_commit at 412 (pid 469)
[   52.442809] CPU: 0 PID: 469 Comm: sync Not tainted 4.14.170-3.0.5+gbe5c475 #1
[   52.449963] Hardware name: Freescale i.MX6 UltraLite (Device Tree)
[   52.456157] Backtrace: 
[   52.458636] [<8010c4bc>] (dump_backtrace) from [<8010c72c>] (show_stack+0x18/0x1c)
[   52.466227]  r7:000000a0 r6:600f0113 r5:00000000 r4:80d7e1f8
[   52.471907] [<8010c714>] (show_stack) from [<8083ec50>] (dump_stack+0x9c/0xb0)
[   52.479154] [<8083ebb4>] (dump_stack) from [<803c1d04>] (ubifs_log_start_commit+0x184/0x3a0)
[   52.487609]  r7:000000a0 r6:0001b800 r5:00000003 r4:944ea000
[   52.493287] [<803c1b80>] (ubifs_log_start_commit) from [<803c2cd8>] (do_commit+0x2a4/0x4fc)
[   52.501657]  r10:9465f044 r9:94617544 r8:944ea09c r7:00000003 r6:000001b0 r5:00000000
[   52.509498]  r4:944ea000
[   52.512048] [<803c2a34>] (do_commit) from [<803c31c4>] (ubifs_run_commit+0xb8/0x12c)
[   52.519817]  r9:94df5f8c r8:944ea000 r7:94617544 r6:944ea09c r5:944ea0b8 r4:944ea000
[   52.527590] [<803c310c>] (ubifs_run_commit) from [<803b3b58>] (ubifs_sync_fs+0x84/0xa0)
[   52.535616]  r7:94617544 r6:00000003 r5:000001b0 r4:00000000
[   52.541302] [<803b3ad4>] (ubifs_sync_fs) from [<80255798>] (sync_fs_one_sb+0x30/0x34)
[   52.549157]  r9:94df5f8c r8:80dc935c r7:80d143b0 r6:80dc935c r5:94250400 r4:9465f000
[   52.556930] [<80255768>] (sync_fs_one_sb) from [<80228584>] (iterate_supers+0xc0/0x14c)
[   52.564959] [<802284c4>] (iterate_supers) from [<802558ac>] (sys_sync+0x5c/0xa4)
[   52.572380]  r10:00000024 r9:94df4000 r8:80107f24 r7:00000024 r6:00000088 r5:7ecb2f07
[   52.580228]  r4:00000000
[   52.582783] [<80255850>] (sys_sync) from [<80107d20>] (ret_fast_syscall+0x0/0x54)
[   52.590283]  r4:00000004


I’m trying to do Mender OTA. Can you check my attached files? I can’t use bitbake-layers command. There is an error.

Sure but Torizon does not run on iMX6ULL so considering this thread is about iMX6ULL not sure why you have mentioned that.
I have the queries and issues as described by HansKim.
Please provide instructions how to build for mender on iMx6ULL.


My main issue currently is after adding the layers is:

ERROR: Multiple versions of u-boot-toradex are due to be built (/home/audnex/yocto/build/../layers/meta-freescale-3rdparty/recipes-bsp/u-boot/ /home/audnex/yocto/build/../layers/meta-toradex-nxp/recipes-bsp/u-boot/ Only one version of a given PN should be built in any given build. You likely need to set PREFERRED_VERSION_u-boot-toradex to select the correct version or don't depend on multiple versions.