特集 : 最新組み込みLinux実践講座Part2

対象製品: Armadillo-500Armadillo-300Armadillo-9Armadillo-240Armadillo-230Armadillo-220Armadillo-210Armadillo(HT1070)Armadillo-J
Part 1 Part 3

(株)アットマークテクノ
荘司靖
SHOJI Yasushi

この文書は技術評論社「Software Design」2007年11月号に掲載されたものです。

本章では,Armadillo-500 を使った組み込み機器開発を解説する前に,Linux組み込み開発の基礎知識を取り上げます.

組み込み機器とLinuxの現状

最近では,Linuxが製品に組み込まれた程度ではニュースにならないようです.それもそのはず,すでに身の回りにある多くの製品にLinuxが組み込まれているのです.知っていましたか?

松下電器産業㈱やソニー㈱などがCE Linux Forum注1を立ち上げてから4年が経過しました.筆者が数年前に,同フォーラムのメンバーであるNECの携帯電話「N902i」を購入したとき,化粧箱の中にちゃんとGPL とソースコードが付いてきたのを見て「おぉ,ついにここまできたか」と妙に感慨深かったのを覚えています.携帯電話に留まらず,最近のデジタル家電では本当に多くの製品にLinuxが使用されているようです(表1,写真1).

●写真1 Nokia 770 Internet Tablet

●表1 おもなLinux 組み込み製品 (参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20061010/250243/)
種別製品名URL
ルータFONhttp://www.fon.com/jp
PDAシャープZaurushttp://ezaurus.com/
PDAソニーmylohttp://www.sony.jp/products/Consumer/Mylo/
ゲームコンソールソニーPLAYSTATION 3http://www.jp.playstation.com/ps3/
インターネットタブレットNokia N800http://www.nseries.com/
携帯電話NEC /松下電器FOMA 端末http://www.nttdocomo.co.jp/product/
薄型TV 松下電器VIERAhttp://viera.jp/
ピアノヤマハサイレントアンサンブルhttp://yamaha.jp/product/keyboards/disklaviers/

なぜLinuxなのか

では,なぜ今こんなにもLinuxが採用されているのでしょうか? Linux が採用される前と今では何が変わったのでしょうか?

ソフトウェアの肥大化,ハードウェアの高速化

その鍵を握るのがソフトウェアです. 元Microsoft CTO,Nathan Myhrvold氏によれば「ソフトウェアはガス」のようなものであり,「入れ物がいっぱいになるまで膨張」します.さらにそのガスは「ムーアの法則に制限されるまで膨張が止まらない」そうです注2.たしかに昔に比べると,PCのCPU動作クロックやメモリ容量は数倍~数十倍にも増加していますが,PC は一向に速くなった感じがしません.PCの起動時間だけに限れば,MS-DOS がインストールされていたころのi486DX2注3のほうが今より速かったはずです.

組み込み機器も同じです.Wikipedia によると,現在「組み込みシステム」と呼ばれるようなシステムの先駆けとなったのは,月面探査を目的とした米国のアポロ計画で宇宙船の誘導に使われた「アポロ誘導コンピュータ」だそうです注4.このアポロ誘導コンピュータのCPU動作クロックは,今のCPUの速度と比較すると驚くほど低い1MHz ほどだったようです.本稿を執筆しているPCの2,000分の1以下の処理能力で宇宙飛行をガイドしたとは,驚きを通り越して恐しいくらいです.

今回本特集で使うArmadillo-500 のCPU は400MHzで動作しますので,単純に400倍の処理能力があることになります.それでも月までガイドはしてくれませんけどね:-)

ネットワークと言う名の黒船

ソフトウェアの膨張の一因は,ネットワークの普及です.Linuxのネットワークサブシステムを例にとってみます.Linuxのサブシステムごとにコードの行数(LoC:Line of Code)を比較してみました(表2).厳密な比較にはならないかもしれませんが,規模感は得られると思います.

