На примере 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