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做为支撑