microPlatform update 0.17


Zephyr microPlatform changes for 0.17

Zephyr heading towards end of v1.12 development cycle, MCUboot heading towards 1.2.0 release, samples compatibility updates.

Linux microPlatform changes for 0.17

No changes have gone into the LMP since 0.16.

Zephyr microPlatform


Zephyr heading towards end of v1.12 development cycle, MCUboot heading towards 1.2.0 release, samples compatibility updates.





Configuration system overhaul:


Mynewt unit tests:



Retpolines on x86:

These changes also saw the removal of the (unused) _far_jump() and _far_call() routines.

LED and Button Definition Moves:

LED and button definitions were removed from all STM32 board.h files, since the corresponding defines now come from device tree. This is a breaking change, as the old XXX_GPIO_PORT is now XXX_GPIO_CONTROLLER. Applications which used the old names will need updates.

NXP Kinetis SoCs were also converted to generate this information from Device Tree. This change preserved names, but did not include updates for the FXOS8700 or FXAS21002 temperature sensors or the MCR20A 802.15.4 radio. Rather than break these sensors, this update has reverted the NXP-specific conversion patches until functionality is restored upstream.

Deprecated __stack macro removed:
mbedTLS update to fix remote execution holes:
k_thread_cancel() deprecated:
Generic storage partition rename:

Out of tree applications using the old alias or configuration option to access this partition will need updates.


SEGGER RTT support is now enabled on all NXP MCUs.

Support was added for Cadence's proprietary XCC compiler toolchain for the XTensa architecture, along with support for the intel_s1000 SoC. Judging from these drivers, the SoC is intended for use in speech and other audio processing. Zephyr SoC-level support is provided for DMA, I2S, UART, GPIO, USB, and I2C, with board support via intel_s1000_crb.


The bbc_microbit now supports flash partitions for mcuboot and on-chip storage.

Build system:

Notably, the build system now caches information obtained from the toolchain, optimizing subsequent invocations of cmake using the same toolchain. Factor of two speedups have been observed when the cache is used. A few problems have been identified and fixed up since the initial merge, but hopefully the major issues are resolved.

In another significant addition, the build system now contains an initial Python-based menuconfig alternative. This can currently be used by running "ninja pymenuconfig" on all supported targets (though Windows users will need to install an additional wheel). This is a significant improvement for Windows users, who previously have not had a configuration system browser. The pymenuconfig target is experimental. When it reaches sufficient feature parity with the existing menuconfig target, it will replace it, and the C-based Kconfig tools will be removed from Zephyr.

Further improvements include better error feedback when toolchains are not found, the list of printed boards now respecting BOARD_ROOT, and silencing of verbose compiler check messages.


The ST LSM6DSL inertial module driver saw a cleanup and now supports sensor hub mode. This allows the LSM6DSL to act as a sensor hub by connecting additional I2C slave devices through to the driver via the main communication channel.

STM32L0 and L4 microcontrollers now support the MSI (multi-speed internal) clock as a system clock source.

The uart_pipe console driver now supports both edge and level triggering, allowing it to work with CDC ACM.

The MCUX GPIO driver now uses device tree.

A GPIO driver for NXP i.MX SoCs was merged.

Device Tree:

GPIO nodes are now present on all Kinetis SoCs.


Zephyr's documentation describing its Kconfig usage was re-worked and improved as part of the transition towards a Python-based menuconfig alternative.


Userspace configurations now support dynamic creation of kernel objects. Previously, kernel objects (such as mutexes, pipes, and timers) needed to be declared statically. This is because a special linker pass is used when building the Zephyr image, which creates a perfect hash table which was used to validate if a memory address passed from userspace pointed to a valid kernel object, among other security checks. In addition to this hash table, Zephyr now supports maintaining metadata for dynamically created kernel objects using the new red/black tree implementation that was added in the v1.12 development cycle. Dynamic kernel objects are allocated and freed from the system heap. The new allocate and free routines are respectively k_object_alloc() and k_object_free(). They are currently only callable from supervisor mode.


The JSON library's internal descriptor type is more tightly packed, using bitfields to place information formerly found in four integers into 32 bits worth of bitfields. This results in a net savings of read-only data at a slight increase in text size.


Samples using LEDs and buttons were updated following the device tree name change from PORT to CONTROLLER described above.

The LWM2M sample was re-worked to add configuration overlay fragments for enabling Bluetooth networking and DTLS. The README was updated with new instructions for building the sample.


Various tests were cleaned up with style, tag, and category fixes, along with numerous tests receiving Doxygen-based documentation.

The sanitycheck script now parses test cases declared by a test suite from the source code, using regular expressions.

Sanitycheck also now supports a --list-tests flag, which prints declared test cases. Its output can be further refined by passing the -T option a relative path to a subdirectory of "tests" (e.g. -T tests/net/socket).

The test suite core now includes support for skipping tests when they are not supported.


The USB DFU class driver was heavily re-worked and moved to subsys/usb/class. The driver now determines the flash partition layout for the currently running image and an area to store an update image via device tree flash partitions, matching Zephyr's MCUboot area support mechanism. This allows Zephyr applications to add firmware update support by enabling the USB DFU driver and booting under MCUboot. Refer to the README and other documentation in samples/subsys/usb/dfu for more details.

The hci_usb sample application, which allows a Zephyr device which supports USB and a Bluetooth controller to act as a Bluetooth dongle, had its core USB operations generalized and migrated into the core USB subsystem. The sample application is now much smaller; what remains essentially just enables the driver.

The wpanusb sample, which allows Zephyr applications to expose 802.15.4 radio functionality to a host via USB, saw a major cleanup. This sample will be more widely useful upon release of corresponding Linux drivers.


Networking fixes:
pthread_cond_signal on cooperative threads:
SMP fixes for irq_lock() shim:
Kernel priority validation:
Driver capability check:
I2C user buffer copy fix:
ARC threading fixes:
BusFault fixes on ARMv8-M:
Bluetooth Mesh fixes:
Boot banner fixed for out of tree applications:
Device tree compiler warning fixes:
USB fixes:
LSM6DSL build fix:

hawkBit and MQTT sample application


LED GPIO controller portability check:


LWM2M sample application


LED GPIO controller portability check:


Linux microPlatform


No changes have gone into the LMP since 0.16.



Related posts

Keep up to date with Foundries.io