●表2 Linux サブシステムごとのLoC 比較
(Linux カーネル2.6.23-rc8)
サブシステム行数
drivers/net 875,884
fs 718,562
net484,749
drivers/scsi478,010
sound442,824
drivers/media332,184
drivers/char 283,543
drivers/video 258,236
drivers/usb 241,064
arch/arm 238,166
arch/powerpc226,876

スタンダートであること

組み込み機器を使うお客様にとって,その機器のOSがLinuxかどうかということには意味がありません.それと同様に,開発者にとってもLinuxでなければいけない必要はないはずです.しかし現実としてLinux が選ばれる要因の1 つには,LinuxがPOSIX というスタンダードな開発インターフェースを提供している点が挙げられます.

このおかげで,POSIX準拠のアプリケーションは簡単にLinuxに移植できます.GNUプロジェクトのツール群もPerlもviも,最初からLinux上で動いていたわけではありません.それらのツール群はもともとDEC VAXやSUN-3などのUNIXシステム上で動くように開発されていました.Linuxが台頭しはじめてから,世界中のプログラマがこぞってLinuxでも動くよう移植を進めていったのです(表3).

●表3 Linux に関連するおもなプロジェクトの年表
年月出来事
1983 年1 月 GNU プロジェクトスタート
1984 年X Window System 開発開始
1987 年3 月GNU C Compiler 最初のリリース
1987 年12 月Perl 最初のリリース
1988 年POSIX(IEEE Std 1003.1-1988)リリース
1991 年9 月Linux 0.01 リリース
1995 年3 月MySQL 最初のリリース
1995 年4 月Apache サーバ最初のリリース
1995 年6 月PHP 最初のリリース
1996 年10 月KDE プロジェクトスタート
1997 年8 月GNOME プロジェクトスタート

求められているのはLinux ベースのソフトウェアスタック

結局のところ,複雑化した要求に対応するためにはLinux自体が必要なのではなく,Linuxをベースとしたソフトウェアスタックが必要なのです.

2007年4月,NokiaがSymbianを搭載した携帯電話向けに「Open C」というプラグインの発表を行いました注5.このプラグインはSymbian のPOSIXライブラリ「P.I.P.S」用の追加ライブラリで,libglib やlibssl,libzなどを提供します.Open Cの背景には「車輪の再発明」をせず「オープンソースに慣れ親しんだ人が簡単に開発を行える」ようにするという目的がありました.

同じく携帯電話の市場では,㈱ACCESS がACCESS Linux Platform(ALP)を,QtやQtopiaで有名なTrolltech がGreensuite という携帯電話用の開発環境をリリースしています.さらに,携帯電話すべてのコンポーネントをオープンソースで行うOpenMokoもリリースされました(表4).

●表4 Linux 組み込み開発関連の年表
年月出来事
2004 年後半 CE Linux Mobile Phone Profile Working Group スタート
2005 年11 月Linux Phone Standards(LiPS)フォーラムスタート
2006 年2 月ACCESS Linux Platform アナウンス
2006 年8 月Trolltech Greenphone アナウンス
2006 年11 月OpenMoko アナウンス
2006 年11 月Trolltech Greensuite アナウンス
2007 年1 月LiMo Foundation アナウンス
2007 年4 月Nokia Open C リリース
2007 年4 月GNOME Mobile & Embedded Initiative アナウンス


問題はほぼ解決している

10 年前のLinux であれば,組み込み機器に採用するにあたって,起動時間,サイズ,消費電力,リアルタイム性など多くの問題が山積みでした.しかし,いろいろなグループや開発者のおかげでこれら多くの問題がすでに解決,または解決できる目処がたっています.

技術的な問題

●システム初期化に関わる問題

起動時間の多くは,カーネルの初期化後に行われるシステムの初期化に費やされています.従来の初期化方法と言えば,シェルスクリプトを逐次実行するSystem Vの方法が一般的でした.

