Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
Использование режима реального времени в Linux
sasamy
Добавлено 09.03.2025 13:09
0
Сообщение: 1
sasamy
4.71

Пункты: 85192
Регистрация: 14.08.2009
На примере t113 c 32 битным ядром arm - для таких процессоров нужен патч для ядра. Начиная с ядра 6.12 для 64 битных arm патчить не нужно.

На момент написания в buildroot ядро версии 6.1-rc3. После патча ядро нужно собирать с нуля, поэтому если оно уже собрано нужно удалить его сборку, находясь в корне buildroot

rm -r ./output/build/linux-custom

скачать патч

wget -O - https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.1/older/patch-6.1-rc3-rt2.patch.gz | zcat > ./linux/patch-6.1-rc3-rt2.patch

сконфигурировать - сначала нужно будет включить отображение опций для экспертов и после этого в меню будет доступен выбор PREEMT_RT - Real-Time

make linux-menuconfig

General setup --->

[*] Configure standard kernel features (expert users) --->
Preemption Model (Fully Preemptible Kernel (Real-Time)) --->

выйти с сохранением настроек и собрать

make

После загрузки на плату нового образа ядра, проверить можно так

# uname -v
#1 SMP PREEMPT_RT Sun Mar 9 00:53:21 MSK 2025

Означает что ядро собрано с поддержкой реального времени. Что это даёт? Например, есть приложение работающее на высокой скорости UART

http://starterkit.ru/html/index.php?name=forum&op=view&id=32147&last#32173

без проблем успевает принимать пакет до 4 кб без потерь на скорости 4 000 000, но это на не нагруженой системе - кроме него ничего не запущено. Патч PREEMT_RT позволяет повысить его приоритет чтобы никакие процессы не помешали ему.

В busybox по умолчанию включена утилита chrt которая позволяет запускать процесс с нужным приритетом. Например запустить utest с высшим приоритетом с алгоритмом планирования round robin

# chrt -r 99 ./utest

Посмотреть возможные приоритеты для разных планировщиков

# chrt -m
SCHED_OTHER min/max priority : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
SCHED_IDLE min/max priority : 0/0
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux