0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RTEMSチュートリアル(その1)

0
Last updated at Posted at 2025-12-14

はじめに

Space ROSは、その基盤となるOSの一つとして RTEMS(Real-Time Executive for Multiprocessor Systems) に着目しています1

本記事は、Space ROSにおけるRTEMSの利用を見据えて、RTEMSの基礎から実践的な使い方までを紹介するシリーズの第1弾となります。
今回は、RTEMSの概要とHello Worldチュートリアルを通じて、RTEMSの環境構築と基本的な動作を紹介します。

本記事の構成

  • 第1節: RTEMSとリアルタイムOSの基礎知識
  • 第2節: ハンズオン(環境構築〜Hello World実行)
  • 参考資料: 関連リンク集

RTEMSとリアルタイムOSの基礎知識

RTEMSについては、以下のSpace ROS Advent Calendar 2024の記事でも紹介していますので、併せてご参照ください。

リアルタイムOS (RTOS) とは?

リアルタイムOS(RTOS)とは、決められた時間内に必ず応答することを保証するオペレーティングシステムです。汎用OSとの最大の違いは、処理速度の速さよりも「予測可能性」を重視している点にあります。RTOSでは、タスクの優先度に応じたスケジューリングが行われ、高優先度のタスクが確実に実行されることが保証されます。

RTOSは、ロボット制御、航空機・宇宙機器、工場の制御システムなど、時間制約が厳しく、遅延が許されないシステムで広く利用されています。

ハードリアルタイム vs ソフトリアルタイム

リアルタイムOSは、応答時間の保証レベルによって「ハードリアルタイム」と「ソフトリアルタイム」の2種類に分類されます。

ハードリアルタイムは、決められた時間内に必ず応答することが絶対条件となるシステムです。わずかな遅延でも致命的な結果を招く可能性があるため、応答時間の保証が厳格に求められます。人工衛星のオンボードコンピュータ(OBC)や航空機の制御システムなど、人命や重要なミッションに関わるシステムで採用されています。

一方、ソフトリアルタイムは、ほとんどの場合で時間内に応答することが求められますが、多少の遅延が許容されるシステムです。オーディオやビデオ配信などのマルチメディアアプリケーションがこれに該当し、遅延が発生しても品質が多少低下する程度で、システム全体の致命的な障害にはつながりません。

RTEMSは、ハードリアルタイムシステムとして設計されており、厳格な時間制約が求められる宇宙・航空分野で広く利用されています。

特徴 ハードRT ソフトRT
応答保証 絶対保証 ほぼ保証
遅延が許されるか 許されない 許容可能
衛星OBC, 航空制御 オーディオ, ビデオ配信

RTEMSとは?

RTEMS(Real-Time Executive for Multiprocessor Systems)は、オープンソースの組込み向けリアルタイムオペレーティングシステム(RTOS)です。主な特徴は以下の通りです。

  • POSIX API 互換
  • マルチプロセッサ(SMP)対応
  • 高信頼性: NASA/ESAの人工衛星やロケットで採用
  • クロスコンパイルで様々なCPUアーキテクチャに対応
  • 小型ながらもネットワークスタックやファイルシステム搭載
  • POSIX標準のタスク・同期APIが利用可能
  • 組込み機器向けに最適化されたメモリ管理
  • BSP (Board Support Package) によって複数ハードに対応
    • i386, ARM, LEON3, PowerPC など
  • シングルボードコンピュータやシミュレータ(QEMU)で動作可能
  • サンプルコードやツールが豊富で学習しやすい

RTEMSは、宇宙・航空分野での実績が豊富であり、NASAやESAのミッションで広く採用されています。また、産業制御や防衛システムなど、信頼性が求められる組込みシステムにも利用されています。

RTEMSと他のRTOSとの比較

RTEMS以外にも多くのリアルタイムOSが存在しますが、以下に代表的なRTOSとの比較表を示します。

OS ライセンス POSIX互換 実績 / 特徴
RTEMS BSDライセンス 宇宙・防衛、組込み研究向け
FreeRTOS MIT 組込み一般、軽量
VxWorks 商用 航空・産業制御向け
Xenomai GPL Linux RT補完、低遅延制御
Zephyr Apache 2.0 部分的 IoT / 小型組込み、センサ・BLE対応

