Выпуск свободной операционной системы реального времени Zephyr 1.8

Компания Intel представила выпуск Zephyr 1.8, компактной операционной системы реального времени (RTOS), нацеленной на оснащение устройств, соответствующих концепции «Интернет вещей» (IoT, Internet of Things). Наработки проекта распространяются под лицензией Apache 2.0. Система адаптирована для установки на платы на базе архитектуры x86 (Arduino 101, Quark D2000, Galileo Gen1/Gen2, Minnowboard Max, tinyTILE), ARMv7 (Arduino Due, Freescale FRDM-K64F, 96Boards Carbon, CC3200 LaunchXL, Curie, NXP FRDM, Hexiwear, ST Nucleo, OLIMEX, ARM V2M и т.д.) и ARC (Arduino 101, DesignWare), а также для тестирования в эмуляторе на базе QEMU.

Ядро Zephyr рассчитано на потребление минимальных ресурсов (от 8 до 512 Кб ОЗУ в зависимости от компоновки), что позволяет использовать его на различных портативных системах, от простых встраиваемых датчиков и чипов для одежды, до умных часов и беспроводных шлюзов для IoT-устройств. Из средств сетевого и беспроводного взаимодействия ядром поддерживается Bluetooth 5, IPv4, IPv6, IEEE 802.15.4, Bluetooth Low Energy (BLE), 6lowPAN (IPv6 over Low power Wireless Personal Area Networks), USB, CoAP (Constrained Application Protocol), DTLS (Datagram Transport Layer Security). Доступны драйверы ввода/вывода для ADC, GPIO, I2C и SPI.

Zephyr 1.8 является первым выпуском, после перемещения основного дерева исходных текстов на GitHub. Ожидается, что перемещение разработки на GitHub упростит отправку запросов на изменение, расширит возможности по рецензированию кода и будет способствовать подключению к разработке новых участников. Ключевые улучшения в выпуске Zephyr 1.8:

  • В ядро добавлена опция с реализацией режима tickless, обеспечивающего независимую от сигналов таймера многозадачность. В данном режиме ядро может длительное время находиться в состоянии сна, пробуждаясь только при наступлении требующего обработки события, но без периодических пробуждений для обработки сигналов таймера;
  • Начальная поддержка возможностей, определённых в спецификации Bluetooth 5.0. На платах Nordic Semiconductor добавлена возможность передачи данных поверх Bluetooth Low Energy на скорости 2Mbit/s;
  • Добавлена поддержка сборка с использованием сторонних компиляторов. В том числе теперь возможна сборка в окружении Microsoft Windows с использованием инструментария MSYS2 вместо MinGW, а также сборки из Windows для любых целевых систем, требующих поддержки Device Tree;
  • Реализована и включена для некоторых платформ начальная поддержка блоков MMU/MPU (Memory Protection Units), обеспечивающих изоляцию областей памяти между разными исполняемыми контекстами;
  • В сетевую подсистему добавлены библиотеки с реализацией HTTP-сервера и клиента, что позволяет легко встроить данную функциональность в приложения, не прибегая к сторонним библиотекам. Добавлена поддержка фрагментации пакетов IPv6. Полностью переработан код для работы с сетевыми буферами. Добавлены реализации DNS-резолвера и NATS. Обеспечена поддержка IEEE 802.15.4;
  • Внесены оптимизации в модель многопоточного выполнения кода, сетевые интерфейсы и IP-стек;
  • Добавлены библиотеки для работы с I2C и JSON
  • Добавлена возможность использования сторонних инструментов трассировки отладки;
  • Модернизирована сборочная система;
  • Добавлена поддержка варианта GCC для архитектуры Xtensa;
  • Добавлена поддержка плат Nucleo STM32F413, Nucleo L432KC, STM32L496G, ARM FRDM-KL25Z, STM32F469I-DISCO, disco_l475_iot1, CC3220SF_LAUNCHXL;
  • Добавлены драйверы для nRF5 IEEE 802.15.4, KW41Z IEEE 802.15.4, MCUX TRNG, SiFive Freedom E310, lps22hb, lsm6dsl, lis2dh;
  • В будущих выпусках ожидается поддержка POSIX API, BSD Socket, LWM2M, улучшенная поддержка LLVM, переход на CMake, SMP, AMP и специализированная среда разработки.

Основные особенности ядра Zephyr:

  • Работа в едином адресном пространстве (SASOS, Single Address Space Operating System) — для всех процессов предоставляется только одно глобальное совместно используемое виртуальное адресное пространство. Специфичный для приложений код комбинируется с адаптированным под конкретное применение ядром и образует монолитный исполняемый файл для загрузки и запуска на определённом оборудовании. Код приложений и ядра выполняются в одном общем адресном пространстве.
  • Широкие возможности по настройке. В системный образ могут включаться только те возможности ядра, которые требуются для выполнения приложения;
  • Все системные ресурсы определяются на этапе компиляции, что сокращает размер кода и увеличивает производительность;
  • Минимальные проверки ошибок во время выполнения, что также сокращает размер кода и увеличивает производительность. В форме подключаемой надстройки для отладки предлагается специальная отладочная инфраструктура, позволяющая выявлять ошибки во время разработки приложения, создавая специальные тестовые образы;
  • Обширный набор привычных сервисов для разработки:
    • Многопоточность на основе приоритетов с вытесняющей и совместной моделью передачи управления;
    • Подключение обработчиков прерываний, регистрируемых как на этапе компиляции, так и во время выполнения;
    • Средства синхронизации данных между потоками — двоичные семафоры, семафоры-счетчики и мьютексы;
    • Средства передачи данных между потоками — простые очереди сообщений, расширенные очереди сообщений и байтовые потоки;
    • Сервисы для распределения памяти — динамическое выделение памяти и очистка для блоков памяти фиксированного и динамического размера;
    • Механизмы управления питанием: режим tickless (вместо фиксированного вызова по таймеру, процессор просыпается только при наличии событий) и расширенная инфраструктура управления простоем процессора (idle).
  • Разработка с оглядкой на безопасность. Все стадии разработки проходят обязательные этапы подтверждения безопасности кода: fuzzing-тестирование, статический анализ, испытания на проникновение, рецензирование кода, анализ внедрения бэкдоров и моделирование угроз. Поставка в виде статически собранного исполняемого файла ограничивает вектор атак только скомпилированным кодом, без возможности загрузить свои модули.

© OpenNet