The Embedded Open Source Summit took place from April 16-18 in Seattle, Washington, alongside the Open Source Summit North America. The Zephyr Developer Summit was part of the EOSS, aimed at developers using or considering Zephyr in embedded products. This year, we concentrated on supporting topics relevant to Zephyr users, upstream contributors, and maintainers.
More than 860 individuals from 721 organizations across 46 countries registered for the EOSS conference. The Zephyr track featured over 50 technical sessions, both in-person and on-demand, focusing on users, upstream developers, and maintainers.
Videos from the Zephyr Developer Summit are available on the Zephyr Project YouTube channel. We will highlight a few videos each week in a blog for easy access.
Today, we’re featuring ZBus – New Features and Roadmap by Rodrigo Peixoto, Edge-UFAL/Citrinio, Configure Zephyr: Kconfigs and Devicetree in Simple Words by Roy Jamil, Ac6, Future of Zephyr Device Model by Ederson de Souza, Intel Corporation, LTSv3 POSIX Roadmap Update by Chris Friedt, Tenstorrent, and Update on Rust in Zephyr by David Brown, Linaro, LTD.
ZBus – New Features and Roadmap – Rodrigo Peixoto, Edge-UFAL/Citrinio
In this talk, Rodrigo discusses the evolution of ZBus, focusing on new features since the previous session in Prague last year and the roadmap. ZBus aims to address the complexities of communication topologies beyond one-to-one, such as one-to-many and many-to-many.
Key features discussed include the Observer storage, which enhances modularity by separating channel definitions from observer relationships. This allows for dynamic addition and removal of observers, improving flexibility. Additionally, the introduction of Master (M) subscribers enables recipients to receive message copies directly, complementing existing listeners and subscribers.
A significant advancement is the Highest Lock Priority (HLP) protocol, addressing priority inversion issues by elevating thread priorities based on observer priorities. This ensures smooth execution sequences, avoiding preemptions and priority inversions.
Rodrigo emphasizes the advantages of ZBus, such as decoupling and synchronization, facilitating robust communication without tight dependencies between producers and consumers. He highlights recent contributions from the community and outlines core features, including Observer storage, M subscribers for message copies, and a priority elevation protocol to mitigate priority inversions.
Furthermore, he discusses ongoing efforts, such as ZBus multi-core support and the concept of Zephyr daemons, aiming to streamline and abstract common functionalities into reusable components. The talk concludes with insights into potential future enhancements, including individual pools for critical communication, standardized communication interfaces, and the exploration of daemons as service-oriented components within Zbus.
To learn more, watch the video here.
Configure Zephyr: Kconfigs and Devicetree in Simple Words – Roy Jamil, Ac6
The talk aimed to simplify the adoption of Zephyr by addressing challenges related to Kconfig and the device tree. Roy explained that Zephyr configuration is managed through two main frameworks: Kconfig for global system settings and the device tree for hardware description. He emphasized the importance of these frameworks in enhancing the Zephyr development experience.
Roy detailed the role of application developers in customizing Zephyr by configuring options through project-specific files, such as project.conf and app.overlay. He also discussed the use of interactive Kconfig tools, like menuconfig and guiconfig, to enable or disable features and manage dependencies. For device tree customization, Roy highlighted the importance of structuring hardware information and using macros to access configuration properties.
He also touched upon the platform developer’s role in extending Zephyr’s capabilities by adding new drivers and features, stressing the need to understand the driver model and create appropriate bindings.
The talk provided a comprehensive overview of Zephyr configuration management, aimed at easing the development process for both application and platform developers. To learn more, watch the video here.
Future of Zephyr Device Model – Ederson de Souza, Intel Corporation
This talk covered the current state, recent developments, and future enhancements for managing device initialization and APIs within Zephyr.
Ederson began by explaining the Zephyr device model, focusing on how devices are managed, their lifecycle, and API definitions. He illustrated these points with issues and pull requests related to the device model, emphasizing the need for community feedback to refine ongoing developments.
A significant recent update discussed was the introduction of deferred device initialization, which allows certain devices to be initialized later in the boot process rather than at startup. This change addresses use cases where some devices may not be needed immediately or at all in certain scenarios, optimizing system performance and startup time. He shared lessons learned from the implementation process, stressing the importance of keeping discussions aligned with the original issues to retain institutional knowledge.
Looking towards the near future, Ederson introduced a proposal for managing the initialization order of devices more effectively. Currently, the order is managed using priority numbers, which can be inflexible and difficult to maintain. He proposed using function names or device names (such as compatible strings) to define initialization dependencies, which would be managed through a two-step build process to create a topologically sorted list of initialization entries. This approach aims to simplify and improve the flexibility of device initialization order management.
He also discussed long-term ideas, including enhancing notification mechanisms for device initialization failures and considering the possibility of unloading and reinitializing devices dynamically. These features could improve error handling and power management by allowing devices to be reinitialized or powered down as needed.
This presentation highlighted ongoing efforts to refine Zephyr’s device model, aiming to enhance flexibility, maintainability, and efficiency in managing embedded systems.
To learn more, watch the video here.
LTSv3 POSIX Roadmap Update – Chris Friedt, Tenstorrent
In this presentation, Chris outlined the role of POSIX in Zephyr, its organizational structure, goals for the upcoming LTS V3 release, and the progress made so far. POSIX, which provides a consistent interface between applications, the kernel, and subsystems, has been evolving incrementally within Zephyr, adding features as needed.
Chris explained the concept of application environment profiles (AEPs), now referred to as subprofiling option groups. These profiles range from minimal real-time systems (PS51) to multi-purpose real-time systems (PS54), with each level adding more complex features. Fundamental POSIX requirements include asynchronous I/O, thread synchronization, memory mapping, and signals. Higher-level profiles introduce more advanced functionalities like multi-process systems, advanced file system operations, and network support.
The primary goals for LTS V3 include supporting all POSIX system interfaces, PS51, PS52, and PS53 profiles, and improving maintainability, conformance, portability, and documentation. Significant progress has been made, including increased test coverage and restructuring of the POSIX source tree for better organization. However, some critical features, such as memory mapping and real-time signals, are still under development. Process management and memory protection pose additional challenges due to the lack of MMU in many embedded systems.
Chris emphasized the importance of community contributions to achieve the goals set for LTS V3. He highlighted the growing interest in using Zephyr in safety-critical applications, particularly in the automotive and aviation sectors, as evidenced by the focus on standards like AUTOSAR and DO-178C. Additionally, the future of POSIX in Zephyr includes integrating AI and automation, especially in intelligent vehicles and hyperscale infrastructure.
In conclusion, this presentation provided a comprehensive overview of the ongoing and future efforts to enhance POSIX support in Zephyr.
To learn more, watch the video here.
Update on Rust in Zephyr – David Brown, Linaro, LTD
This talk features the advancements of Rust integration in Zephyr, given by a David who previously demonstrated a basic Rust application running on Zephyr. This year’s update delved into the significant progress made over the past year, focusing on the development of a Rust-based keyboard firmware project that transitioned from using Rust embedded to running on top of Zephyr.
Initially, the firmware was developed with Rust embedded, but due to the limitations and complexity of hardware support, the project was transitioned to Zephyr. This move led to the development of Rust code that could seamlessly run on Zephyr, highlighting the flexibility and potential of combining these technologies.
A key focus of the presentation was an RFC (Request for Comments) aimed at making Rust on Zephyr more accessible. The goal is to streamline the process so developers can easily build Rust applications on Zephyr using familiar tools like West build and cargo. This involves creating seamless integration between Zephyr’s build system and Rust’s cargo, ensuring that Rust applications can be built and run on Zephyr without extensive manual configuration.
The talk also addressed the challenges and solutions in aligning Zephyr’s Kconfig and device tree systems with Rust’s configuration and module systems. This includes generating Rust constants and modules that reflect Zephyr’s configuration, allowing for safe and efficient code execution. The speaker proposed generating Rust modules from Zephyr’s device tree, providing a structured and accessible way to manage hardware configurations.
Additionally, the discussion covered the need for system call (syscall) support in Rust. This involves creating Rust wrappers for Zephyr’s syscalls, enabling Rust code to interact with Zephyr’s kernel functions safely. The speaker highlighted the importance of maintaining safety and avoiding unsafe code wherever possible.
Logging was another critical topic. The current method involves formatting log messages in Rust and passing them to Zephyr’s logging system, which is inefficient. David suggested potential solutions, including integrating Rust’s formatting capabilities with Zephyr’s logging system or adopting external logging mechanisms.
The talk highlighted significant progress in integrating Rust with Zephyr and outlined a clear path forward, emphasizing the potential benefits for the embedded development community.
To learn more, watch the video here.
Watch the rest of the Zephyr Developer Summit videos here. The schedule and links to the PPT presentations can be found here. Photos from the EOSS can be found here.
For more information about the 2024 event, stay tuned by subscribing to the Zephyr quarterly newsletter or connect with us on @ZephyrIoT, Zephyr Project LinkedIn or the Zephyr Discord Channel to talk with community and TSC members.