Zephyr is an open source RTOS (real-time operating system) project that is being adopted in industry for resource-constrained systems, from environmental sensors and wearables, to smart watches and IoT wireless gateways. Zephyr supports multiple hardware architectures, optimized for resource constrained devices, and built with security in mind.
BayLibre is a member of the Zephyr Project and has been a core contributor since the project began in 2016 with over 650 commits by 8 engineers:
We have ported Zephyr to 64-bit RISC-V processors and implemented 64-bit support for Arm v8 cores. Our engineers also maintain core parts of Zephyr.
Zephyr v3.0.0 is most recent release, and these are the contributions from our team:
Networking
- Nicolas Pitre introduced a network packet filter framework. It provides the infrastructure to construct custom rules for accepting and/or denying packet transmission and reception. This can be used to create a basic firewall, control network traffic, and more.
- Nicolas also contributed a Synopsys DesignWare Ethernet MAC driver. It was implemented and tested on the STM32H7X series of microcontrollers.
- Nicolas fixed locking for network sockets on SMP (multi-processor) systems.
PCIe
- Neil Armstrong contributed Generic Host PCIe controller support so that Zephyr can now use PCIe devices on non-x86 platform like ARM64. It supports Root Complexes with Root Complex Integrated Endpoint such as an embedded systems with internal-only PCIe Endpoints on bus 0.
- Neil added a public API for Device Tree ranges properties which is used for used for PCIe I/O and memory regions, and he added a Device Tree chosen property to identify the main PCIe Controller node of the system.
- Neil implemented support for the optional Interrupt Translation Service (ITS) module of the ARM GICv3 Interrupt Controller. It is designed to support MSI/MSI-X interrupt delivery in a future release.
IPC (Inter Processor Communication)
- ARM64 architecture maintainer Carlo Caione is now also a maintainer of the IPC subsystem.
- Carlo added support for multiple IPC service backends. Previously, the IPC service code assumed that only one IPC instance could exist which was a big limitation.
- Carlo also extended RPMsg data structures to accommodate for the introduction of new IPC backends.
- Carlo introduced a new mailbox driver class. The MBOX API supports multi-channel signalling and data exchange by extending the outdated IPM (inter-processor mailbox) communication API.
- Carlo also bumped support of the OpenAMP framework to the latest version and added an OpenAMP performance test.
Core
- Carlo improved memory management by adding a shared multi-heap memory pool manager.
- Carlo fixed a problem with the build system that effected incremental builds.
- Carlo corrected the tick count on the ARM architecture timer when SMP is enabled.
- Nicolas added bitfield macros to simply interaction with hardware device registers.
- Nicolas reduced the heap options to a single type which allows for smaller and faster heap code due to not having a bunch of runtime conditionals based on the heap size.
If your team needs help with Zephyr or any other embedded software such as Linux or Android, then please don’t hesitate to reach out to the experts at BayLibre.