Zephyr — открытая операционная система реального времени, которая выросла из внутризаводского проекта Intel в полноценное сообщество под эгидой Linux Foundation. Сегодня ядро поддерживает более 170 аппаратных платформ, а релиз 4.1 приносит ускорение ядра, экспериментальный Rust и USB MIDI 2.0. В этой статье мы разложим Zephyr на атомы: разберём архитектуру, безопасность, покажем реальный workflow и пошагово развернём окружение на Ubuntu, macOS и Windows.
Краткая история и философия проекта
Проект стартовал в 2016 году как попытка объединить усилия производителей микроконтроллеров. Идея проста: коллективная разработка дешевле и быстрее, чем десятки проприетарных RTOS без драйверов и CVE‑процессов. За восемь лет Zephyr созрел до LTS‑ветки 3.7, а релиз 4.1 сигнализирует о готовности к «взрослым» задачам: сертификация по PSA, расширенная поддержка 64‑бит RISC‑V и инструменты для Rust‑разработчиков.
Архитектура ядра: от планировщика до сетевого стека
- Конфигурируемость через Kconfig. Любая функция включается в .menuconfig и выходит в
autoconf.h
, откуда подхватывается компилятором. - Два режима планирования: кооперативный для минимальной латентности и приоритетно‑выборный для сложных сценариев.
- Статическая аллокация ресурсов. В отличие от FreeRTOS heap 4 здесь по умолчанию нет динамического выделения, что устраняет фрагментацию памяти.
- Device Driver Model. Драйвер — это структура
struct device
c указателями на API. Регистрация происходит макросомDEVICE_DT_DEFINE
. - Расширенная безопасность памяти: защита стека, MPU, отслеживание прав на kernel объекты.
- Сетевой стек native IP с поддержкой IPv6, 6LoWPAN, TCP, DTLS, MQTT и CANopen.
- Подсистемы: USB Device/Host, файловые системы LittleFS и FAT, логирование через CBPRINTF, shell, DFU.
Безопасность как процесс
Zephyr применяет Secure Development Lifecycle: статический анализ, fuzz‑тесты, код‑ревью и обязательные DCO‑подписи. Есть PSIRT и CVE‑трекер. Проект уже прошёл PSA Certified Level 1, работает над IEC 61508, а значит, в будущем возможны SIL‑2 приложения в промышленной автоматике.
Что нового в релизе 4.1
Оптимизация производительности
Переработан контекст‑свитч, очередь готовых потоков и обработчики прерываний. Бенчмарк thread_metric показывает ускорение от 20 до 60 %. Включение MULTIQ даёт ещё ≈40 % прироста кооперативному планировщику.
Поддержка IAR Arm Toolchain
Достаточно установить переменную ZEPHYR_TOOLCHAIN_VARIANT=iar
и IAR_TOOLCHAIN_PATH
. CMake сам подберёт ключи оптимизации.
Экспериментальный Rust
Компонент rust_ns
добавляет crate zephyr
. Пример «Hello World» на Rust:
// src/main.rs
#![no_std]
#![no_main]
use zephyr::println;
zephyr::init!(start);
fn start() {
println!("Привет из Rust на Zephyr!");
zephyr::sleep_ms(1000);
}
Новые драйверы и платы
Добавлены Raspberry Pi Pico 2, CH32V003, десятки CAN+USB плат. Появился драйвер USB MIDI 2.0 — можно собирать MIDI‑клавиатуру буквально за вечер.
Развёртывание: пошаговая установка и первый проект
Общие зависимости
Понадобится CMake 3.20+, Python 3.10+, devicetree‑compiler 1.4.6+. Остальное ставится скриптами ниже.
Ubuntu 22.04+
# 1. Обновляем систему
sudo apt update && sudo apt upgrade -y
# 2. Ставим зависимости
sudo apt install --no-install-recommends git cmake ninja-build gperf /
ccache dfu-util device-tree-compiler wget python3-venv /
python3-pip python3-setuptools python3-wheel xz-utils file /
build-essential libsdl2-dev libmagic1 -y
# 3. Создаём рабочую папку и виртуальное окружение
mkdir -p ~/zephyrproject
python3 -m venv ~/zephyrproject/.venv
source ~/zephyrproject/.venv/bin/activate
# 4. Устанавливаем west и скачиваем исходники
pip install west
west init ~/zephyrproject
cd ~/zephyrproject
west update
west zephyr-export
west packages pip --install
# 5. Ставим Zephyr SDK (по умолчанию в ~/.zephyr-sdk)
cd zephyr
west sdk install
macOS 13+
# 1. Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 2. Зависимости
brew install cmake ninja gperf python3 ccache qemu dtc libmagic wget openocd
# 3. Путь к Python
echo 'export PATH="$(brew --prefix)/opt/python/libexec/bin:$PATH"' >> ~/.zprofile
source ~/.zprofile
# 4. Репозиторий Zephyr
mkdir -p ~/zephyrproject
python3 -m venv ~/zephyrproject/.venv
source ~/zephyrproject/.venv/bin/activate
pip install west
west init ~/zephyrproject
cd ~/zephyrproject
west update
west zephyr-export
west packages pip --install
cd zephyr
west sdk install
Windows 10+
:: Открыть PowerShell обычного пользователя
winget install Kitware.CMake Ninja-build.Ninja oss-winget.gperf /
python Git.Git oss-winget.dtc wget 7zip.7zip -e --id
:: Создать рабочую директорию
cd %HOMEPATH%
python -m venv zephyrproject/.venv
zephyrproject/.venv/Scripts/activate.bat
pip install west
:: Клонировать исходники
west init zephyrproject
cd zephyrproject
west update
west zephyr-export
west packages pip --install
:: Установить Zephyr SDK
cd zephyr
west sdk install
Компиляция «Blinky»
После установки SDK и активации виртуального окружения:
# Пример для платы nrf52840dk_nrf52840
cd ~/zephyrproject/zephyr
west build -b nrf52840dk_nrf52840 samples/basic/blinky -p always
west flash
Реальное использование: от прототипа до OTA‑обновлений
Devicetree и драйверы
Описание железа оформляется в .dts. Пример подключения I2C датчика температуры:
/ {
zephyr,user {
compatible = "zephyr,user";
temp@0 {
compatible = "ti,tmp117";
reg = <0x48>;
label = "TMP117";
};
};
};
В драйвере:
const struct device *temp = DEVICE_DT_GET(DT_NODELABEL(tmp117));
sensor_sample_fetch(temp);
sensor_channel_get(temp, SENSOR_CHAN_AMBIENT_TEMP, &val);
OTA через MCUboot
- Включаем загрузчик:
CONFIG_BOOTLOADER_MCUBOOT=y CONFIG_IMG_MANAGER=y CONFIG_MCUBOOT_IMAGE_VERSION="1.0.0+0"
- Собираем
signed_by_mcuboot.bin
: - Передаём образ устройству по BLE/HTTP, где bootloader сверит подпись и перезагрузит MCU.
west sign -t imgtool -- --version 1.0.1
Логирование и трассировка
Подсистема LOG
выводит в UART или RTT. Пример:
LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);
void main(void) {
LOG_INF("Система стартовала");
while (1) {
LOG_DBG("Текущая температура: %d", temp_c);
k_sleep(K_SECONDS(5));
}
}
Twister: автотесты на CI
Twister — это фреймворк, который собирает и запускает тесты на локальном QEMU или внешних платах.
# Локально
scripts/twister -T tests/kernel -p qemu_x86 -y
# GitHub Actions
- name: Twister
run: |
west init .
west update
pip install -r zephyr/scripts/requirements.txt
scripts/twister -p qemu_cortex_m3 -T tests/drivers
Интеграция с VS Code
Расширение Zephyr Tools импортирует compile_commands.json
и даёт intellisense. Для отладки используется Cortex‑DAP и OpenOCD, конфиг — файл launch.json
.
Кейс: умный счётчик электроэнергии
- MCU: STM32L4 с 128 КБ RAM.
- Сетевой протокол: IPv6 поверх 6LoWPAN + CoAP.
- Питание от линейки 220 В → конвертер 3.3 В, поэтому режим tickless для экономии.
- За 48 часов собран прототип: измерение тока через INA219, отправка показаний каждые пять минут на MQTT брокер.
Конфигурация ядра:
CONFIG_NET_IPV6=y
CONFIG_NET_6LO=y
CONFIG_COAP=y
CONFIG_PM_DEVICE=y
CONFIG_LOG=y
CONFIG_LOG_PROCESS_THREAD=y
CI/CD полного цикла
Схема:
- Push в GitHub запускает workflow.
- Twister собирает тесты, QEMU гоняет unit‑тесты.
- Образ подписывается
imgtool
. - Артефакт заливается в S3, откуда сервер OTA раздаёт прошивки.
- Устройство проверяет версию и скачивает дифф‑патч Z‑std с частичной перезаписью flash.
Фрагмент .github/workflows/build.yml
:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Zephyr
uses: zephyrproject-rtos/action@v1
- name: Run Twister
run: scripts/twister -p qemu_x86 -T tests/kernel
- name: Build firmware
run: west build -b nrf52840dk_nrf52840 app -p always
- name: Sign image
run: west sign -t imgtool -- --version 1.2.${{github.run_number}}
Подводные камни
- Файлы Devicetree у старых плат иногда устарели — смотрите diff перед портированием.
- Библиотека tinycrypt не поддерживает SHA‑512 — при TLS 1.3 придётся тянуть mbedTLS.
- Большой сетевой стек не поместится в MCU с 64 КБ RAM — включайте лишь нужные протоколы.
Дорожная карта 2025‑2026
Планы включают: Wi‑Fi 6, Thread 1.3, Rust‑runtime без FFI, менеджер пакетов наподобие Cargo и сертификацию IEC 61508 SIL‑2.
Заключение
Zephyr — это не очередная «микро‑Linux», а конструктор, который берёт лучшее от open‑source: прозрачность, комьюнити и быстрый выпуск патчей. При грамотной конфигурации система занимает меньше 10 КБ flash и при этом умеет IPv6 и TLS. Если вам нужна надёжная платформа для продуктового IoT‑устройства, но вы не хотите писать драйверы и сетевой стек с нуля, Zephyr — достойный кандидат. А если найдёте баг — сделайте pull‑request: завтра он поможет тысячам разработчиков.