メディア

組み込みLinuxの「正体」と開発の「困難さ」超速解説 組み込みLinux(1/2 ページ)

数ある組み込み機器のなかでも、タッチパネルやネットワークなどある程度リッチな機能が必要となる際に選択されることの多いOSが「組み込みLinux」である。他OSとの違いや開発にまつわる現状を解説する。

» 2017年08月08日 09時00分 公開
[大原 雄介TechFactory]

 組み込み機器の中でも、ある程度の機能が要求されるデバイスになると、ソフトウェア側にも相応に配慮が必要になる。例えば最近の旅客機に搭載される多機能エンタテイメント機器。オンデマンドでの映画や音楽の再生、飛行情報や地図上での現在位置の表示といった機能がてんこ盛りになっている訳だが、これの実装を例にして考えてみよう。

 まずマルチタスクOSは当然必須で、機内のVODサーバと接続するためにはネットワークスタックも必要である。そして音楽や動画のコーデックも搭載して、プレーヤーも載せなければならない。地図表示も単に世界地図上に現在位置を表示するだけの簡単なものもあれば、3Dで地形や航路を表示するものまである。

 簡単なものであっても最低限のディスプレイドライバとAPIへの対応は必要だし、3D表示であればOpenGL/ESなどへの対応が必要だろう。画面はタッチ操作になるから、対応したドライバとGUIも必要になる。これを毎回全部スクラッチから起こしていたら大変な目に遭ってしまうので、使えるものは極力流用する形でシステムを作り上げてゆくことになる。

組み込みLinux開発入門

組み込みLinux」に関するさらに詳しい情報をお求めの方は、MONOistに掲載された人気連載記事を再編集した、無料電子ブックレット『「組み込みLinux」開発の基礎』をぜひご覧ください。 ⇒ダウンロードはこちら


組み込みLinxuの特徴

 こうした用途に向けて広く利用されているのが「組み込みLinux」である。名前の通り「組み込み向け」のLinuxである。こうした用途に向けて利用するOSとしては、組み込み用のWindowsでもいいのだが、いくつかの理由からLinuxが多く採用されている。

消費電力

 消費電力を低く抑えたいと考えると、Windowsではハードウェアの選択肢が極めて乏しい。消費電力を抑えたい場合にはARMベースの製品が広く利用されており、現状ARMベースのハードウェアにWindowsを組み合わせようとするといろいろ困難がある(Windows 10 IoT Coreベースでは、こうした複雑なデバイスは難しい)。

デバイスの選択肢

  • コスト削減などのため、実装される機器に搭載するソフトウェアコンポーネントはぎりぎりまで抑えたい。もちろん、Windows 10 IoTや、その前に提供されていたWindows Embeddedでも搭載するコンポーネントを選択できるが、Linuxベースの方が自由度が高い。

 このような理由から、組み込みLinuxは産業界で現在も広く利用されている。Linux Foundationでも定期的に「Embedded Linux Conference」を開催するほか、「Embedded Linux Development Training」を開催して、組み込みLinuxに携わるエンジニアの数を増やそうと努力している。

組み込みLinuxの「正体」と開発の「困難さ」

 ではその組み込みLinuxとは何か?という話になるわけであるが、端的に言えば普通のLinuxと根本的には同じものである。以前「『RTOSとは何か』を理解できる7つの特徴」でも少し触れたが、リアルタイム性を高めるべくカーネルに手を入れたRT Linuxなどとは異なり、基本は通常のLinuxカーネルをそのまま利用する。

 ただし、普通のLinuxディストリビューションと異なり「ブートの高速化やストレージサイズの節約を狙い、最小限のモジュールと実行環境のみがインストールされる」「通常シングルプロセッサの動作となる事が多いので、マルチプロセッサ向けのサポートは削除」「eMMCなどのNAND Flashからのブートを前提としたケースも多い」「読出専用ファイルシステムの利用や、メモリ内圧縮スワップなどの利用をサポート」といった特長を持つ。

 ただ、これらのほとんどは既にLinuxカーネルでは標準的にサポートされている(ただし一般には無効化されている)。なので、組み込みLinuxとは何か?と問われれば、カーネル設定(Kernel Configuration)でカスタマイズして組み込み向けにしたLinuxというのが正確だろう。

 しかし、話はそう単純ではない。1つはカーネル設定を含めた「必要なコンポーネントの取捨選択」が難しいことだ。これを正しくやるためには、カーネルオプションやコンポーネントの依存関係をきちんと理解している必要があるが、そこまでLinuxに精通しているエンジニアが多数存在している恵まれた開発環境はそう多くないだろう。

 2つ目が、広範に使われるディストリビューションが存在しないことだ。PC向けにはさまざまLinuxディストリビューションが存在しており、これらは「一般的なPC」を前提にカーネルを含めた作り込みがなされている。ところが、組み込み機器の場合、「一般的なハードウェア」は存在しない。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.