組み込みLinuxアプリケーション:概要

腕時計からクラスターベースのスーパーコンピューターまで

Darrick Addison氏は、組み込みLinuxアプリケーションとその環境について、その概観を紹介し、こうしたアプリケーションの開発に最適なハードウェアおよびソフトウェア環境のセットアップ方法について順を追って説明します。

Darrick Addison (dtadd95@bellatlantic.net), Senior Software Engineer/Consultant, ASC Technologies Inc.

Darrick Addisonは、ASC TechnologiesでSenior Software Engineer/Consultantとして勤務しています。1993年以来、カスタム・ソフトウェア・アプリケーションの設計と開発に携わってきました。設計と開発に携わってきたソフトウェアは、データベース・アプリケーション、ネットワーク・アプリケーション (TCP/IPクライアント / サーバー)、GUIアプリケーション、および組み込みシステム・アプリケーションに及び、対象の環境も民間から政府までさまざまです。現在、Computer Scienceの理学士の学位を持っており、さらにJohns Hopkins UniversityでComputer Science/Telecommunicationsの修士号を取得中です。メール・アドレスは、dtadd95@bellatlantic.net です。読者の皆さんからのコメントと質問を歓迎しています。



2001年 8月 01日

Linuxは現在、IBMのLinux小型腕時計、ハンドヘルド装置(PDA/携帯電話)、インターネット・アプリケーション、シン・クライアント、ファイアウォール、産業ロボット、電話インフラストラクチャー機器、さらにクラスターベースのスーパーコンピューターに至るまで、幅広いコンピューティング・アプリケーションに使われています。組み込みシステムにおけるLinuxの機能に注目し、Linuxが現在最も魅力的なオプションである理由を探ってみましょう。

組み込みシステムの登場

装置制御に使われるコンピューター、つまり組み込みシステムは、コンピューターそのものと同じくらい長い歴史を持っています。それが最初に使われたのは1960年代後半であり、電気機械式電話交換機を制御するためのものでした。この約10年間、システムの小型化を目指す傾向がコンピューター業界全体に見られ、これに応じて組み込みシステムも小型化され、先に挙げたような小型機器の可能性はさらに拡大しました。また、こうした組み込みシステムのネットワーク接続、さらにそのネットワーキング・スタックの必要性がますます高まり、システムがより複雑なものとなる一方、より多くのメモリー、インターフェース、そして、そうです・・・オペレーティング・システム(OS)の機能も求められるようになりました。

現在使用されている組み込みシステム用OSは、1970年代後半から登場し、現在では数十種類があります。その中でも有力なものとしては、VxWorks、pSOS、Neculeus、WindowsCEなどがあります。


組み込みシステムにLinuxを採用することのメリット/デメリット

ほとんどのLinuxシステムはPCで使用されていますが、組み込みシステムとしても信頼性の高い、便利なシステムです。Linuxは、従来のUNIXと同じコマンド、プログラミング・インターフェースを持つため、UNIXの専門家たちからすでに高い評価を得ていますが、「基本に戻る」というLinuxの定評あるアプローチによって、インストールや管理もUNIXと比較して簡単かつ柔軟であり、より高い評判を得ています。

市販されている通常のLinuxシステムは、大型ハード・ディスクと大量のメモリーを持つPC用であり、その機能のほとんどが組み込みシステムには不要なものでした。フル機能のLinuxカーネルには約1MBのメモリーが必要ですが、Linuxマイクロカーネルは、仮想メモリーとすべてのコアOS機能を含めてPentiumCPUで約100Kしか必要としません。また、ネットワーク・スタックと基本ユーティリティーを持つ完全なLinuxシステムでも、Intel386マイクロプロセッサーおよび8ビット・バス(SX)で約500Kのメモリーがあれば快適に稼働します。WebサーバーやSNMPエージェントなど、要求されるアプリケーションによって必要なメモリー量が決められる場合が多いため、実際には、Linuxシステムを256KBのROMと512KBのRAMのみで機能させることもできます。すなわち、Linuxシステムは組み込み市場向けの軽量OSであると言うことができます。

従来のリアルタイム・オペレーティング・システム(RTOS)ではなく、組み込みLinuxのようなオープン・ソース・オペレーティング・システムを使用することのもう1つのメリットは、新しいIPやその他のプロトコルのサポートに関して、多くの場合、Linux開発コミュニティーの方がRTOSベンダーよりも迅速であるという点です。たとえば、ネットワーク・インターフェース・カード(NIC)ドライバーやパラレル・ポート・ドライバー、シリアル・ポート・ドライバーなどのデバイス・ドライバーは、市販OS用のものよりもLinux用の方が数多く提供されています。

