KUMICO

COLUMN

組み込みLinuxにおけるアプリケーション開発の特徴

今までのコラムでは入門&基礎編として、組み込みLinux開発の概要、ハードウェア、評価ボードを利用した組み込みLinuxのお試しについてと、基礎知識について解説してきました。本コラムでは、もう少し具体的なところに踏み込んで、実際の製品開発における組み込みLinuxのアプリケーション開発はどのようなものなのかを説明していきましょう。

組み込みLinuxのソフトウェア構成

まず、組み込みLinuxのソフトウェア構成について理解しておきましょう。今までのコラムでは、LinuxをOS(オペレーティングシステム)を指す言葉として利用してきましたが、厳密には、Linuxとはオペレーティングシステムの基本機能のみをまとめた(1)カーネル(kernel)を指します。前述のコラムでも解説しましたが、インターネットからLinuxをダウンロードすると、カーネルのほかに、カーネルをOSとして動作させる上で必要となる(2)基本ライブラリ、(3)標準ソフトウェア群、(4)ドライバ(driver)群、(5)ブートローダー(bootloader)を同時にインストールすることになります。そして、(1)〜(5)を全部ひっくるめたものをLinuxシステムと総称します。ちなみに、(1)カーネル以外の(2)〜(5)のことを、ユーザーランドと呼びます。
それぞれに関して軽く説明をしますと、(2)基本ライブラリはLinux上でアプリケーションを開発する上で前提となるライブラリで、C言語の基本ライブラリなどを含む基本的なライブラリです。WindowsSDK(マイクロソフトによって無償で公開されているソフトウェア開発キット。Windowsで動作するアプリケーションの開発用に特化している。Windows API利用時に必要なヘッダファイル、ライブラリ、ツール、サンプルを含む)などと似たようなものと理解して頂ければ早いかもしれません。(3)標準ソフトウェア群は、フォルダ(ディレクトリ)の移動、コピー、切り取り、貼り付けなどといったOSの基本的な機能を搭載したアプリケーションです。(4)ドライバ群はハードウェアを動作させるソフトウェア、(5)ブートローダーはハードウェア上でカーネルを動作させるためのソフトウェアとなります。Linuxシステムは大きく分類するとこの5つのソフトウェアで構成されています。

組み込みLinuxにおけるアプリケーション開発とは

組み込みLinuxのソフトウェアの構成を理解できたところで、アプリケーション開発の話を始めましょう。
Linuxシステムにおけるアプリケーション開発とは、(1)カーネル上で動作する(2)基本ライブラリを利用したアプリケーション開発ということになります。Windowsの言葉で言い換えると、WindowsOS上で動作するWindowsSDKやMFC(Microsoft Foundation Class)を利用したアプリケーション開発といえば理解が早いでしょう。このアプリケーション開発は、パソコン上のLinuxでのアプリケーション開発でも、組み込みLinux上でのアプリケーション開発でも、大きな違いはありません。
大きく違う部分としては、パソコンのようにハードウェアが統一化されていない組み込みLinuxのアプリケーション開発の場合には、開発を行う前に、ハードウェアに合わせた組み込みLinuxのフィッティングが必要になります。このフィッティングの作業はポーティングという名前で呼ばれることが一般的ですが、具体的には(4)ドライバ群、(5)ブートローダー(場合によっては(1)カーネル)を、利用するハードウェアに合わせてカスタマイズすることです。
以降の章では、組み込みLinuxにおけるアプリケーション開発で必要になるポーティングに触れていきます。

ブートローダーの役割とポーティング作業

まず、ブートローダーの役割から理解していきましょう。一言で言うとブートローダーは、オペレーティングシステムを起動するためのソフトウェア(プログラム)です。電源ONと同時に起動し、オペレーティングシステムを動作する状態まで設定する、という役割を持っています。当然、WindowsなどのOSにもブートローダーは存在します。パソコンにオペレーティングシステムをインストールしたことがある人はわかると思いますが、インストール時にブートローダーを意識することはほとんどありません。しかし実は、その時ブートローダーも一緒にインストール・設定をしているのです。
ブートローダーは電源ONと同時にハードウェアから起動され、オペレーティングシステムを設定、起動するプログラムです。パソコンの場合は、Linuxの一般的なブートローダーであるLILOやGRUBをそのまま利用して起動させることができますが、先に述べたように組み込みボードとなるとそうはいきません。そこでポーティングの必要性が出てくるわけです。組み込みLinuxのようにカスタマイズされたハードウェア上では、(1)ハードウェアから起動される部分も異なります。また、ハードディスクのような決まった記憶領域を持たない組み込みシステム(エンベデッド・システム)では、(2)オペレーティングシステムの動作する設定も異なってくるわけです。ポーティングとは、大きく分類したこの(1)(2)の機能をカスタマイズしていく作業となります。LILOやGRUBの内部仕様をよく理解した上で、すべてのソースコードを解読し、対象の組み込みボードにブートローダーをポーティングしていくのです。
余談ですが、単純な組み込みボードの場合はポーティングをせず、開発者がブートローダーをイチから作成するという方法もあります。単純な組み込みボードの場合、WindowsとLinuxのマルチローダが不要で、Linuxさえ起動すればいいケースが多いので、比較的労力もかかりません。

