我建议把这个平台定位成一个Zephyr 学习平台,而不是一个产品开发平台。你的目标应该是:
3~4 周内,能够独立使用 Zephyr 开发 STM32 和 ESP32 应用,并理解 Zephyr 的架构。

我的硬件条件:

- MacBook(剩余约30GB空间)
- VirtualBox
- Ubuntu VM
- ESP32-S3(一块)
- Nucleo-STM32F303RE(一块)

其中,我建议STM32F303RE作为主学习板,ESP32-S3作为第二块板。
原因:

- STM32 官方支持最好,调试最成熟
- 不涉及 WiFi,先学习 RTOS 本身
- ESP32 后面学习 WiFi、Bluetooth、Flash、Partition 更合适

整个学习路线
建议按照下面路线。

Ubuntu
    │
    ▼
Zephyr SDK
    │
    ▼
West
    │
    ▼
Hello World
    │
    ▼
GPIO
    │
    ▼
UART
    │
    ▼
Kconfig
    │
    ▼
Devicetree
    │
    ▼
Thread
    │
    ▼
Semaphore
    │
    ▼
Queue
    │
    ▼
Timer
    │
    ▼
Work Queue
    │
    ▼
Driver
    │
    ▼
ESP32

这条路线基本就是很多公司的 Zephyr 新人培养路线。


第一阶段:环境搭建(1~2天)
目标:
能够编译下载 Hello World。
学习内容:
第1课
Ubuntu安装
学习:

- apt
- git
- ssh
- vim

掌握:

sudo apt update
sudo apt install
git clone

第2课
安装 Zephyr
包括:

- Python
- west
- Zephyr SDK
- toolchain

最后做到:

west build

能够成功。


第3课
VirtualBox USB
这是很多人第一次踩坑。
掌握:
USB Passthrough
例如:
STM32

lsusb

Ubuntu 能看到 STLink。


第二阶段 Hello World(1天)
学习:

samples/hello_world

理解:

main()

CONFIG

prj.conf

CMakeLists.txt

west build

west flash

能够下载。
板子打印:

Hello World!

第三阶段 GPIO(2天)
这是最重要的一章。
学习:

samples/basic/blinky

理解:

device tree
GPIO API
led0

然后:
自己增加
Button。
做到:

按键控制LED。


第四阶段 UART(2天)
学习:

samples/drivers/uart

理解:

printk()
uart_poll_out()
uart_irq

做到:

串口Echo。


第五阶段 Kconfig(2天)
这是Zephyr最核心之一。
学习:

CONFIG_GPIO
CONFIG_SERIAL
CONFIG_LOG

理解:

prj.conf
Kconfig
menuconfig

做到:

增加自己的CONFIG。


第六阶段 Device Tree(3天)
这是很多新人最难的一章。
学习:

led0
aliases
chosen
status
compatible

然后:
自己增加一个LED。
学习Overlay:

app.overlay

做到:

不用修改BSP。


第七阶段 Thread(2天)
学习:

k_thread
priority
stack
delay

做到:
两个Thread。
例如:

LED1
LED2

不同频率闪烁。


第八阶段 同步(3天)
学习:

Semaphore
Mutex
Message Queue
FIFO
LIFO
Pipe
Work Queue
Timer
这是RTOS核心。
做到:
Button Thread
↓
Queue
↓
LED Thread

第九阶段 Logging(1天)
学习:

LOG_INF
LOG_DBG
LOG_ERR

理解:

CONFIG_LOG

第十阶段 Driver(3天)
开始理解Driver。
学习:

device_get_binding()
DEVICE_DT_GET()
DEVICE_DT_DEFINE()

理解:

driver
api
instance

第十一阶段 自己写Driver(3天)
例如:
myled
Driver。
实现:
myled_on()

myled_off()

这是理解 Zephyr 驱动模型的重要实践。


第十二阶段 ESP32-S3(5天)
开始学习第二块板。
内容:
GPIO
UART
Flash
Partition
NVS
WiFi(可选)
Bluetooth(可选)
这样你会发现:
Zephyr API

几乎不用改。


第十三阶段 综合项目(1周)
建议做一个完整的小项目。
例如:

Button
     │
     ▼
Thread
     │
     ▼
Message Queue
     │
     ▼
LED
     │
     ▼
UART Log

包括:

Kconfig
Overlay
Driver
Thread
Semaphore
Log

基本把 Zephyr 常用知识串起来。


学习目录建议
建议像你之前学习 Yocto 一样,按课程编号建立目录:

zephyr-study/
│
├── 01-Install
├── 02-HelloWorld
├── 03-Blinky
├── 04-Button
├── 05-UART
├── 06-Kconfig
├── 07-Menuconfig
├── 08-Devicetree
├── 09-Overlay
├── 10-Thread
├── 11-Semaphore
├── 12-Mutex
├── 13-MessageQueue
├── 14-Timer
├── 15-WorkQueue
├── 16-Logging
├── 17-Driver
├── 18-CustomDriver
├── 19-STM32-Project
├── 20-ESP32S3
└── 21-FinalProject

这种方式与你之前的 Yocto 学习习惯一致,后续查找和复习也会非常方便。


最终目标(完成本路线后)
完成整个计划后,你应该能够:

- 独立搭建 Zephyr 开发环境(West、SDK、工具链)
- 熟练使用 west build、west flash、west debug
- 理解并配置 prj.conf、Kconfig 和 Devicetree Overlay
- 编写基于线程、信号量、消息队列、定时器和工作队列的 RTOS 应用
- 熟悉 GPIO、UART、日志系统等常用外设与框架
- 理解 Zephyr 驱动模型,并编写简单的自定义驱动
- 在 STM32 和 ESP32-S3 两个平台上完成移植和开发
- 完成一个包含多线程、设备树配置、日志和驱动的综合项目

这套路线与很多公司实际使用 Zephyr 的开发流程比较接近,也能为后续学习 Nordic nRF 系列、BLE、Matter 或更复杂的嵌入式项目打下扎实基础。

在以后的课程中, 会做适当的调整, 宗旨是遵循费曼学习法(Feynman Technique)让零基础的朋友都能看懂上手

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