For Applications & Industries
Free Online Training Events
Free Technical Resources
4 days (In-Person) 8 hours per day or
5 sessions (Live Online) 6 hours per session
Zephyr is a modular, highly portable, real-time operating system with an associated ecosystem to build secure, connected, and future-proofed devices. Zephyr is not just another RTOS but a complete development platform. It can help you achieve a lot with optimal effort.
This course helps you to navigate the steep learning curve for Zephyr and gives you a solid foundation to get you project-ready quickly.
This training class is designed around interactivity and attendees engagement with hands-on workshops designed to reinforce learning through practical applications.
How Zephyr can help you to build smarter and ship faster.
How to structure, configure, develop, debug, trace and test Zephyr firmware.
A solid grounding of the Zephyr ecosystem and common services, subsystems and APIs.
How to customize and extend Zephyr for your product.
Industry best practices (tips and tricks, tools, workflow) used by Zephyr professionals.
This course is designed for anyone interested in, or tasked with, the development of a resource-constrained Real-Time system using Zephyr, for example, software engineers, firmware engineers, hardware engineers, field engineers, and project managers.
Familiarity with C programming and embedded systems.
Basic knowledge of embedded processors and peripherals.
Some familiarity with embedded OS concepts, like tasks, priority, schedulers, and message passing is beneficial but not essential as we cover the concepts.
Prior attendance of C Programming for Embedded Systems or equivalent is recommended.
Doulos Course materials are renowned for being the most comprehensive and user-friendly available. Their style, content, and coverage is unique and has made them sought-after resources in their own right.
The materials include:
Fully indexed course notes creating a complete reference manual.
Workbook full of practical examples and solutions to help you apply your knowledge.
Access to the training platform, even after the training has completed.
Provide background information about the training and the Zephyr project.
Welcome • Course Objectives • Background on Zephyr • Getting started with Zephyr • Development environments Setup (native, container, IDE extension) • Practical tips. Bonus Appendix: Useful Resources.
Discuss what makes Zephyr a good fit for embedded products.
Why use Zephyr? • Hardware Support • Ecosystem Overview • Licensing • Product Examples.
Discuss practical considerations when developing embedded products with Zephyr.
How to build smarter and launch faster • Product Considerations • Release Lifecycle • Security and Regulation • Software update.
Give an overview of the Zephyr Ecosystem.
Architecture • Kernel and OS services • Connectivity Stacks • Proprietary Extensions.
Understand the Zephyr Build System.
West Workspace and Manifest • west tool • Managing Workspace • Building and Flashing applications • Using emulators • Zephyr Build Systems • YAML files.
An introduction to Real-Time OS fundamentals.
Software Concurrency • Concurrent Programming Model (cooperative, preemptive) • Real-time Systems.
Understand threads in Zephyr and how the kernel schedule them.
Creating Threads (static, runtime) • Threads priority • Threads Scheduling & Lifecycle • Preemptible vs Cooperative threads • Threads APIs • Product development Tips • Bonus appendix: configuration options, SMP, power management, how to assign priority.
Get introduced to devicetree.
Why devicetree? • The classic approach: Hardware Abstraction Layer • Devicetree and Zephyr • From Bare Metal… to Zephyr • Blinky walkthrough • Using devicetree to your advantages.
Learn about Kconfig and how to configure Zephyr for your application.
What is Kconfig? • Inspecting configuration with menuconfig/guiconfig • Application Custom Kconfig • Config Symbol definition • Kconfig files and Config fragments • Pay only for what you configure • Product Tips for configuring your product.
Learn how to resolve the most common issues related to Kconfig.
prj.conf not found • Config fragment is not applied • Unmet Kconfig dependencies • Linker error undefined reference __device_dts_ord_XXX.
Learn how shells, logging and tracing help with application debugging during the development phase.
Shells • Configuring and Using Shells • Logging Subsystem • Configuring and Using Logging • Selecting Logging backend • Common Kconfig Options • Driver Specific Debug Options • Tracing Subsystem • Configuring and Using Tracing.
Learn how to debug Zephyr applications.
Cross-debugging • GDB and VScode • Use Case: Debugging Fatal Error • Post-Mortem Debugging • Core Dump • Use Case: Stack Overflow • Tips for Devices in the Fields.
Learn how to leverage the logging APIs for your applications.
Architecture overview • Log Module • Logging APIs • Using Kconfig Log template • More on Logging.
Discuss how to integrate peripherals in Zephyr.
Hardware Integration procedure • Basics Checks • Devicetree bindings • Creating a Devicetree Overlays • Enabling the Driver • Using drivers in application • Practical Product Tips & Best Practices.
Introduce the syntax and usage of devicetrees to gain a deeper understanding of how devicetree is used in Zephyr.
Tree Structure • Devicetree Files • Merge & Overlay • Basic syntax: node, properties type • Standard properties • Common nodes (special nodes, addressable resources, interrupts…) • Querying the Devicetree pogrammatically.
Learn how to resolve the most common issues related to devicetrees.
Gosh, I got hundredths of cryptic compilation errors! • Common devicetree issues • How to resolve • Practical tips and tricks to ease troubleshooting.
Learn about the synchronization services and APIs provided by Zephyr and how to use them.
New bugs category • More on Threads Scheduling • Race Conditions • Semaphores • Priority Inversions • Mutex • Events • Condvars • Spinlock • Other Mechanisms • Tips and Best Practices.
Introduce the data passing primitives and APIs offered by the Zephyr Kernel.
Introduction • Overview Passing Primtive • Using Kernel FIFO, LIFO and Queues • Using Message Queue • Bonus Appdenix: Kernel Pipe and Mailbox.
Discuss Zbus, a lightweight and flexible software bus for applications.
Why ZBus? ZBus key concepts • Channels, Listeners, (message) Subscribers • Zbus APIs • Virtual Distributed Events Dispatcher • Higher Locker Priority Protocol • Going further.
Learn about timers and interrupts.
Measuring Time • Working with Timers • Interrupt Service Routine • Top/Bottom halves • System and Custom Workqueue • Working with Workqueues • Using interrupts.
Discuss the steps required to develop and integrate a custom device driver in Zephyr.
Driver Development recipe • Devicetree bindings and Kconfig • Device Driver Model • Driver Implementation • Driver Registration • System Initialization (initlevels) • Using the Drivers • Product development tips.
Learn about QEMU and native simulator and discuss how these technologies can be used during product development.
QEMU • QEMU Use Cases • native_sim • native_sim Use Cases • Emulated Devices • Testing drivers • Creating a Device Driver Emulator.
Introduce Zephyr’s test framework, Ztest, and the test runner tool twister.
Twister • Using twister • Test reports and scenarios • Ztest • Writing Tests with Ztest • Hardware In the Loop (HIL) testing • Going Further.
Discuss common tools available with Zephyr to assess and improve the quality of your product.
Footprint and Memory Usage • Static Code Analysis • Software Bill of Materials (SBOM). Bonus Appendix: Code Coverage.
Discuss a typical project structure for applications.
How to integrate proprietary code • Zephyr module • Creating and Using a Zephyr Module • Creating a Custom Workspace for your product • Zephyr Example Application.
Wrap-up, free Q&A sessions, further Zephyr and Doulos Resources.
The following sections are available in the Zephyr Essentials Manual but are not normally covered in our public offering. This content is provided for further study following the live delivery:
Discuss aspects related to data and code placement in Zephyr.
Introduction • System Memory Map • Code and Data placement • Linker files in Zephyr • Code and Data Relocation • Custom Linker Scripts • Boot Process.
Discuss how to use dynamic memory in Zephyr.
Dynamic Memory Landscape • System Heap • Synchronized Heaps • Low-level Heap Allocators • Using sys_heap • Using slabs • Memory Blocks • Further Aspects.