Это гостевой пост о гетерогенной многопроцессорной обработке (HMP) , Real-Time Linux и Xenomai для разработки систем реального времени на Linux, написанный Гилерме Фернандесом, Раулем Муньосом, Леонардо Вейгой и Брэндоном Шиббли, работающими в Toradex.
Введение
Сфера применения процессоров приложений продолжает расширяться. Системы-на-кристалле, обычно на базе ядер ARM Cortex-A, осваивают области, где традиционно доминировали маломощные ARM Cortex-M и другие микроконтроллеры. Этот тренд обусловлен несколькими факторами:
- Жесткие требования к подключению, связанные с IoT, причем не только на аппаратном уровне, но и в части ПО, протоколов и безопасности
- Потребность в высокоинтерактивных интерфейсах, таких как мультитач, экраны высокого разрешения и сложные графические оболочки
- Снижение стоимости SoC благодаря росту объемов производства и новым производственным возможностям.
Типичные примеры, иллюстрирующие вышесказанное – ежедневно наблюдаемые случаи модернизации продуктов при переходе с микроконтроллера на микропроцессор. Такой шаг создает новые сложности из-за усложнения проектирования и более высокого уровня абстракции ОС. Трудности аппаратного проектирования преодолеваются использованием референсных конструкций и готовых решений, таких как модульные компьютеры или одноплатные ЭВМ. На уровне ОС широко распространены встраиваемые дистрибутивы Linux. Огромный мир open-source инструментов упрощает разработку сложных многофункциональных встраиваемых систем. Подобная разработка на микроконтроллерах была бы крайне трудоемкой. Несмотря на преимущества, использование ОС вроде Linux вызывает вопросы и сомнения при обсуждении детерминизма и приложений реального времени.
Распространенная стратегия разработчиков – разделение задач с жесткими временными ограничениями и обычных задач между разными процессорами. Так, Cortex-A или аналоги обычно выбирают для мультимедиа и коммуникаций, а микроконтроллер сохраняют для обработки детерминированных задач реального времени. Цель статьи – представить варианты разработки систем реального времени на процессорах приложений. Рассматриваются три решения для обеспечения возможностей реального времени.
Гетерогенная многопроцессорная обработка
Гетерогенная многопроцессорная обработка (HMP) – аппаратное решение. Процессоры приложений, такие как серия NXP i.MX7 , NXP i.MX6SoloX и грядущая серия NXP i.MX8 , содержат разнородные ядра. Например, i.MX7S – двухъядерный процессор с Cortex-A7 @ 800 МГц и Cortex-M4 @ 200 МГц. Базовый принцип: интерфейс пользователя и высокоскоростные подключения реализуются на абстрагированной ОС (Linux, ядро Cortex-A), а управляющие задачи параллельно выполняются на ОС реального времени (FreeRTOS) на ядре Cortex-M. Оба ядра имеют доступ к общей памяти и периферии, обеспечивая гибкость распределения задач. См. Рисунок 1.

Преимущества подхода HMP:
- Упрощенное повторное использование унаследованного ПО для микроконтроллеров
- Упрощенное обновление ПО (ядро M4), так как прошивка может храниться в ФС ОС Cortex-A
- Гибкость выбора периферии для каждого ядра. Программная настройка позволяет вносить изменения без переделки аппаратной части.
Дополнительная информация по разработке для HMP:
- Балансирующий робот с использованием гетерогенной асимметричной архитектуры i.MX 7 на FreeRTOS и Qt
- FreeRTOS на Cortex-M4 модуля Colibri iMX7 .
Toradex , Antimicro и The Qt Company совместно создали демонстрационного робота TAQ – балансирующий перевернутый маятник на модуле Colibri iMX7 . Интерфейс построен на Linux с фреймворком QT (Cortex-A7), а управление моторами/балансировка – на Cortex-M4. Межъядерная связь используется для управления роботом и анимации его “лица”, как показано в видео ниже.
Real-Time Linux
Второй подход – программный. Linux не является ОС реального времени , но существуют инициативы, значительно улучшающие его детерминизм. Один из проектов – Real-Time Linux . Это набор патчей (PREEMPT_RT), добавляющих новые варианты вытеснения в ядро Linux, а также другие функции для задач реального времени. Документация по применению патча и разработке приложений доступна на вики Real-Time Linux .
Тесты с патчами PREEMPT_RT на Colibri iMX6DL демонстрируют улучшение производительности реального времени. Инструкции по подготовке образа Toradex Linux с патчем доступны по ссылке . Простое приложение переключало GPIO на частоте 2.5 КГц (200 мкс вкл/200 мкс выкл). Выходной сигнал анализировался осциллографом. Гистограммы ниже сравнивают стандартное ядро Linux с Voluntary Preemption (сверху) и ядро с PREEMPT_RT и Real-time Preemption (снизу). По оси X – период выборки, по оси Y – количество выборок. Таблица под графиком показывает наихудшие и средние значения.