フラッシュ・メモリー

Flash RAMは、パーム・デバイスの多くがOSの格納に使用している特殊なメモリーです。OSのアップグレードが可能であるという利点があり、デジタル携帯電話、デジタル・カメラ、LANスイッチ、PCカード、デジタル・セットトップボックス、組み込みコントローラーなどの小型機器にも採用されています。組み込みLinux同様、組み込みシステムはディスク・ドライブを必要としませんが、他のメモリー構成もいくつか可能です。そのため、フラッシュ・メモリー上でLinuxを実行する場合、読み取り専用のファイルシステムとしてフラッシュ・メモリーの一部がプログラムと静的データの格納に使用されます。

LinuxのコアOS自体は、きわめてシンプルなマイクロカーネル・アーキテクチャーによるものです。ネットワーキングおよびファイルシステムはモジュール形式でマイクロカーネル最上部に置かれ、ドライバーその他の機能は、実行時にロード可能なモジュールとしてカーネルにコンパイルまたは追加されます。このように、高度にモジュール化されたビルディング・ブロックによって、組み込み可能なカスタム・システムの構築を可能とし、カスタム・ドライバーとアプリケーション・プログラムの組み合わせによる追加機能の提供などを行います。

これらの組み込みシステムは一般的な機能を数多く必要としますが、それぞれ独自にプログラムやドライバーを開発する手間を省くため、そのような機能のほとんどには、一般の周辺機器/アプリケーション用既製プログラムおよび既製ドライバーが使用されています。Linuxは、ほとんどのマイクロプロセッサーで幅広い周辺機器とともに使用することができ、数多くのアプリケーションが市販されています。

さらにLinuxは、マルチプロセッサー・システムをサポートしており、組み込みのインターネット・デバイスにも非常に適しており、高い拡張性を備えています。この機能によって、デュアル・プロセッサー・システムでのリアルタイム・アプリケーションの実行が可能となり、総合的な処理能力をさらに高めることができます。たとえば、1つのプロセッサー上でLinuxシステムを稼働させながら、別のプロセッサーでGUIを稼働させることもできるようになります。

組み込みシステムでLinuxを使用する場合の1つの問題点は、Linuxアーキテクチャーにおけるリアルタイム実行が、OSの一部分としてカーネルスペースで実行される、スケジューリングポリシー、ハードウェア割り込み例外、そしてプログラムの実行を実装した、リアルタイムのための付加的なソフトウェア・モジュールによって実現されていることです。これらのリアルタイム・ソフトウェア・モジュールがカーネル・スペースで稼動するため、コード・エラーが発生した場合にはOSがクラッシュしてシステム全体の信頼性に影響を与えるおそれがあり、リアルタイム・アプリケーションにとってはきわめて深刻な脆弱性となる可能性があります。

一方、市販のRTOSは、リアルタイム・パフォーマンスを前提として設計されており、システムレベルのプロセスによる起動とは対照的に、ユーザーによる起動で特定のプロセスに高い優先度を割り当てることができるため、高い信頼性を確保できます。OSは、メモリー内またはハード・ドライブ上で実行されるプログラムとしてプロセスを識別します。また、これらのプロセスにプロセスIDまたは数値IDを割り当てることによって、OSは実行中のプログラムとその優先順位の追跡を行うことができます。このようなアプローチによって、RTOSタイムはLinuxよりも高い信頼性(予測可能性)を得ることができます。

組み込みLinuxシステムのさまざまなタイプ

すでに数多くの組み込みLinuxシステムがあります。一部のLinuxに関しては、「コードを実行できるコンピューターならどのようなものでも使用できる」といっても過言ではないでしょう。たとえば、ELKS(EmbeddableLinux Kernel Subset)プロジェクトでは、LinuxのPalm Pilotへの搭載を計画しています。では次に、比較的よく知られている小型の組み込みLinuxをいくつか紹介しましょう。ETLinux -- 小型産業コンピューター向けの完全Linuxディストリビューション(特にPC/104モジュール)
LEM -- 386上で稼働する、小型(8 Mb以下)マルチユーザーのLinuxのネットワーク・バージョン
LOAF -- 386上で稼働する「Linux On a Floppy」(フロッピー版Linuxディストリビューション)
uClinux -- MMUのないシステム用Linux。現在、Motorola 68K、MCF5206、MCF5207 ColdFireマイクロプロセッサーをサポート
uLinux -- 386上で稼働するきわめて小型のLinuxディストリビューション
ThinLinux -- 専用カメラ・サーバー、X-10コントローラー、MP3プレーヤーなどの組み込みアプリケーション用最小版Linuxディストリビューション