この方法には2つの問題があります.1つは,シェルスクリプトによる実行のため,fork やexec というシステムコールの中でも比較的実行に時間のかかるものをひんぱんに呼び出すこと,もう1つは,逐次実行のためにCPUを効果的に使用できないこと注6です.

CE Linux Forumでは,Busyboxのashを拡張し,fork/execのオーバーヘッドを軽減する方法が提案されています.Busybox は小さなサイズを第一の目標に掲げ,基本となるUNIXのコマンドを1つのバイナリに集めたツールです.この特徴を利用し,ashを使ったシェルスクリプトでコマンドが呼ばれた場合にはfork/execを行うことなく同等の処理を実現しています.

●アプリケーションの複雑化に伴う問題

また,アプリケーションの複雑化による起動時間への影響も問題になってきました.アプリケーションの多くは,特定の機能を実現するためのライブラリを使用しています.多機能なアプリケーションの場合,100以上の注7ライブラリをリンクしていることもあり,これらのリンク処理だけでも多くの時間が費されることになります注8

これを解決するために,prelink という方法が提案され注9,実際に使用されています.prelink は名前が示すとおり,実行前にリンク作業を行っておき,実行直前のリンク作業を軽減する手法です.

●サイズに関わる問題

サイズも問題でした.ワークステーションやサーバ用途として発展してきたLinuxですので,バイナリのサイズよりも豊富な機能のほうが優先されてきました.しかし,GNU Libcの置き換えとしてuClibc やdiet libc,core utils の置き換えとしてBusyboxなどが開発され,アプリケーションやライブラリのサイズを小さくすることが可能になりました.

開発環境の問題

●クロス開発環境

組み込み機器を開発するときに必要なのが,開発環境の整備です.デスクトップ/サーバのLinuxとは異なり,組み込み機器のCPUはIntel x86以外の場合が多くあります.また,前述のとおりシステムライブラリも異なる場合が多いため,クロスコンパイルという手法が必要になります.また,業務でLinux以外のOSがインストールされたPCを日々使用している場合,Linuxベースの開発環境を構築するのも手間です.

そこで㈱アットマーククノでは,仮想コンピュータ上に開発環境を構築し,簡単に開発を行う方法を提案しています.仮想化することで,環境を万が一壊してしまった場合でも,ホストOS環境は破壊されませんし,再度構築するのも楽です.

また,仮想化されていれば,PC のスペックやOS環境が更新されたとしても,開発時と同じ環境を手軽に再現できます.組み込み機器のように息の長いサポートと堅牢性が必須のシステム開発では,この再現性が必須なのです.

●統合開発環境

今まで職人の域だった組み込み機器の開発では,あまり統合環境が重要視されてきませんでした.しかし,ソフトウェア規模の増加により,多くの開発者が開発するようになると,統一された統合開発環境が必要になってきます.

統合開発環境として名高いEclipseには,組み込み機器開発用プラグインの開発プロジェクト「Device Software Development Platform(DSDP)注10」があります. DSDP にはDevice Debugging,embedded Rich Client Platform(eRCP),Mobile Tools for the Java Platform(MTJ),Native Application Builder(NAB),Target Management,Tools for mobile Linux(TmL)などのサブプロジェクトがあり,今後の発展が楽しみです.

COLUMN

GPLv3 と組み込み機器

2007 年6 月,ついにGPL の新しいバージョンがリリースされました.すでに一般消費者向けの製品注AにLinux を採用しているのであれば,GPLv3 のセクション6 にある「インストールに関する情報の開示」は興味があるところではないでしょうか.

この条項は,次のような背景を反映し追加されました.あるメーカがオープンソースを採用した製品を発売しました.このメーカはGPLv2 に従ってソースコードの公開をしているのですが,その製品には特殊な仕掛けがあり,メーカがリリースしたバイナリでなければ動かないようになっています.追加理由と決意がGPLv3 の序文に述べられています.

