組み込みデバイス開発プロジェクトにおいて、適切な組み込みオペレーティングシステム(OS)選びは欠かせないプロセスです。私はキャリアを通じて、OS関連の課題にも長年携わってきました。今回は、皆さんがプロジェクトに最適なOSを選択する際の参考として、私や同僚のSanttu Ahonen、その他のエキスパートの方々のアドバイスをご紹介します。
本稿のトピック:
組み込みOSとは?
組み込みOSとは組み込みデバイス/組み込みシステム専用のOSで、デバイスが動作できるよう特定のタスクを確実に実行できるように設計されています。
組み込みシステムへのOSの実装
組み込みOSは何をするのか
組み込みOSは大抵、限られた特長と機能のみを備えています。デバイスの動作に必要な1つのアクションだけを実行することもあります。ただし、そのアクションを継続的に、毎回スケジュール通りに実行しなければなりません。
組み込みOSは、IoTデバイスをはじめとする多くのデバイスやシステムに搭載されます。
Qtのポートフォリオ管理担当シニア・プロダクトマネジャーを務めるSanttu Ahonenは次のように解説します。「組み込みOSは通常、無駄がなく効率的だ。組み込みハードウェアの大部分はキャパシティもリソースも少なく、消費電力にもメモリにも非常に限りがある」。
組み込みOSには以下のような長所と短所があります。
組み込みOSの長所:
- ローコストなものが多い。
- 消費電力が最小限であるなど、リソースの使用量が少ない。
- 性能上のトラブルが生じにくい。
組み込みOSの短所:
- 1つ、もしくはごく少数のアプリケーションしか実行できない場合が多い。
- 一度フレームワークを構築すると、デバイスに搭載したOSは後から改良しにくい。
- OSに問題が発生した場合のトラブルシューティングが難しい。
組み込みOSの例
組み込みOSには数十種類があります。多様なデバイスで使える汎用性の高いタイプもありますが、大部分の組み込みOSは特定のデバイスや業界向けです。組み込みOSの選択に当たっては、ハードウェアの設計と選択が大きく影響します。
組み込みOSは、「マイクロプロセッサとマイクロコントローラのどちらで実行するか」「特定の業界やデバイスでエンジニアが使用するタイプか」という2つの観点から分類できます。また組み込みOSは、組み込み向けのC言語をはじめとする複数のソフトウェア開発言語に対応します。
組み込みOS:マイクロプロセッサとマイクロコントローラのどちらで実行するか
マイクロプロセッサで実行する組み込みOS:
- 組み込みLinux(特にYoctoなどベンダー独自の派生品)
- WebOS
- Android
- Linux/Windowsデスクトップ
- QNX
- Integrity
- VxWorks
- UbuntuおよびDebian
- Windows for IoT
- Embedded Configurable Operating System (eCos)
マイクロコントローラで実行する組み込みOS:
- FreeRTOS
- Zephyr
- QNX
- Integrity
- VxWorks
- Embedded Configurable Operating System (eCos)
- マイクロコントローラのベアメタル:マイクロコントローラを搭載した組み込みシステムの中には、OSがないものもあります。OSを使わず、エンジニアがハードウェア上に直接アプリケーションを作成します。リアルタイムデッドラインが要件ではないプロジェクトで採られるアプローチです。
※リソースに制約のあるデバイス上でスマートフォンのようなユーザー体験を作成、提供するための、包括的なグラフィックスフレームワークおよびツールキットQt for MCUsについて読んでください。
組み込みOS:特定の業界やデバイスで使われることが多い
- 家電(テレビ、セットトップボックス:STBなど):組み込みLinux、Android、webOS
- 自動車:組み込みLinux、QNX、Integrity、Android
- 産業車両:組み込みLinux(オペレーター用端末)、RTOS(電子制御装置)
- 産業オートメーション:Windows/Linuxデスクトップ、組み込みLinux、ベアメタル(機械制御)
- 医療機器:組み込みLinux、QNX、VxWorks、FreeRTOS、ベアメタル
- 航空宇宙:VxWorks、組み込みLinux
組み込みOSと組み込み向けでないOSの違い
エンジニアによってデバイスに搭載された組み込みOSは、ユーザーが外側から制御できないシンプルなタスクを実行します。一方、デスクトップコンピュータに搭載されるような組み込み向けでないOS(非組み込みOS)は、ユーザーの操作に基づいてさまざまなアプリケーションを実行します。
一般用OSと組み込みシステム用OSの違い
組み込み向けでない(非組み込み)OSとは、コンピュータに使われているOSのことです。非組み込みOSはコンピュータシステムがソフトウェアやアプリケーションを実行し、多種多様なタスクをこなすのを可能にします。一方、組み込みOSは、組み込みデバイスが動作するために必要な最低限の(場合によっては瞬間的な)タスクをこなします。
組み込みOSとネットワークOSの違い
ネットワークOSは複数のコンピュータが必要なリソースを共有するのを可能にします。たとえば、ネットワークOS上のコンピュータがファイルやデータベース、プリンタといったリソースを共有できるようにします。組み込みOSと異なり、ネットワークOSのユーザーは一般用OSの場合と同じように、さまざまなタスクを自分で制御することができます。
標準的なOSとリアルタイムOSの違い
標準的なOSは自動的なタスクの優先順位付けを行わず、合理的な時間内で完了するようにタスクに命令を出します。一方、リアルタイムOS(RTOS)では、既定の時間内でのタスク完了が保証されています。
組み込みOSにもリアルタイムOSがあり、データが入力されると直ちに処理を行って、組み込みOSが一貫してタスクを完了できるようにします。
クラウドや5G、Edge向けのAIサービスインテグレーション・プラットフォームを提供しているAIソリューション関連企業、Hypergiantのシニア組み込みソフトウェア開発者Brent Horine博士.は次のように解説しています。「標準的なOSにはミリ秒単位のタイマーがある。このタイマーがプロセスやシグナルの待ち行列を見て、優先順位を基に1つのプロセス/シグナルを選択したり、実行可能なものを見つけたりする。標準的なOSは一種のラウンドロビン方式でタスクのスケジュールを組んでいるため、どのタスクにも所定の優先レベルで順番が回ってくる。これに対してリアルタイムOSは、デッドラインを重視しており、OS内でスケジューリングシステムが中心に置かれる」。
3種類のRTOS:ハード、ファーム、ソフト
- ハードRTOS
ハードRTOSでは、期待通りの成果を毎回提供することがシステムの要件となります。デッドラインの不履行はシステム全体の障害を意味します。ハードRTOSが使われるのは医療機器や重要な車載コンポーネントなどです。
フリーのソフトウェア開発者で組み込みシステム専門のコンサルタント、Burkhard Stubert氏は、ハードRTOSの使用例として車載用バックカメラを上げ、次のように解説しています。「ハードRTOSが、たとえば100ミリ秒以内のリアビュー画像表示を保証したとする。この場合、95ミリ秒以内でも105ミリ秒以内でもなく、必ず100ミリ秒以内で、決定性を持たせて表示しなければならない」。
- ファームRTOS
ファームRTOSでは、まれにデッドラインの不履行が生じ、システム全体のクオリティが損なわれることがあります。頻繁なデッドラインの不履行が起きれば、システムは正しく動作しません。
- ソフトRTOS
ソフトRTOSでは、デッドラインの不履行が生じても、システムは正しく動作します。ただし、繰り返しデッドラインの不履行が起きれば、システムのパフォーマンスは損なわれます。
組み込みシステムプロジェクトで適切なOSを選ぶには?
組み込みデバイス用のOSを選択する際には、多くの要素を検討しなければなりません。たとえば、標準的なOSとリアルタイムOSのどちらにするべきか、デバイスの電力とコンピュータメモリに制約はないか、といった要素です。
組み込みデバイス用のOSを選ぶ際に評価するべき重要事項:
- そのデバイスで、セーフティクリティカルなタスクを実行するか?(OSの中には、安全を最重視するべきタスク用に設計され、認証を受けたものもある)
- そのデバイスに必要なのは、標準的なOSか、リアルタイムOSか?
- RTOSが必要なら、ハード、ファーム、ソフトのどれが適切か?
- 電力に制約はないか?OSの消費電力は?
- オープンソースとライセンスソリューションのどちらを使うべきか?Ahonenはこの点について、オープンソースソリューションは組み込みデバイスのニーズに合わせるために余分な手間がかかると指摘しています。「オープンソースの場合、正確なコンフィギュレショーンの種類など分からないし、テストもしていないので、OSの強化(ハードニング)や品質向上にかなりの時間を割かれることになる」。
- コストはいくらかけられるか?Ahonenは、エンジニアの作業が増える「無料」のオープンソースソリューションと、それらの作業の大部分が完了している有料のソリューションのバランスを考えるべきだと指摘しています。「いずれにしても代償は支払うことになる。問題は、自らの労働力で支払うか、誰かのソリューションに支払うかだ」。
- 開発チームのスキルおよび経験のレベルは?Stubert氏は、プロジェクトに適した2つのOSがある場合に両者を比較するなら、この点が重要な検討事項になると指摘します。「開発チームにQNXなどのリアルタイムOSを扱った経験がなくても、少なくともLinuxなら扱ったことがあるというエンジニアなら見つけやすい」。詳細は、組み込みシステムおよび組み込みソフトウェアエンジニアに不可欠なスキルをお読みください。
- どのようなアプリケーションプログラミングインターフェース(API)が必要か?APIは、システムとアプリケーションの通信を可能にします。
- OSのセキュリティは?
- OSは、デバイスの周辺機器に対応している必要があるか?
- デバイスにグラフィカルインターフェースやディスプレイはあるか?
- OSのベンダーの評判は?Ahonenは、OSのベンダーの中には企業としての寿命が短いところもあると指摘します。「この点もOSの選択を左右する。OSのベンダーが10年後も確実に存在するかどうか、OSについて分かる人を確実に見つけられるかどうか検討するべきだ」。
- メモリ量に制約はあるか?デバイスに必要なメモリ量は?
- OSに必要な機能と不要な機能は?以下の機能への影響は?
- ファイルシステム
- スレッド/プロセス管理
- ガベージ処理やその他のメモリ管理
- グラフィックAPIとCPU管理
- ウインドウイングシステム
- アプリケーションのライフサイクル管理、アプリケーションランチャー、システムUI
- セキュリティの各側面(多数の微細な問題に分けて検討)
- 更新機能(OS + BSP:ボードサポートパッケージ)、OTAサポート、既製のサービスがあるか自前か
- その他のミドルウェアの入手可能性(HTTPサーバやSQLデータベースなど)
- 周辺機器のAPI対応(カメラ、Bluetooth、Wi-Fiなど)
- ハードウェアとOSの統合性は?
ハードウェアとOSの統合性については以下の点を検討する必要があります:
- 既製のBSPがあるか、自分でBSPを作る必要があるか?
- セキュリティ対策は?(セキュアエレメント、デバイスのロック方法など)
- デリバリー品質は?
- コミュニティによって集められたライブラリか、誰かがハードニングを行っているか?
- 自身の労力とデバイス当たりのランタイムコストで考えた、OSのコストは?
- 自力で統合できるかどうか?
よく利用されている組み込みOSの機能比較
The Qt Companyは、組み込みデバイスの開発方法に対する理解をさらに深めていただけるよう、エンジニアの皆様向けに 組み込み製品の計画と要件ガイドブックをご用意しました。ガイドブックでは、よく利用されている組み込みOSの詳細な比較を行っています。
|
組み込み Linux |
Android |
Blackberry QNX Neutrino RTOS |
Greenhills Integrity |
Wind River VxWorks |
LG webOS |
Microsoft Windows for IoT |
Ease of developmentデプロイのしやすさ |
★★★★ |
★★★★★ |
★★★ |
★★ |
★★★ |
★★★★ |
★★★★ |
効率性
|
★★★ |
★★ |
★★★★ |
★★★★ |
★★★★ |
★★ |
★★★ |
決定的動作(リアルタイム) |
★★★ |
★ |
★★★★★ |
★★★★★ |
★★★★★ |
★★ |
★★ |
API |
POSIX |
POSIX |
POSIX |
POSIX |
POSIX |
POSIX |
POSIX |
接続性 |
★★★★★ |
★★★ |
★★★ |
★★★★ |
★★★ |
★★★★★ |
★★★★★ |
グラフィックス |
★★★★ |
★★★★★ |
★★★★ |
★★ |
★★ |
★★★★ |
★★★★★ |
ハードウェアサポート |
★★★★★ |
★ |
★★★ |
★★ |
★★★★ |
★★ |
★ |
オープンソース |
はい |
一部はい |
いいえ |
いいえ |
いいえ |
はい |
いいえ |
コミュニティ |
★★★★★ |
★★★★ |
★★★ |
★★ |
★★ |
★★ |
★★★ |
ライセンス/価格 |
€ |
€ |
€€€€ |
€€€€ |
€€€ |
€ |
€€€€€ (WinIoT Coreはロイヤルティフリー) |
カスタマイズおよびハードニングコスト |
€€€ |
€-€€€€ |
€€ |
€€ |
€€ |
€€€ |
€ |
組み込みOSの機能比較表をダウンロードする
最も広く使われている組み込みOSは?
現在、最も広く使われている組み込みOSは、組み込みLinuxです。Yotcoは組み込みLinuxシステムで最も人気があります。その他の人気の組み込みOSには、Android、FreeRTOS、QNX、VxWorksがあります。
適切なOS選びの大切さ
組み込みデバイスの成功にとって、最良の組み込みOS選びは欠かせないプロセスです。OS次第でどのソフトウェアを使えるかが変わってくるほか、OSはシステムのほかの部分の構築の難易度にも関わってきます。
組み込みデバイス開発プロジェクトの重要なプロセスの詳細は、成功する組み込み製品の開発をご覧ください。
Qtは拡張可能なクロスプラットフォームソフトウェアの開発をお手伝いします
商用ライセンスのトライアルやオープンソースを利用したい方は、ぜひQtの無料トライアルを開始してみてください!
Qtのライブラリやツールを使うことで、組み込みハードウェアや組み込みOSの種類にかかわらず、より合理的かつ効率的なソフトウェア開発を実現することができます。また、高性能3D/2Dユーザーインターフェースをターゲットハードウェア上でテストして微調整できるうえ、完成したアセットを他のプロジェクトに再利用することも可能です。Qtで開発したソフトウェアはクロスプラットフォームで、MPUをMCUやベアメタルにスケールダウンすることもできます。
Qtの詳細をぜひご確認ください。公式ウェブサイトでは、必要なプログラミングスキル、企業や業界におけるQtを使ったデバイス開発例、Qt6の重要な更新情報をご紹介しています。また、Qtについてご質問あり場合は、お気軽にお問い合わせください。