RT-Linux

リアルタイムOSのために Debian に RT-Linux をインストールしました。

環境:
Debian 11, Xfce
Intel Core i5-6300U vPro (2.4GHz, 2core, 4threads)
SSD 256GB
メモリ 8GB
14インチ液晶 フルHD (1920x1080)
ノートPC

 
Synaptic パッケージマネージャ (root 権限必要)
セクション:カーネルとモジュール

現在
linux-headers-5.10.0-9-amd64    5.10.70-1    Header files for Linux 5.10.0-9-amd64
linux-headers-5.10.0-9-common    5.10.70-1    Common header files for Linux 5.10.0-9
linux-headers-amd64    5.10.70-1    Linux amd64 構成向けヘッダファイル (メタパッケージ)
linux-image-5.10.0-8-amd64    5.10.46-5    Linux 5.10 for 64-bit PCs (signed)
linux-image-5.10.0-9-amd64    5.10.70-1    Linux 5.10 for 64-bit PCs (signed)
linux-image-amd64    5.10.70-1    64 ビットマシン用 Linux (メタパッケージ)

候補
linux-headers-5.10.0-9-rt-amd64    5.10.70-1    Header files for Linux 5.10.0-9-rt-amd64
linux-headers-5.10.0-9-common-rt    5.10.70-1    Common header files for Linux 5.10.0-9-rt
linux-headers-rt-amd64    5.10.70-1    Header files for Linux rt-amd64 configuration (meta-package)
linux-image-5.10.0-8-rt-amd64    5.10.46-5    Linux 5.10 for 64-bit PCs PREEMPT RT (signed)
linux-image-5.10.0-9-rt-amd64    5.10.70-1    Linux 5.10 for 64-bit PCs, PREEMPT RT (signed)
linux-image-rt-amd64    5.10.70-1    64 ビットマシン用 Linux (メタパッケージ)

 
指定してインストール。再起動後に RT-Linux になる。uname -a でシステム情報を確認

 
ドキュメント1
https://wiki.linuxfoundation.org/realtime/documentation/howto/applications/start

gcc example.c -pthread -o example
su
パスワード: ****
./example
※ su でないと実行できない (create pthread failed エラーが出る)。以下, 同じ

example.zip

 
定周期タスクを実行する場合

gcc example_cyclic.c -pthread -o example_cyclic
./example_cyclic

example_cyclic.zip

 
ドキュメント2
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/reference_guide/sect-using_library_calls_to_set_priority

こちらの rt_main.c を rt_main_sched.c に変えて, rt_main.obj を作成。リンカはそのまま
実行時, 他のすべてのアプリケーションを閉じる (例えば, DebianCUI モードに切り替える)

rt_main_sched.zip

 
/* 本プロセスの優先度を設定する */
#include <sched.h>

struct sched_param sp = { .sched_priority = 99 };
ret = sched_setscheduler(0, SCHED_FIFO, &sp);
if (ret == -1) {
    perror("sched_setscheduler");
    return 1;
}

/* 実行結果 */

f:id:sato-7411:20211103020739p:plain

f:id:sato-7411:20211103020804p:plain

 

□ Start, OnStep, Terminate 等で呼び出せるように書き換え

rt_main_sched.zip

NewSimModel_main.zip (再掲)