Zephyr大量引用了外部代码库避免重复造轮子,尽可能多的复用成熟代码。同时解决license污染问题,这些代码库在Zephyr中以模块的形式进行管理,本文列举Zephyr引用的外部模块的功能。
外部模块主要可以分为下面几种:
- 芯片供应商提供的HAL:这部分在外部模块中占比最大,使用芯片供应商的HAL比从头写驱动更为快速,且代码更稳定成熟
 - 调试器的整合
 - 密码算法库
 - 文件系统
 - 音频系统
 - 各种功能库
 - 可信执行性环境
 
Zephyr使用的所有的外部模块都可以在zephyr/west.yaml中找到,该文件提供了这些模块的下载地址和zephyr当前使用这些模块的版本信息,Zephyr外部模块被west下载后放置的目录结构如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16.
├── bootloader
│   └── mcuboot
├── modules
│   ├── audio
│   ├── bsim_hw_models
│   ├── crypto
│   ├── debug
│   ├── fs
│   ├── hal
│   ├── lib
│   └── tee
├── tools
│   ├── edtt
│   └── net-tools
└── zephyr
外部模块
Zephyr提供的所有外部模块都放在和zephyr平级的目录modules下
HAL
modules/hal下,一共24家芯片厂商的hal
altera  cmsis    espressif  gigadevice  libmetal   nordic   nxp      quicklogic  rpi_pico  st     telink  wurthelektronik
atmel   cypress  ethos_u    infineon    microchip  nuvoton  openisa  renesas     silabs    stm32  ti      xtensa
音频系统
modules/audio/sof 下
Sound Open Firmware(简称 SOF)是由英特尔发起,用于提供开源的音频 DSP 固件和开发工具
密码算法库
modules/crypto 下
- mbedtls: 提供加解密算法(AES, RSA, MD5/SHA1/SHA256/SHA512 etc.),X.509证书管理和TLS/DTLS协议支持
 - tinycrypt: 简单、快速、可配置的小型加密库,支持aes(对称加密)、sha256(哈希)等算法
 
调试器整合
modules/debug, 都是为zephyr提供trace后端
- TraceRecorder
 - mipi-sys-t
 - segger
 
文件系统
modules/fs
- fatfs
 - littlefs
 
可信执行性环境
module/tee
- tf-m: trusted-firmware-a
 - tf-a: trusted-firmware-m
 
功能库
- canopennode:开源的 CANopen 协议栈
 - gui/lvgl: 轻量级通用型图形库lvgl
 - loramac-node: 开源的LoRaWAN 终端设备软件栈
 - nanopb: Google数据序列化Protocol Buffers协议的轻量级实现
 - openthread:开源的thread协议,用于低功耗物联网的网状网络协议
 - tflite-micro:Google的TensorFlow Lite,用于嵌入上的机器学习推理
 - uoscore-uedhoc 提供嵌入式设备上的IOT安全协议OSCORE和EDHOC实现
 - zscilib: Zephyr Scientific Library,在资源受限的嵌入式硬件设备环境中提供科学计算、数据分析和数据处理的功能。
 - chre:Google提供的在低功耗处理器上运行应用程序的基于事件驱动的系统
 - liblc3:LC3 audio codec
 - lz4:快速压缩算法
 - open-amp:开源的异构处理器通信协议栈
 - picolibc:适用于小型微控制器嵌入式系统的C标准库,从newlib-nano发展而来
 - thrift:轻量级的远程调用框架
 - zcbor:CBOR库,提供良好压缩性,扩展性强,不需要进行版本协商的二进制数据交换形式, 用于数据序列化
 
以外部模块形式管理的其它功能模块
有如下外部软件并为放在module下,但在构建和管理上是以外部模块的形式进行
tools
与module平级,下属两个功能模块
- edtt: 嵌入式测试工具
 - net-tools: 为zephyr qemu提供linux host上的网络支持
 
bootloader
与module平级,下面放mcuboot,该mcuboot以zephyr的soc/driver做为支撑