ドライバの役割とポーティング作業

ポーティング作業が完了すると、カスタムボード上でLinuxカーネルが動作するようになるかと思います。

次に行う作業は、カスタムハードウェアを動作させるドライバ(Linuxシステムに含まれない)の開発です。例えば温度計に搭載されるようなアプリケーションの場合、温度センサーがカスタムハードウェアとして搭載されています。その温度センサーを初期化したり設定したり、温度情報を取得したりするために制御するドライバを用意します。温度計アプリケーションは、Linuxカーネルを経由し温度センサードライバを利用することで、温度情報を取得できるようになります。

このようなカスタムファームウェアのドライバーは、カスタムハードウェアのメーカーが提供している場合がありますが、Windowsなどのように当たり前に提供されることは少なく、多くの場合はどのように制御すればいいかといった情報(初期化手順、温度取得手順、取得される温度値のフォーマットなど)を、カスタムハードウェアメーカーから提供してもらい、それをプログラミングしてドライバを作成することになります。Linuxにおけるドライバに関しては、関数の作り方はお作法が決まっていますので、それにのっとった形で作っていけばLinuxシステムに組み込むことは容易となります。ただしLinuxシステムへのドライバ組み込みが未経験の場合には、そのお作法を勉強することからスタートします。しかも、なかなかまとまった情報が見つからないため、間違いなく苦労すると思いますので、覚悟して作業に臨みましょう。

ハードウェアを意識しない開発が可能なLinuxカーネル

ここまで来たところで、ようやく組み込みLinux上で動作するアプリケーション開発をはじめることになります。
手段としては、標準ライブラリ、Linuxカーネル経由による標準ドライバ、カスタムドライバを利用し、目的のアプリケーションを作っていきます。Linuxシステムでは、Linuxカーネルがハードウェアに関して、ほぼ意識することなくプログラミング、アプリケーション開発ができるようになっています。そのような特性があるからこそ、パソコン上で動作するLinuxでも、組み込み機器上で動作するLinuxでも、大きな違いなく開発が行えるのです。パソコン上でアプリケーションを開発しておいて、組み込みLinuxが動くようになってから載せ替えるという開発手法を用いる開発者も少なくありません。それほどLinuxシステムは、アプリケーションにとってハードウェアの違いを意識しなくていいつくりになっているのです。

組み込みLinuxにおけるアプリケーション開発

まず、組み込みLinuxにおいてアプリケーションプログラムを構築していくまでの大まかな流れを、今一度まとめてみましょう。

1.ブートローダーを用意する
2.ファイルシステムを用意する
3.Linuxの実装
4.デバイスドライバを用意する
5.アプリケーションの開発に着手

組み込みLinuxにおけるアプリケーション開発のポイントは、カスタムハードウェア上で組み込みLinuxを動作させること、Linuxがサポートしないカスタムハードウェア用のドライバを開発すること、そして組み込みLinuxを動作させるためにポーティングを行うこと、にあると思います。アプリケーション開発自体は通常のパソコンで動作するLinuxシステム上でのアプリケーション開発とそこまで違いはありませんので、ポーティングさえできてしまえば組み込みLinux独自の知見というのはそこまで必要ありません。別コラムでも記載しましたが、ポーティング作業を必要としない評価ボードを利用した組み込みLinuxを使って一度試してみると理解できるかと思います。

組み込みLinuxにおけるアプリケーション開発の利点

組み込み機器のアプリケーション開発において、Linuxのシェアが大きいのはなぜでしょうか。まず、Linuxが無償かつオープンソースであり、必要とあればメンテナンスがすぐに行えること、標準API(アプリケーションプログラミングインターフェース)があることが挙げられます。APIとは、OSやミドルウェアの持つ機能を、アプリケーションプログラムプログラムの開発時に簡単に使えるようにした技術仕様のことを指します。また、無償で入手できる開発環境(開発ツール)が充実しているのも利点のひとつです。

組み込みLinuxにおける開発環境

前章で、組み込みLinuxの開発環境について少し触れましたが、開発環境の整備は組み込みLinuxにおけるシステム開発にあたって必要な事項です。
デスクトップパソコンやサーバーのLinuxと違い、組み込み機器に搭載されているのはIntel(インテル)x86でないCPUの場合が多いです。組み込み機器に搭載されているCPUは、例えばARM、PowerPC、MIPS、SuperHなどです。当然のことながら、プロセッサに依存するデバイスドライバもデスクトップパソコンやサーバーのLinuxのものとは異なってきます。