Рисунок 2: Гистограмма меандра, сгенерированного стандартным ядром (сверху) и ядром Preempt-RT (снизу) – Нажмите для увеличения
Описание |
Выборки |
Минимальный (мкс) |
Наихудший случай для 99% образцов (мкс) |
Наихудший случай (мкс) |
Медиана (мкс) |
Среднее значение (мкс) |
Стандартное ядро |
694,780 |
36 |
415 |
4,635 |
400 |
400 |
Ядро PREEMPT_RT |
683,593 |
369 |
407 |
431 |
400 |
400 |
Таблица 1: Сравнение стандартного ядра и ядра реального времени при генерации прямоугольного сигнала.
Пример программной системы с использованием патча PREEMP_RT предоставляет Codesys Solutions . Их решение использует ядро Linux реального времени совместно с OSADL (Open Source Automation Development Lab) для развертывания программных ПЛК, уже широко применяемых в промышленной автоматизации на тысячах устройств. В представленном ниже видео показана работа решения на Apalis iMX6Q.
Xenomai
Xenomai — еще один популярный фреймворк для превращения Linux в систему реального времени. Xenomai достигает этого путем добавления ко-ядра к основному ядру Linux. Ко-ядро обрабатывает критичные ко времени операции и имеет более высокий приоритет. Для использования возможностей реального времени Xenomai необходимо применять специализированные API (libcobalt), которые обеспечивают взаимодействие пользовательских приложений с ядром Cobalt, отвечающим за гарантированное исполнение в реальном времени.

Рисунок 3: Конфигурация Xenomai с двумя ядрами
Инструкции по установке Xenomai на целевое устройство доступны на сайте Xenomai. Также существует перечень совместимого оборудования , включающий всю серию SoC NXP i.MX.
Для проверки работы Xenomai на i.MX6 SoC был проведен эксперимент с использованием модуля Colibri iMX6DL от Toradex. Применялась та же методика тестирования, что и для расширения реального времени Linux. Фрагменты кода ниже демонстрируют использование API Xenomai.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
void blink(void *arg __attribute__((__unused__))) { int iomask = 0; rt_task_set_periodic(NULL, TM_NOW, TIMESLEEP); while(1) { rt_task_wait_period(NULL); if(iomask) SET_G35; else CLR_G35; iomask = 1 - iomask; } } int main(void) { /* Task Creation */ rt_task_create(&blink_task, "blinkLed", 0, 99, 0); rt_task_start(&blink_task, &blink, NULL); getchar(); rt_task_delete(&blink_task); return 0; } |
Результаты сравнения Xenomai со стандартным ядром Linux представлены на диаграмме. Решение реального времени демонстрирует явное преимущество — с еще большим отрывом — по времени отклика относительно стандартного ядра Linux.

Рисунок 3: Гистограмма прямоугольного сигнала, сгенерированного стандартным ядром (вверху) и Xenomai (внизу) — Нажмите для увеличения
Описание |
Образцы |
Минимальное (мкс) |
Наихудший случай для 99% образцов (мкс) |
Наихудший случай (мкс) |
Медиана (мкс) |
Среднее значение (мкс) |
Стандартное ядро |
694,780 |
36 |
415 |
4,635 |
400 |
400 |
Реализация Xenomai |
1,323,521 |
386 |
402 |
414 |
400 |
400 |
Таблица 2: Сравнение стандартного ядра и реализации Xenomai при генерации прямоугольного сигнала.
Заключение
В статье представлен краткий обзор решений для разработки систем реального времени на application-процессорах под управлением ОС Linux. Это отправная точка для разработчиков, использующих микропроцессоры и требующих детерминированного управления в реальном времени.
Рассмотрены аппаратный подход с использованием гетерогенных многопроцессорных SoC и два программных решения: патч Linux-RT и Xenomai. Представленные результаты не являются сравнением ОС или методик реального времени. Каждое решение имеет сильные и слабые стороны, применимость которых зависит от конкретной задачи.
Ключевой вывод: существуют несколько эффективных решений для надежного использования Linux на application-процессорах в системах реального времени.
Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.