「メーカとして可能とはいえ,いくつかの機器はユーザがソフトウェアをインストールすることや,変更したソフトウェアの実行ができないように作られている.これは「ユーザがソフトウェアを変更する自由」を守る考えと基本的に矛盾する.しかもこのような意図的な悪用が,信じがたいことに個人消費者向け製品で起きている.このため,それらの製品の慣行を抑制するように,今回のバージョンのGPL を設計した.もし他でも同じような問題が大きくなるようであれば,ユーザの自由を守るために将来のGPL でこの条項を拡大する用意がある」(筆者意訳)

セクション6 には,インストール機能を持たない製品の場合はインストールに関する情報の開示が必要ないと記載されています.しかし,ソフトウェアアップデートの機能を持つ製品の場合,この例外が適用されません.

GPL の基本思想である自由を認めたうえで,この条項が組み込み機器にどれだけ影響を及ぼすか今後の動向を見守っていきたいと思います.

人材的な問題

「2007年版組込みソフトウェア産業実態調査」注11によると,組み込みソフトウェア技術者の育成と品質の向上が必要との意見が圧倒的に多いことが確認できます.さらに「製品出荷後の設計品質問題の発生率」を見ると,不具合が発生しなかった割合が2005年の10%以下から,2007年の30%に増えているものの,20 %以上の不具合率と答えた割合も20%から40%以上にまで増え,二極化が進んでいるのがわかります.

高度に複雑化した組み込み機器の設計は,サーバやエンタープライズアプリケーションの開発で必要な知識に加え,キャッシュメモリやバス帯域の考慮,ハードウェア制御,CPU アーキテクチャなどコンピュータアーキテクチャ全般の知識,さらに高級言語やコンパイラ,アセンブラなどプログラミングに関する幅広い知識が必要になります.また,上位アプリケーション層からハードウェアまでの全領域で何がどのように影響し合い,または独立して動いているかという切り分けを行う能力が必要になります.

そのため,組み込みソフトウェア開発者の教育は他の開発者よりも長期間必要になります.また,技術的な情報のやりとりは日本語以外のことが多く,言語能力も問題になる場合があります.

しかし,組み込み機器の開発は普通のソフトウェア開発以上に「モノ作り」の楽しさを堪能できる仕事です.先の実態調査の中でも「現在の仕事に就いた理由」のうち「自分の能力を活かせる仕事だから」や「おもしろい仕事だから」,「やりがいのある仕事だから」などが上位に並んでいます.

「組み込みLinux」とは

実はたいして変わらない

実は,「組み込みLinux」などというモノがあるわけではありません.組み込み機器でLinuxを動かせば,それが組み込みLinuxなのです.

組み込みLinuxを仮に「組み込み機器に採用された,Linuxベースの(ソフトウェア)システム」と仮定してみましょう.この場合は,PCで使用しているLinuxディストリビューションと同じ意味になります.組み込み機器で動いているか,PCで動いているかの違いしかありません.

では「組み込み機器に特化したLinuxカーネル」と定義してみるとどうでしょう.この場合,ハードウェア特有の機能に対応したLinuxカーネルと読むこともできます.しかし,その変更点が統合されてしまうと両者に差がなくなり,普通の(?)Linuxになってしまいます.

何が違うのか

では何が違うのかと言うと,PCと組み込み機器ではハードウェアとソフトウェアが少しだけ違います.それを順番に見ていきましょう.

●コンピュータアーキテクチャ

図4 と図5 はPC と組み込み機器のアーキテクチャのブロック図です.組み込み機器は多種多様なのでこの構成とは限りませんが,基本的な部分は同じです.どちらもCPU,1次記憶装置,2次記憶装置があり,それぞれがバスでつながっています.遅い周辺機器が高速バスの帯域を圧迫しないようにバスブリッジを介した低速バスにつながっているところも同じです.つまり,PCであろうと組み込み機器であろうと最近のコンピュータアーキテクチャを踏襲しているのです.