組み込みLinuxの開発環境に話を戻しましょう。システムやソフトウェアの開発には、セルフ開発(セルフ・コンパイル)とクロス開発(クロス・コンパイル)があります。セルフ開発は、開発環境と実行環境が同じであること、クロス開発は、開発環境と実行環境が別であることを意味します。そして、組み込みLinuxの開発は、後者のクロス開発です。
セルフ開発は、一般的なVisual C++などを使ってアプリケーション開発を行います。一方、それ自体に開発環境を持たない機器(マイコン制御チップやゲーム機など)で動かすための実行ファイルを、別途パソコン上の開発環境で作成するのがクロス開発となります。
それに際しては、プログラマーが記述したソースコードを、ターゲットの組み込みシステムで動作するようなオブジェクトコードに変換しなければなりません。しかも、Linux以外のOSがインストールされているパソコンの場合、Linuxベースの開発環境を構築する必要が出てきます。

組み込みアプリケーションの開発に、ぜひ利用したいのが統合開発環境です。統合開発環境には、プログラム履歴のバージョン管理やプログラマーによる開発においての支援など、組み込みソフトウェア開発の上で必要な機能が備わっています。一般的には、プラットフォーム管理、エミュレーション管理、インターフェース管理、ドキュメント管理に分類することができます。

Linuxディストリビューションの種類と選択のポイント

先ほども述べたように、Linuxディストリビューションとは、それ単体では動作しないLinuxカーネルを、一般ユーザーが導入(インストール)したり利用したりできるOSとしてまとめたパッケージのことです。自由に配布や利用ができるフリーソフトウェアを集めた無料でオープンソース(ソースコードを公開すること)なものと、利用料が発生する商用ソフトウェアや企業のサポートを受ける権利が含まれる有料のものがあります。また、Linuxディストリビューションは非常に多くの種類があり、用途や価格など、選択のポイントも様々です。ここでは、数あるLinuxディストリビューションの中でも主なものを挙げてみたいと思います。

Debian GNU/Linux

有志のコミュニティによって開発およびサポートされているディストリビューションで、フリーソフトウェアのみで構成されている。インテルや、AMDの32bit・64bitプロセッサ、ARMアーキテクチャに対応。

Ubuntu Linux

Canonical(カノニカル)社がバックアップしている、Debian GNU/Linuxから派生したディストリビューション。Ubuntu Linuxをあらかじめインストールしてあるパソコンも出ている。2013年には、ARMプロセッサとIntelx86プロセッサをサポートし、スマートフォンに最適化された「Ubuntu for Phones」をリリースすると発表される。Android(アンドロイド)を搭載した携帯情報端末との互換性もあり、すでにあるアンドロイド端末上で動作を実行することも可能。

RedHat Enterprise Linux

エンタープライスサーバー向けの商用ディストリビューションで、RedHat社提供によるもの。コミュニティがテストしたFedoraを元に安定化を実現した。パッケージ管理システムとしてRPMを使用している。ライセンス料金は無料で、バイナリの配布やアップデート、サポート、訴訟からの保護といった関連サービスを受ける際に料金を支払うサブスクリプション契約の仕組みを取る。

Gentoo Linux

最適化や自由度を重視した、コミュニティによる開発およびサポートが実施されているディストリビューション。ユーザー自身がソフトウェアをコンパイルできたり、一部では、すでにコンパイルされたソフトウェアパッケージをインストールすることも可能。

OpenSUSE

Novell社スポンサーによるコミュニティが開発した、オープンソースなディストリビューション。エンジニアより一般ユーザーにとっての使い勝手を重視している。パッケージ管理システムはRPM。Factryと呼ばれるプロジェクトでは、最新のソフトなどを積極的に取り入れ、リリース版のベースとしている。

SUSE Linux Enterprise

OpenSUSEを基にした、エンタープライズサーバー向けの商用Linuxディストリビューション。

Linuxディストリビューションの種類が多いぶん、マウントされているファイルシステムもディストリビューションごとに異なってきます。DebianやRed Hat Enterprise Linuxならext3、UbuntuやOpenSUSEならext4といったようにです。上記のほかにもたくさんのLinuxディストリビューションが存在しますので、コスト面や用途からお好みのLinuxディストリビューションを見つけてみてください。

本コラムでは、組み込みLinuxにおけるアプリケーション開発について説明してきましたが、より詳しく知りたい方は、各地で開催されている組み込みLinuxのセミナーや勉強会に参加して知識を習得したり、書籍や業界誌などで組み込みLinuxにおけるアプリケーション開発の動向を探ってみてはいかがでしょうか。

個別相談も承っております。下記よりお申し込みください。

個別相談会申し込み

関連記事

OTHER COLUMN

MORE  

まこちゃんブログ

NEWS

MORE  

PARTNER

  • Intel
  • Xilinx

お探しの組み込み製品はキーワードで検索!