RTEMSは、オープンソースでありながら高い信頼性とPOSIX互換性を備えている点が特徴です。特に宇宙・防衛分野での実績が豊富であり、教育・研究用途にも適しています。

ハンズオン

本節では、RTEMSの環境構築からHello Worldアプリケーションのビルド・実行までを紹介します。
WSL2のUbuntu 22.04での動作を確認していますが、他のLinux環境でも同様の手順で構築可能です。また、すべてターミナル上の作業で完結します。

必要ツールの導入

まずは、aptで必要なツールをインストールします。

sudo apt update
sudo apt install -y git build-essential python3 python3-pip \
qemu-system-x86 wget unzip bison flex texinfo gawk \
libgmp-dev libmpfr-dev libmpc-dev zlib1g-dev

RTEMS Source Builder (RSB) 取得

RTEMSプロジェクトには、クロスコンパイラやRTEMSカーネルを自動でビルドするためのツール「RTEMS Source Builder (RSB)」が用意されています。まずはRSBを取得し、環境チェックを行います。

git clone https://gitlab.rtems.org/rtems/tools/rtems-source-builder.git rsb
cd rsb
git checkout 6
./source-builder/sb-check

RTEMS Kernel 取得

RSBの準備ができたら、RTEMSカーネル本体を取得します。

cd ~
git clone https://gitlab.rtems.org/rtems/rtems.git
cd rtems
git checkout 6

クロスツールチェインのビルド

RSBを使って、i386向けのクロスコンパイラをビルドします。

cd ~/rsb
./source-builder/sb-set-builder --prefix=$HOME/rtems/6 6/rtems-i386
export PATH=$HOME/rtems/6/bin:$PATH

カーネル・BSPビルド

RSBを使って、RTEMSカーネルとi386/pc386 BSPをビルドします。

cd ~/rsb/rtems
../source-builder/sb-set-builder --prefix=$HOME/rtems/6 --target=i386-rtems6 --with-rtems-bsp=i386/pc386 --with-rtems-tests=yes 6/rtems-kernel

サンプルアプリ取得・ビルド

RTEMSのサンプルアプリケーション群を取得し、ビルドします。

cd ~
git clone https://gitlab.rtems.org/rtems/rtos/rtems-examples.git
cd rtems-examples
git checkout 6
git submodule update --init --recursive
./waf configure --rtems=$HOME/rtems/6 --rtems-tools=$HOME/rtems/6  --rtems-bsps=i386/pc386
./waf build

サンプルアプリ実行

ビルドが完了したら、Hello WorldアプリケーションをQEMU上で実行します。

rtems-run --rtems-bsp=pc-qemu build/i386-rtems6-pc386/hello/hello_world_c/hello.exe

上記を実行し、以下のような出力が得られれば成功です。

*** HELLO WORLD TEST ***
Hello World
*** END OF HELLO WORLD TEST ***

その他のアプリ(1)

RTEMSのサンプルアプリケーション群には、Hello World以外にも様々なサンプルが含まれています。以下に主なディレクトリとその説明を示します。

Directory Description
benchmarks Collection of various public benchmark program
classic_api Classic API examples (no LED)
cxx C++ examples
file_io File I/O
filesystem File systems, check inside for more details
gdb Programs to exercise GDB features
hello Hello World Variations
led LED Blinker Variations
lvgl_hello LittleVGL graphics app example using libbsd framebuffer
micromonitor MicroMonitor interaction examples
misc Miscellaneous
posix_api POSIX API examples (no led)
schedsim RTEMS Scheduler Simulator examples
ticker Ticker Variations
uboot U-Boot interaction examples

参考資料・参考ページ

公式サイト

ドキュメント

Space ROS関連

ハンズオン参考

関連RTOS情報

おわりに

本記事では、RTEMSの基礎知識とHello Worldチュートリアルを通じて、RTEMSの環境構築と基本的な動作を紹介しました。
今後のシリーズでは、RTEMS上でのROS 2の動作や、より高度なRTEMSの機能についても取り上げていく予定です。ぜひご期待ください。

  1. https://space-ros.github.io/docs/rolling/Introduction/How-Space-ROS-Differs.html#space-specific-functionality

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?