●図4 PCアーキテクチャのブロック図



●図5 組み込み機器のブロック図


● I/O ポート

図6と図7はI/Oポートの形式を表わしたものです.PC で使用されているIntel のCPU ではポートマップドI/O と呼ばれる方式を採用しています.この方式の特徴は,I/Oのアドレス空間とメモリのアドレス空間が別になっていることです.このため,メモリへの読み書きとは別に,入出力機器へのアクセスには専用のCPU命令を使用します.

Armadillo-500 で採用しているARM CPU やIBM PowerPC などは,メモリマップドI/O という方式を採用しています.こちらは入出力機器がメモリと同じアドレス空間に混在し,同じCPU命令を使いアクセスすることができます.

●図6 ポートマップドI/O

●図7 メモリマップドI/O


●ソフトウェアコンポーネント

表5は,PCとArmadillo-500のソフトウェアコンポーネントを比較した表です.PC 側はDebian GNU/Linux をインストールした場合,Armadillo-500は出荷時のデフォルト状態で比較しています.

●表5 ソフトウェアコンポーネントの比較
プラットフォームPC Armadillo-500
ファームウェアBIOSOn Chip ROM
ブートローダGrubHermit-at
カーネルLinux Linux
ユーザランドDebian GNU/LinuxAtmark Dist

ファームウェアは使用するCPUに大きく依存するソフトウェアです.基本的に書き換えることはできませんので,ここでは割愛します.