必要なソフトウェアとハードウェア

ユーザー・インターフェースのツールおよびプログラムによって、Linux基本カーネルの多様性を高めることができます。Linuxは、メモリー管理、タスクの切り換え、タイマー・サービスからあらゆるファイルシステムとネットワーク・サービスまでをサポートする本格的なサーバーに準じるものとして扱うべきでしょう。

最小の組み込みLinuxシステムには、以下の3つが必要です。

  • ブート・ユーティリティー
  • Linuxマイクロカーネル(メモリー管理、プロセス管理、タイミング・サービス)
  • 初期化プロセス

システムを最小に止めながらアプリケーションを実行するには、以下の追加を行います。

  • ハードウェア用ドライバー
  • 必要な機能のためのアプリケーション・プロセス

さらに必要な場合には、以下を追加することもできます。

  • ファイルシステム(多くの場合、ROMまたはRAM)
  • TCP/IPネットワーク・スタック
  • 一時データ(および通常データ)の格納およびスワップのためのディスク
  • 32ビット内部CPU(すべての完全Linuxシステムに必要)

注目すべきハードウェア・プロジェクト

Linuxオペレーティング・システム用組み込みハードウェアのプロジェクトをいくつかご紹介します。

PLEB :Pocket Linux Embedded Box with ARM SA-1100 / ArmLinux Ucsimm / UclinuxFlash EPROM.

Linux Lab :Linux Labプロジェクトは、Linux用のデータ収集/プロセス制御ソフトウェア開発者のサポートを目的としています。これは、ハードウェア・サポートからアプリケーション開発に至るまで多種多様なアプリケーションのための標準化された開発環境を提供します。

Controller Area Network :Linux GPIB用Controller Area Network(CAN)バス・ドライバー。Linux GPIBPackageは、通常のGPIB(IEEE 488.1)ハードウェア用サポート・パッケージです。このドライバーはNationalInstruments AT-GPIB、TNT 488.2、PCIIおよびPCIIaボードをサポートします。このパッケージは、テスト/構成ツール、ライブラリーを持ち、tclおよびpython言語をサポートする完全な開発環境を提供します。


ハードウェア・プラットフォームのオプション

「企業内での駆け引き」「偏見」「他のプロジェクトで使用されたレガシーシステム」「完全な情報および正確な情報の不足」「CPUに限らずすべての製品コストを含むコスト」このような問題によって、最適なハードウェアの選択はきわめて難しいものとなります。安価で処理速度の大きいCPUが、周辺機器との接続に必要となるバス・ロジックやそのために生じる処理速度の低下によって、結局はコスト高になってしまうなどというケースもあります。特定のプロジェクトに必要なCPUの速度は、そのタスク実行のためにCPUにどれだけのスピードが実際に要求されるかを計算し、それを3倍して割り出します。また、バスにどの程度のスピードが要求されるかを判断します。PCIバスのようなセカンダリー・バスがある場合には、それも考慮に入れます。バスのスピードが劣る場合(DMAトラフィックが飽和状態)、CPUのスピードが高速であっても、それを大幅に低下させてしまうおそれがあります。次に、組み込みLinuxアプリケーションに最適なハードウェア・ソリューションをいくつかご紹介します。

Bright Star Engineering :Bright Star EngineeringのipEngine-1は、組み込みLinuxを使用するクレジットカード・サイズのシングルボード・コンピューターです。これはPowerPCベースのCPUを使用し、イーサネット、LCD/ビデオ・コントローラー、USB、シリアルI/O、ユーザー構成可能な16KゲートFPGAなど、一連の搭載周辺機器を使うことができます。BrightStar Engineeringの組み込みLinux構成では、ipEngineの4MBフラッシュ・メモリーからのLinuxのブートが可能です。

