Ник:
Пароль:

Контакты

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 Редактировалось 04.06.2025 13:00
0
Сообщение: 1
sasamy
4.71

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

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

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

У процессоров разные версии ядер, патч нужно выбрать для своего варианта

а) Для плат на процессоре t113

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

б) Для плат на процессоре a40i

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

в) Для плат на t507 в материалах штатно используется ядро 6.7.9 поэтому его тоже надо патчить, но патч есть только для 6.7 так что из него надо будет удалить изменения которые уже есть в ядре 6.7.9

wget -O - https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.7/patch-6.7-rt6.patch.gz | zcat > ./linux/patch-6.7-rt6.patch

удалить из него два ненужных diff котрые есть в ядре 6.7.9

sed -i '\|diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h|,+23d' ./linux/patch-6.7-rt6.patch

sed -i '\|diff --git a/include/linux/srcu.h b/include/linux/srcu.h|,+12d' ./linux/patch-6.7-rt6.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&num=3#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