FOUNDRIES.IO INSIGHTS

microPlatform update 0.29

September 21, 2018

Summary

Zephyr microPlatform changes for 0.29

Zephyr v1.13 rc, improved sample board support

Linux microPlatform changes for 0.29

Similarly as how Yocto upstream manages the multiple configuration fragments via the yocto-kernel-cache repository, Linux microPlatform now supports its own metadata repository for kernel configuration fragments, reducing the amount of machine-specific configuration from the meta-lmp layer. Check https://www.yoctoproject.org/docs/2.5/kernel-dev/kernel-dev.html#kernel-dev-advanced for more information on how to manage and work with the fragments metadata.

Zephyr microPlatform

Highlights

  • Zephyr from the v1.13 rc period
  • Minor MCUboot updates
  • Sample application board support generalization

Components

MCUboot

Features

Not addressed in this update

Bugs

Build system cleanups

Two patches cleaning up build system warnings were merged.

Zephyr

Features

New ADC Framework

Zephyr’s ADC support has been heavily reworked, with new device drivers, DT bindings, and board support.

New features include asynchronous usage, channel configuration, and multi-channel sampling.

This significant change past the release candidate period was approved by the technical steering committee on the grounds that the pull request which included it has been open for several months. (It wasn’t merged in time for rc1 due to a few remaining issues which have since been fixed.)

The new ADC framework includes support for Nordic- and NXP Kinetis-based devices and boards, ARC devices using DesignWare ADC IP blocks, Atmel SAM devices, and the quark_d2000_crb board.

In-tree sample applications were updated, showing how to use the new API, which is still defined in include/adc.h and was introduced in commit f1891e9

One notable (and late-breaking) review comment, while agreeing that the new API is a definite improvement, lamented the lack of trigger support.

Arches

Instruction and data caches were enabled on STM32F7 SoCs.

Bluetooth

Mirroring a change made to the PHY update code merged earlier in the cycle, the connection update procedure now avoids an assert when confronted with protocol errors related to procedure collision rules observed in certain cell phones. In a related change, a new Kconfig option, CONFIG_BT_AUTO_PHY_UPDATE, was added, which can be disabled to allow the remote device to initiate PHY update, rather than doing so at connection establishment time.

Boards

The nrf52840_pca10059 and nrf52_adafruit_feather boards now support flashing and debugging with PyOCD.

The efr32_slwstk6061a can now be flashed with OpenOCD. However, reports indicate its name still cannot be said three times fast.

The nucleo_l432kc now has a flash storage partition.

Build

Users can now set QEMU_BIN_PATH in their environment to specify the path to their own QEMU binaries, rather than using those provided by the Zephyr SDK.

They can also set the CMake variable DTS_APP_BINDINGS to specify a directory containing out-of-tree DTS bindings.

The build system no longer respects the environment variable CFLAGS, as this was set by some Linux distributions for native builds, and was incorrectly affecting Zephyr builds.

Drivers

A new CONFIG_ENABLE_HID_INT_OUT_EP option was added, which adds support for an OUT interrupt endpoint in the USB HID driver. It is disabled by default, so its merge should not affect applications using this driver.

The sensor subsystem’s Kconfig choice options now have names. This allowed board-specific support files to enable available sensors using Kconfig default settings for these choices, instead of setting them explicitly in defconfigs. This is useful as defaults can be easily overridden by applications.

Scripts

Piggy-backing on the Kconfiglib update discussed below, the ninja menuconfig interface now shows how the Kconfig file of each symbol was sourced in its help for each symbol

Bugs

Arches

GPIO interrupt handling on STM32L4 SoCs now works properly.

Build breaks on xtensa were fixed.

Bluetooth

A fix to an internal procedure affecting configurations which use the (new to v1.13) feature enabling multiple identities was merged.

Mesh fixes:

  • build break in health_srv.c
  • invalid restoration of stored state (App Key) from flash
Boards

Documentation was added for qemu_nios2.

ARC boards’ Kconfig files were cleaned up and updated.

The nrf52_pca10040 board now declare Flash erase block sizes properly in DTS.

The arduino_101 Kconfig default for CONFIG_DISK_FLASH_MAX_RW_SIZE was fixed.

The mimxrt1050_evk and udoo_neo_full_m4 got Kconfig warning fixes.

Build

Documentation for Kconfig symbols now includes the path to access the symbol in ninja menuconfig.

Continuous Integration

An issue causing CI to miss fault-related output was fixed.

Device Tree

The STM32L4 SoC family got several fixes

  • a missing flash erase block size is now declared
  • the fixup file now includes the necessary definitions for using I2C3
  • the gpioh and gpioi node addresses were fixed