Calibri :OSとして組み込みLinuxを使用するCalibriTM-133は、そのまま使えるコンパクトな多目的ネットワーク・アプライアンスです。ファイアウォール、VPN、ルーティングのニーズに対応する、高効率/低コストのソリューションです。

EmbeddedPlanet :EmbeddedPlanetは、Monta VistaのHardHat Linuxを搭載したPostPC時代のコンピューターを開発しました。カラフルな半透明ケースのLinuxPlanet は、PowerPCベースのコンピューティング・エンジンとI/Oカードによって、デジタルI/O、アナログI/Oが可能です。

Eurotech :Eurotechは組み込みPC SBCを提供し、glibc 2.1.2ベースの小型産業コンピューター用完全Linuxシステム「ET-Linux」のスポンサーとなっています。

Microprocess Ingenierie :Microprocess Ingenierieは、産業市場および組み込み市場向けの標準製品ならびにカスタマイズ製品の開発、製造、販売を行っています。MicroprocessIngenierieは、リアルタイム・ソフトウェアのグローバルな業務を展開しており、システム統合における優れた実績を持ちます。740PowerPC compactPCIボードなどの製品は、Linuxの標準ディストリビューション、または組み込みLinuxのバージョンに応じたオーダーが可能です。

Moreton Bay :Moreton Bayは、NETtel 2520およびNETtel 2500クラスのLinuxベース・インターネット・ルーターをリリースする予定です。これらの小型で接続が簡単なインテリジェント・ルーターは、フラット・ネットワーク用のシンプルで安全かつ手ごろなエクストラネット対応の仮想プライベート・ネットワーク(VirtualPrivate Network - VPN)を提供します。NETtelルーター・ファミリーは、組み込みLinuxカーネルを使用します。開発キットによって、カスタマイズ・コードのフラッシュ・メモリー内への格納およびNETtel内部での実行が可能となります。特殊な暗号化/認証プロトコル、また、リモート・コントロール装置としてNETtelを使用するローカル・モニタリング・スクリプトをコードとして使用することもできます。

Matrix Orbital :これはオプションとして掲載しますが、推奨ではありません。Matrix Orbitalは一連のシリアルLCDおよびVFDを製造しています。これは多くのLinuxユーザーが組み込みシステムに使用しているものです。8x2から40x4文字のLCD、20x2および20x4のVFD、さらに240x64グラフィックLC(128x128も発表予定)まで、幅広い製品ラインがあります。ディスプレイとの通信はRS232またはI2C経由で行われますが、いずれもあらゆるモジュールで標準となっています。モジュールのBIOSには、広範なコマンド・セットが組み込まれています。


リアルタイム組み込みLinuxアプリケーション

組み込みシステムにおける最も重要な課題の1つは、リアルタイムOSに対するニーズです。「何を指してリアルタイムと言うか」という点は、人によってその解釈に大きな差があり、1マイクロ秒の範囲内でのイベントへの応答を意味する場合もあれば、50ミリ秒を意味する場合もあります。さらに、リアルタイムの厳密さにも大幅な違いがあります。システムによっては、イベントに対して「短い決定レスポンス・レイテンシ」による厳格なリアルタイム・レスポンスを要求する場合もあり、しかしまた、詳しい分析によると、多くのシステムで要求されているのは、厳密なリアルタイムすなわち「ハード・リアルタイム」ではなく「ニア・リアルタイム」であることも分かります。多くの場合、リアルタイムに必要なのは「時間」と「バッファー・スペース」とのかけ引きです。メモリー価格が低下し、CPUのスピードが高まるにつれ、今やニア・リアルタイムはハード・リアルタイムよりもはるかに一般的で、しかもリアルタイムを唱える市販OSの多くが、ハード・リアルタイムとはほど遠いものとなっています。通常、こうしたシステムの詳細な設計を行う場合には、そのシステムのリアルタイム要件に対応するため、ドライバーの割り込みとアプリケーションに関するきわめて慎重な取り組みが必要とされます。

RT-Linux(リアルタイム拡張機能を持つLinux)は、重要な割り込みが必要に応じて確実に実行できるよう、割り込みマネージャーによって割り込み処理を正確に制御します。この制御を確実に行うには、CPUの割り込み構造とタスク切り替えハードウェアのサポートが重要になります。このアプローチは広範なリアルタイム要件に十分に対応するものであり、たとえリアルタイム拡張機能がない場合でも、Linuxは複数のイベント・ストリームの処理に優れた性能を発揮します。たとえば、ローエンドのPentiumを使用するLinuxPCシステムにおいて、複数の10BaseTインターフェースの実行を効果的に行いながら、同時に56KBPSのフルスピードで、データ損失なく文字レベルでのシリアル・ポートの稼働が可能です。

