Embedded Recipes and Kernel Recipes return to Paris

The BayLibre team is very excited that one of our favorites weeks of the year is about to begin – for the first time in 3 years!

Embedded Recipes starts this Monday, May 30th, in Paris at the Fondation Biermans-Lapôtre. The event will be streamed live, and two BayLibre engineers will present starting at 16h:

Zephyr system call argument marshaling war story – Nicolas Pitre

Have no fear, this isn’t a military tale! Rather an overview of the mechanism used to implement system calls in the Zephyr operating system. This presentation will quickly introduce the Zephyr system call model, then focus on how it is implemented. We’ll discuss the unsuspected minefield of portable argument passing across different architectures, then the pitfalls of compiler optimization (or lack thereof) and look at various attempt at making it work for everyone all the time. While Zephyr material is used, this presentation ultimately is more about how to (ab)use the C language in such a low-level context so no prior Zephyr knowledge is necessary.

A path to upstream AI/ML accelerators – Alexandre Bailon

Currently, to support AI/ML hardware accelerators, SoC vendors develop their own drivers, reimplementing a lot of features common to many hardware accelerators.

libAPU aims to provide a stack generic enough to support many AI/ML hardware accelerators. libAPU relies on DRM to manage memory and schedule requests. It uses RPMsg to communicate with the hardware accelerator. It uses remoteproc to power up the hardware accelerator and load the firmware.

Alexandre Bailon will present the libAPU, talks about what has been already implemented, what remains to do and the upcoming challenges.

After Embedded Recipes concludes on Tuesday, the venue then transitions to Kernel Recipes. The 3-day event kicks off Wednesday, June 1st, and it will also be live streamed. Drew Fustini from BayLibre will speak on Friday morning at 10h:

Linux on RISC-V

It is an exciting time for Linux on RISC-V, the open instruction set (ISA) that is quickly gaining critical mass.  I will introduce the pieces needed to boot Linux on RISC-V including the Privileged Architecture, OpenSBI and U-Boot, and how that fits into the upcoming RISC-V Platform Specification.  I will break down support for existing hardware and current upstreaming efforts.  I will also discuss how the arch/riscv maintenance guidelines try to avoid unnecessary churn as the landscape of RISC-V extensions continues to evolve.

Follow BayLibre on Twitter, LinkedIn and Mastodon for updates during the week.

Our contributions to Zephyr v3.0.0

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:

Graph of BayLibre contributions to Zephyr

All contributions made by BayLibre to the Zephyr Project

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:


  • 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.


  • 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.


  • 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.

Bar graph of BayLibre contributions to Zephyr 3.0.0

BayLibre contributions to Zephyr 3.0.0


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