Armadillo-500では,PCで使用しているブートローダではなく,Hermit-Atというブートローダを使用しています.Hermit-AtはBlue Mug(http://bluemug.com/)で開発されているブートローダ「Hermit」からの派生成果物で,Armadilloシリーズすべてで採用されています

Hermit-Atのメイン機能は,オンボードフラッシュメモリに格納されているLinuxをメモリに呼び出し,制御を渡すことです.他にもPC用のブートローダとは異なり,シリアルまたはネットワーク経由でオンボードフラッシュメモリを書き換える機能や,frob というメモリ空間の読み書きを行う機能を持っています.

カーネルはもちろんPCと同じLinuxです.ただし機能やデバイスドライバはハードウェアの構成や用途に応じて変更されています.

ユーザランドとはアプリケーションや設定ファイル,ディレクトリなどシステムとして動作するためのカーネル以外の部分と言って良いでしょう.Armadillo-500の場合,オンボードフラッシュメモリに全データを格納しなければいけないため,デスクトップやサーバ用のディストリビューションでは大きすぎます.Atmark Distでは全体のサイズを小さくするために,BusyboxやLighttpdのような軽量アプリケーションを採用しています.もちろん,ハードドライブやコンパクトフラッシュを使用しDebianをArmadillo-500で動かすことも可能です.

●プログラムが制御するもの

組み込み機器のソフトウェアに対しては,画像を表示したり,モータを制御したり,デバイスによる入力に反応したりと,機械を制御するイメージが大きいのではないでしょうか.そのため,デスクトップやサーバのソフトウェアとはまったく違うと考えている読者がいるかもしれません.

しかし,もっとミクロな視点で見てみると,PCやサーバのプログラムも組み込み機器と同じく機械を制御しているのです.この原稿を書いているPCは,筆者が使うキーボードを監視し,どのキーが押されたか判断しています.さらに押されたキーによって,エディタのカーソルがある部分に文字を入力し,入力された文字を画面に描画します.サーバソフトウェアも,データを送り出すためにネットワークコントローラを制御しています.

こう書いてしまうと,「アプリケーションプログラマはデバイスドライバを書かないし,そもそもデバイスドライバを書くのは難しそう」と反論が聞こえてきそうです.しかし,先ほども書きましたが,肥大化した組み込み機器のソフトウェアの中では,デバイスドライバやカーネルの部分はほんの一部にすぎません.ソフトウェア全体で見るとほんの少ししか違わないのです.

おおいに役立つ,Linux の知識

PCと組み込み機器の差が,実はほとんどないことはわかってもらえたでしょうか? ほとんど差がないということは,PCやサーバで培われたLinuxの知識が,組み込み機器のソフトウェア開発を行うときにおおいに役に立ちます.

順調(?)に大規模化が進めば,現在エンタープライズ開発で使用している開発手法も組み込み機器の開発に必須になる日がくるかもしれません.

COLUMN

ブートの仕組みを理解しよう

組み込み機器を開発しているときに役に立つことの1 つが,システム起動の仕組みに関する理解です.

ブートローダからLinux に制御が渡ってしまえば,PC でも組み込み機器でも同じソフトウェアが動いているわけですから,同じ挙動をします.カーネルは自分自身の初期化とハードウェアの初期化が終われば,ユーザランドを実行します.この一番最初に起動されるアプリケーションが/sbin/init です.

システムとして動作するために必要な初期化を/sbin/init が一手に引き受けています.最終的にはユーザのログインを待ったり,自動ログインをしてパソコンやシステムとして使用できる状態まで進みます.

Linux が出始めのころはSLS やSlackware のようにパッケージシステムが発達しておらず,自分でアプリケーションをコンパイルするなどして,OS としてのLinux を自分の手で育てている人も多くいました.筆者もインストールするソフトウェアはすべて自分でコンパイルしていました.

アプリケーションの数が爆発的に増えた今では,自分の手で1 つずつ構築するのはとても大変です.しかし組み込み機器に限定すれば,上記の能力は必須だと筆者は考えます.システムがどのように初期化され,どのように起動し,どのようにイベントが処理されているのか知ることは,機器の製造を行う側として知っておかなければなりません.

最近であれば,Linux From Scratch プロジェクトが良い勉強教材になりそうです.自分でLinux ベースのシステムを一度ゼロから構築し,基本的な概念やシステムの起動を理解することは,機器の全体像の理解でもあり,デバッグ時に的確な判断を下す重要な情報にもなるのです.

ビルドという名の世界構築

読者の中には,X Window SystemやFreeBSDのビルドをするときに「make world」と入力していた人もいるでしょう.組み込み機器のビルドも,make world,つまり世界を構築する感じがします.

以降では,ビルドの準備とビルド,そして完成した世界をちょっとだけ覗いてみたいと思います.

ATDEとAtmark Dist

最初に,Linuxシステムという組み込み機器の世界を構築する準備を行いましょう.今回例として使用するのは,Armadillo-500 の開発環境である,ATDEとAtmark Distです.

ATDE はAtmark Techno Development Environmentの頭文字を取ったもので,㈱アットマークテクノが作成販売している製品(ArmadilloシリーズとSUZAKUシリーズ)を開発するための開発環境です.とは言っても,中身はDebianの安定板をベースに必要なライブラリやコンパイラをインストールしたVMware Player用のデータです.

先にも紹介したように,あえて開発環境を仮想化することで,どこで誰が作業しても同じ状況になるようにしています.

Atmark Distは,組み込み機器用に必要なソフトウェアを集め,1つのアーカイブにまとめたLinuxディストリビューションです.Busybox やライブラリなど組み込み機器でLinuxシステムを使用するときに便利なアプリケーションやライブラリ,ツールを集めてあります.

一般のデスクトップやサーバでは使用しないフラッシュメモリの書き換えを行うツールや,設定ファイルなどロム化した場合でも保存したい情報をフラッシュメモリに記憶するためのツールも含まれています.

本格的な開発は3章以降に譲りますが,ここでは仮想環境の準備と,Armadillo-500 の出荷に使われているシステムを構築してみたいと思います.

VMwareの仮想環境を用意する

VMware Playerを使って仮想開発環境を構築してみます.まずは今使用しているPC にVMware Player をインストールしてください.http://www.vmware.com/ja/products/player/からダウンロードできますので,もし作業がわからなくなったら参照してください.

次に,ATDE をダウンロードし,インストールしてください.ATDE のデータとインストールガイドがhttp://armadillo.atmark-techno.com/atdeからダウンロードできます.

ATDE の起動が終わったら,ここからの作業は仮想環境の中で行います.

ATDEの中でAtmark Distをビルドする

ATDE の中でAtmark Dist をビルドしてみます.実際の手順がFlash動画になっています
http://armadillo.atmark-techno.com/articles/video-intro-to-atde).もし作業がわからなくなった場合は参照してください.

Atmark Distと最新版のカーネルアーカイブをダウンロードします.図8のようにATDE内のターミナルで入力してください.なお,使用しているファイルは本稿執筆時点の最新ファイルです.

●図8 Atmark Dist とカーネルのダウンロード


$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-500/source/dist/atmark-dist-20070727.tar.gz
$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-500/source/kernel/linux-2.6.18-12-at0.tar.gz

ダウンロード後,両方とも展開してください(図9).カーネルのディレクトリは,Atmark Distの中に名前を変更して移動します(図10).

●図9 ファイルの展開


$ tar xvzf atmark-dist-20070727.tar.gz
$ tar xvzf linux-2.6.18-12-at0.tar.gz

●図10 カーネルの移動

$ mv linux-2.6.18-12-at0 atmarkk-dist-20070727/

展開したAtmark Dist のディレクトリの中で「make config」と入力し,メニューに沿っていくつか入力していきます(図11).

●図11 デフォルトの設定


$ cd atmarkk-dist-20070727/
$ make config

終了したら「make」と入力します(図12).これで,Armadillo-500 が出荷されたときにオンボードフラッシュメモリに書き込まれるデータと同じものが作成されます.

●図12 ビルド

$ make

ビルドが終わると,「images」ディレクトリにカーネルとユーザランドのファイルが生成されます.

フラッシュメモリの中を覗いてみよう

開発を続けていくと,書き込む前に生成したユーザランドが思ったとおりできているか確認したいことがあります.そんな時はLinuxのループデバイスを使って,ユーザランドのデータファイルをマウントして確認します(図13).

●図13 romfs.img の確認

$ sudo mount -o loop images/romfs.img /mnt

これで,images/romfs.imgが/mntにマウントされました./mntの中を覗いてみてください.

最後に

3 章から,実際の開発がスタートします.たった今自分の手で構築し,ちょっとだけ覗き見た世界を動かす楽しみを堪能してください.

注1) http://www.celinuxforum.org/
注2) “The Next Fifty Years of Software”(http://research.microsoft.com/CONFERENCES/ACM97/)
注3) Intel 486 プロセッサの1 つで,内部クロックを2 倍にしたものです.
注4) http://en.wikipedia.org/wiki/Embedded_system
注5) http://www.nokia.com/A4136001?newsid=1117176
注6) この起動時間の問題は組み込み機器だけの問題ではなく,デスクトップLinux でも問題にのぼりいろいろな対策が講じられました.PC Linux やサーバ用途のディストリビューションであるUbuntu では,init の置き換えとしてupstart というイベントによるシステムの初期化方法に変更しています.
注7) Debian GNU/Linux sid に含まれる「evolution 2.10.3-1」では,101 のライブラリとリンクされています.
注8) この問題も実は組み込み機器だけの問題ではありませんでした.デスクトップLinux の場合でもOpenOffice.org スィートのアプリケーションやGnome,KDE のような多機能デスクトップ環境に対応したアプリケーションの場合も同じく多くのライブラリがアプリケーションにリンクされているために,実行時のリンク処理に時間が取られ快適な動作の妨げになっていました.
注9) http://people.redhat.com/jakub/prelink.pdf
注10) http://www.eclipse.org/dsdp/
注11) https://sec.ipa.go.jp/download/200706es.php
Part 1 Part 3