注目すべきリアルタイム・ハードウェア/ソフトウェアLinux APIとしては、RTLinux、RTAI、EL、Linux-SRTがあります。RTLinuxは、NewMexico Institute of Technologyによって開発されたハード・リアルタイムLinuxAPIであり、TAI(DIAPM)は、Polytechnic Politecnico di Milano(DIAPM)の航空工学部によって開発されたRTLinuxリアルタイムAPIの派生品です。EL/IXは、提案POSIXベースのハード・リアルタイムLinuxAPIであり、Red Hatがプロモートしています。また、Linux-SRTは、リアルタイムAPIに代わるソフト・リアルタイムAPIであり、プログラムの変更や再構成を行わずにパフォーマンス強化機能をあらゆるLinuxプログラムに提供します。

上記の詳細について、また、標準Linux OS向けの多彩なソフトウェア拡張機能、開発ツール、サポート、トレーニング・コースを提供するWebサイトについては、この記事の末尾にある参考文献のセクションをご覧ください。

短い決定レスポンス・レイテンシ

一部のリアルタイム組み込みシステムは、特定のタスクにおいて外部イベントに対する迅速な応答が求められます。たとえば、ミサイル内部に組み込まれたカスタム・マイクロコントローラーには、特定の標的への攻撃を行う際、移動する標的、天候、人間など、外部イベントへの迅速対応が必要となります。「短い決定レスポンス・レイテンシ」とは、組み込みシステム自体が外部イベントに対応するためのにかかる時間を決定することが出来る、ということを意味しています。


構成の手順

ここで、ネットワークとXサーバーを提供するLEM(小型の組み込みLinuxディストリビューション)の作成方法を見てみましょう。このディストリビューションはダウンロード可能ですが必須ではありません。独自の組み込みLinuxOSの構築には、完全なLinuxディストリビューション(ユーティリティー、ソース、コンパイラー、デバッガー、ドキュメンテーションなど必要なものすべて)が必要です。以下にLEM作成に使用できるソフトウェアの一覧を示します。

TinyLogin :TinyLoginは、ログインの処理、認証、パスワード変更、その他、組み込みシステムにおけるユーザー/グループ維持のための小型UNIXユーティリティー・スイートです。また、システム・セキュリティー強化のためのシャドー・パスワードもサポートしています。TinyLoginは、その名のとおり非常に小型で、組み込みシステムのBusyBoxの補完として優れています。

BusyBox :BusyBoxは、POSIXスタイルのコマンド/機能の最小サブセットを提供するマルチコール・バイナリであり、ブート・フロッピーや組み込みシステムなど、きわめて小型なものを対象としています。DebianRescue/Installシステム(BusyBox開発のきっかけとなった)、Linux RouteurProject、LEM、lineoなどに採用されており、サポートはErik Andersenが提供しています。

Ash :Ashは非常に小型のBourneシェルです。

Sysvinit :Sysvinitは、最も広く採用されているLinux向けinitパッケージです。私たちはinitおよびCバージョンのスタート・ストップ・デーモンを使用します。

これらの詳細については、参考文献のセクションをご覧ください。


ブート・ディスクの作成

ブート・ディスクは、フロッピー・ディスクに収められた小型の単独Linuxシステムです。ブート・ディスクによって、完全なフルサイズLinuxシステムと同じ機能を数多く実行することができます。以下は、Bootdisk-HOWTOをベースとしています(参考文献を参照)。

ステップ1. BIOS
すべてのPCシステムは、ROM内のコード(BIOS)を実行してブート・プロセスを開始し、ブート・ドライブのセクター0、シリンダー0からセクターをロードします。ブート・ドライブは通常、先頭のフロッピー・ドライブ(DOSではA:、Linuxでは/dev/fd0)です。次にBIOSがこのセクターの実行を試みます。ほとんどのブート・ディスクには、セクター0、シリンダー0に次のいずれかが含まれます。

  • LILOなど、ブート・ローダーのコード。カーネルの位置を特定し、カーネルのロード、実行、ブートを開始します。
  • Linuxなど、オペレーティング・システム・カーネルの開始。