Documentation

The documentation itself can now be generated in PDF form if a LaTeX installation is found.

Drivers

The Kconfig options for the SX1509B I2C GPIO chip got dependency fixes.

Two bugs affecting the nRF GPIO driver were fixed.

The “v1” I2C driver available for some STM32 SoC families now properly handles NACKed transactions. (The “v1” refers to the I2C IP block itself, not a software version.)

Miscellaneous fixes:

  • bit resolution on ADC-based Grove sensor drivers (twelve is the number of bits thou shalt count)
  • an RX FIFO error in the enc28j60 Ethernet driver
  • hanging when collecting entropy with ENTROPY_BUSYWAIT on nRF5
  • high-frequency clock enable checks in the nRF5 USB device driver
  • a xoroshiro128 random number driver initialization fault
External

Kconfiglib was updated to upstream a28bc4da9762e, which was used to add menu path information to the documentation and fix some bugs.

Kernel

Fixes were merged for

  • a significant bug affecting timeout handling memory pools (mempool) for pools with large numbers of maximum-size blocks
  • use of interrupts when CONFIG_MULTITHREADING=n
  • time slice accounting in tickless mode (with a band-aid; more changes affecting the interaction of these two areas are expected)
  • k_pipe_block_put() behavior when memory runs out
  • k_poll() behavior when waiting on queues that subsequently have waiting canceled

Precision issues were improved in the conversion between ticks and milliseconds.

The SYS_MEM_POOL_KERNEL and SYS_MEM_POOL_USER macros are now properly defined as bit masks.

Libraries

Some null dereferences in the CMSIS RTOS v1 driver were fixed. Support for the the osWait feature was removed, presumably due to an issue with the implementation.

Several fixes were merged for Zephyr’s CMSIS RTOS support shim.

Logging

Fixes for out-of-bounds reads and null dereferences were merged.

Networking

Fixes were merged affecting

  • net_udp_append_raw() timeout handling
  • LWM2M formatter usage
  • memory exhaustion during TCP segment creation
  • retransmission of FIN packets
  • handling of multiple hop-by-hop option headers
  • DTLS connection closure
  • polling on sockets

The gPTP thread’s stack size was incorrectly initialized; this is fixed. This type of bug – use of sizeof(stack_object) instead of K_THREAD_STACK_SIZEOF(stack_object) – might be a good target for a Coccinelle script in the future.

Samples

Individual fixes include:

  • peripheral_hids: connection with a previously bonded device
  • nvs: interoperation with MPUs, flash block erase size
  • grove_light, grove_temperature: printing floats with newlib, missing respect for CONFIG_GROVE_LIGHT_SENSOR_NAME
  • coap_server: memory overrun fix

All samples using mbedTLS directly were removed. These were mbedtls_sslclient, mbedtls_dtlsserver, mbedtls_dtlsclient, coaps_client, and coaps_server. This follows from the move to socket-based TLS support.

Scripts

A menuconfig fix for visible symbols not being shown was merged.

In the device tree scripts, an interoperability issue with dtc 1.4.7 was fixed, and node alias names are now applied to all property names.

Various Kconfig cleanups and usability issues were also merged.

Storage

NVS writes now work when the underlying flash device cannot be written with byte-level granularity.

Testing

Numerous enhancements and fixes were merged as the testing period continued; refer to the individual changes for details.

hawkBit and MQTT sample application

Features

nRF support consolidation

MCUboot board support for various nRF-based devices was significantly generalized using common device tree overlays, Kconfig fragments, and new zmp build features.

It is now likely that additional nRF52832 and nRF52840 based boards will simply work out of the box, unless they have board-specific hardware features like inverted LEDs.

reel_board support

The sample now works on the reel_board device.

Bugs

Not addressed in this update

LWM2M sample application

Features

nRF support consolidation

MCUboot board support for various nRF-based devices was significantly generalized using common device tree overlays, Kconfig fragments, and new zmp build features.

It is now likely that additional nRF52832 and nRF52840 based boards will simply work out of the box, unless they have board-specific hardware features like inverted LEDs.

reel_board support

The sample now works on the reel_board device.

Bugs

Not addressed in this update

Linux microPlatform

Highlights

  • Linux LMP config fragments now available via external lmp-kernel-cache metadata repository

Components

Meta LMP Layer

Features

Layer Update

Kernel configuration fragments now available via external lmp-kernel-cache metadata repository. Linux LMP recipe clean ups.

Bugs

Not addressed in this update

comments powered by Disqus