ディスケット、ハード・ドライブ、あるいは他のメディアにLinuxカーネルをそのままコピーした場合、ディスクの最初のセクターがLinuxカーネル自体の最初のセクターとなります。この最初のセクターによってブート・デバイスから残りのカーネルがロードされ、ブート・プロセスが続行します。

ステップ2. ブート・ローダー
ブート・プロセスには、LILOなどのブート・ローダーを使用します。これによって、開発プラットフォームとプロダクション・プラットフォームをハードウェア上に共存させることができ、リブートのみで切り替えが可能になります。LILOブート・ローダーはBIOSによってロードされ、その後、カーネル、またはその他OSのブート・セクターがロードされます。また、簡単なコマンド・ライン・インターフェースによって、インタラクティブなブート選択が可能です。LILOの詳細については、参考文献をご覧ください。

ステップ3. カーネル
カーネルは、ハードウェアをチェックしてルート・デバイスをマウントし、ルート・ファイルシステムのinitプログラムを実行します。

ステップ4. init
initは、Linux OSで実行される他のあらゆるプロセスの親となります。initは、必要に応じて子プロセスの監視、開始、停止、再起動を行います。initは、あらゆる情報を/etc/inittabから取得します。

ステップ5. inittab
ファイル/etc/inittabは、システム・セットアップの実行において/etc/rc...というスクリプトを参照します。ここには、ログイン・プロセスを処理するgettyツールのエントリーもあります。

ステップ6. ログイン・プロセス
inittabファイルには、ユーザーに対応して各コンソールごとに1つのgettyがあります。gettyは/bin/loginを起動し、ユーザー・パスワードの確認を行います。

ステップ7. 新規パーティションの作成
LFS-HOWTO(参考文献を参照)から:新たなLinuxシステムの構築に先立って、新規システムを構築するための空のLinuxパーティションが必要になります。すでにLinuxNativeパーティションがある場合、このステップと次のステップを省略して先に進むことができます。適切なハード・ディスクをオプションとして(プライマリー・マスターIDEディスク上に新規パーティションを作成する場合の/dev/hdaなどのように)、fdiskプログラム(またはcfdisk)を開始します。LinuxNativeパーティションを作成してパーティション・テーブルを記述し、(c)fdiskプログラムを終了します。リブート(パーティション・テーブル更新のため)を指示するメッセージが表示されたら、作業を続ける前にこの時点でシステムをリブートしてください。

ステップ8. 新規パーティションにext2ファイルシステムを作成する
LFS-HOWTO(参考文献を参照)から:mke2fsコマンドを使って、新規ext2ファイルシステムを作成します。$LFSを唯一のオプションとし、ファイルシステムが作成されます。これ以降、この新たに作成されたパーティションを$EMBPARTと呼ぶことにします。$EMBPARTは、作成したパーティションによる置き換えが必要です。

ステップ9. パーティションのマウント
新たに作成されたファイルシステムにアクセスするには、ファイルシステムのマウントが必要になります。ファイルシステムのマウントを行うには、/mnt/hda?(?はワイルドカード)ディレクトリーを作成して、シェル・プロンプトで以下のように入力します。

mkdir /mnt/hda?
mount $EMBPART /mnt/hda?

/dev/hda4にパーティションを作成し、これを/mnt/hda4にマウントした場合には、ファイルを$dollar;EMBPART/usr/sbinにコピーしたステップに戻り、そのファイルを/mnt/hda4/usr/binにコピーしてください。この作業は、ステップ14($EMBPART/usr/sbinのファイルをコピーする)の最後のコマンドの後に行います。

ステップ10. ファイルシステムの移植
ルート・ファイルシステムには、完全なLinuxシステムのサポートに必要なすべてのものが含まれていなければなりません。ディレクトリー構造は、FHS(ファイルシステム階層標準)(参考文献を参照)と大きく異ならないようにします。

ステップ11. ディレクトリー
新たにマウントされたファイルシステム内のmkdir関数によって、次のディレクトリーが作成されます。

/proc
procファイルシステムに必要なディレクトリー・スタブ
/etc
システム構成ファイル
/sbin
クリティカル・システム・バイナリー
/bin
システムの一部と見なされる基本バイナリー
/lib
ランタイム・サポートを提供する共用ライブラリー
/mnt
保守のためのマウント・ポイント
/usr
追加のユーティリティーとアプリケーション

  • cd /mnt/hda?
  • mkdir bin dev home proc sbin usr boot etc liv mnt root tmp var
  • mkdir -p usr/bin usr/sbin usr/share usr/lib
  • mkdir -p etc/config etc/default etc/init.d etc/rc.boot
  • mkdir -p etc/rc0.d etc/rc1.d etc/rc2.d etc/rc3.d etc/rc4.d etc/rc5.d etc/rc6.detc/rcS.d

/dev
devディレクトリーは、デバイスの入出力に必要なスタブです。このディレクトリー内の各ファイルは、mknod関数によって作成することもできます。時間を節約するために、次の命令を使って、必要なdevエントリーをデスクトップLinuxから直接コピーすることもできます。
cp -dpR /dev /mnt


TinyLoginとログインの従属性をインストールする

TynyLogin(インストールは、参考文献のセクションを参照)は、35KB以下のツール /bin/addgroup、/bin/adduser、/bin/delgroup、/bin/deluser、/bin/login、/bin/su、/sbin/getty、/sbin/sulogin、/usr/bin/passwdを提供します。

これらのコマンドの完全な記述は、メイン・ディストリビューションdocおよびmanページを参照してください。

ステップ12. TinyLoginの構成
TinyLoginのREADMEから:TinyLoginは、必要なコンポーネントのみ構築できるようにモジュール化されているため、バイナリー・サイズが低く抑えられています。不要なTinyLoginコンポーネントをオフにするには、tinylogin.def.hファイルを編集して、C++スタイルのコメント(//)を使って不要な部分をコメント化してください。

ステップ13. TinyLoginのインストール
構築が完了すると、tinylogin.linksファイルが生成されます。make installはこれを使用し、すべてのコンパイル済み関数のtinyloginバイナリーにsymlinksを作成します。デフォルト設定では、PREFIX環境変数が定義してある場合を除いて、symlinkフォレストは、makeinstallによってpwd /_installに置かれます。

ステップ14. Sysvinitおよびスタート・ストップ・デーモンのインストール
カーネルは、ロード完了後、ブート・プロセスを終了するためにinitプログラムの実行を試みます。ここで次の操作を行います。

  1. Sysvinitアーカイブを解凍します。
  2. srcディレクトリーに進みます。
  3. $EMBPART/sbinのinit実行可能プログラムをコピーします。

Sysvinitパッケージでは、contribディレクトリーにスタート・ストップ・デーモンのCバージョンもあります。

  1. これをコンパイルします。
  2. $EMBPART/usr/sbinのファイルをコピーします。

ステップ15. Sysvinitの構成
Sysvinitには、inittabという名前の構成ファイルが必要ですが、これは$EMBPART/etcにあるはずです。次にLEMディストリビューションに使用されているものを紹介します。

リスト1. inittab構成スクリプト
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.6 1997/01/30 15:03:55 miquels Exp $
# Modified for LEM 2/99 by Sebastien HUET 
# default rl.
id:2:initdefault:
# first except in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS
# single-user mode.
~~:S:wait:/sbin/sulogin
# /etc/init.d executes the S and K scripts upon change
# 0:halt 1:single-user 2-5:multi-user (5 may be X with xdm or other) 6:reboot.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# CTRL-ALT-DEL pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -r now
# Action on special keypress (ALT-UpArrow).
kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."
# /sbin/mingetty invocations for runlevels.
1:2345:respawn:/sbin/getty 9600 tty1
2:23:respawn:/sbin/getty 9600 tty2
#3:23:respawn:/sbin/getty tty3 #you may add console there
#4:23:respawn:/sbin/getty tty4

ステップ16. 初期ブート・スクリプトの作成
inittabファイルから分かるように、Sysvinitはそのディレクトリーに追加スクリプトを必要とします。

ステップ17. 必要なディレクトリーと基本ファイルの作成
次のコマンドを使ってディレクトリーを作成します。

リスト2. ディレクトリーと基本ファイルを作成するスクリプト
cd $EMBPART/etc
mkdir rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d init.d rcS.d rc.boot

解凍されたSysvinitソース・ディレクトリーに進みます。
debian/etc/init.d/rcを#EMBPART/etc/init.dにコピーします。
#EMBPART/etc/init.d/に進みます。
LEMにあるものと同様の新規ファイルrcSを作成します。

リスト3. RCSスクリプト
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
/etc/default/rcS
export VERBOSE
# Trap CTRL-C  only in this shell so we can interrupt subprocesses.
trap ":" 2 3 20
# Call all parts in order.
for i in /etc/rcS.d/S??*
do
        [ ! -f "$i" ] && continue
        case "$i" in
                *.sh)
                        (
                                trap - 2 3 20
                                . $i start
                        )
                        ;;
                *)
                        $i start
                        ;;
        esac
done
# run the files in /etc/rc.boot
[ -d /etc/rc.boot ] && run-parts /etc/rc.boot

distroからrunの部分を$EMBPART/binにコピーします。

ステップ18. 基本スクリプトの追加
ここで使用されているコマンドの多くは、UNIXシェル・スクリプトの内部に組み込まれている、パスの設定、エクスポートなどを行うUNIX/Linuxコマンドです。

リスト4. コメント行
<!-reboot---------------------------------------------->

次のような部分を含む新規ファイルrebootを作成します。

リスト5. rebootスクリプト
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
echo -n "Rebooting... "
reboot -d -f -i
<!-halt---------------------------------------------->

次のような部分を含む新規ファイルhaltを作成します。

リスト6. haltスクリプト
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
halt -d -f -i -p
<!-mountfs---------------------------------------------->

要約

Linuxオペレーティング・システムは、インターネット・アプライアンスから専用制御システムまであらゆる用途の組み込みアプリケーションの分野において、その前途がきわめて有望であると言えます。新たに製造されるマイクロコンピューター・チップ全体の約95%が、組み込みアプリケーション用です。Linuxの持つ、パワー、信頼性、柔軟性、拡張性は、数多くのマイクロプロセッサー・アーキテクチャー、ハードウェア・デバイス、グラフィックス、通信プロトコルのサポートと相まって、幅広いプロジェクトおよび製品に対応しソフトウェア・プラットフォームとしてのLinuxの人気をますます高め、その位置付けを確かなものとしています。

Linuxはソースという形で広く自由に提供されており、Linuxを採用する市場とアプリケーションの多様なニーズを満たすために、Linuxとそのサポート・ソフトウェア・コンポーネントのさまざまなバリエーションおよび構成が生み出されてきました。また、小型バージョンとリアルタイム機能強化バージョンがあり、本来PCアーキテクチャー・オペレーティング・システムとして作られたものであるにもかかわらず、PowerPC、ARM、MIPS、68K、マイクロコントローラーなど、メモリー管理ユニット搭載/非搭載のx86以外のCPUに対して数多くのポートを持ちます。しかし、注意してください。近い将来、その他にもさまざまなIT分野においても数多くのバージョンが続々と登場することになるでしょう。

参考文献

  • ETLinuxのサイトから完全Linuxディストリビューションを入手できます。
  • Linuxマルチユーザー・ネットワーク・バージョンLEMをご覧ください。
  • MMU/uClinuxのないシステム用のLinuxを入手することもできます。
  • ThinLinuxは、専用カメラ・サーバー、X-10コントローラー、MP3プレーヤーなど、組み込みアプリケーション用の最小版Linuxディストリビューションです。
  • RTLinuxは、New Mexico Institute of Technologyで最初に開発されたハード・リアルタイムLinuxAPIです。
  • EL/IXは、POSIXベースのハード・リアルタイムLinux APIです。
  • Ashは、非常に小型のBourneシェルです。
  • LILOドキュメンテーションをお読みください。
  • リアル・タイムLinux(Real-Time Linux)は、標準Linuxオペレーティング・システムの拡張機能です。これは標準Linuxカーネルと、最低限のタスクを実行する簡単で合理化されたリアルタイム監視プログラムを提供します。また、ユーザー定義の高優先度(リアルタイム)タスクの挿入を可能とし、標準Linuxの高度なサービス/機能を実現します。
  • Zentropixは、リアルタイムLinuxに重点を置き、開発ツール、サポート、トレーニング・コース、テスト済みの構成管理リアルタイムLinuxインストールCDを提供しています。
  • 組み込みLinuxについては、IBMのサイトをご覧ください。
  • IBMの組み込みLinux製品とデベロッパー・サポートをご覧ください。
  • developerWorksに掲載されているその他のLinux参考文献をご覧ください。
  • developerWorksに掲載されているその他のオープン・ソース参考文献をご覧ください。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Linux
ArticleID=228112
ArticleTitle=組み込みLinuxアプリケーション:概要
publish-date=08012001