(57)【要約】【課題】冗長構成の組み込み機器において、起動カーネルが対応するユーザランドを確実に判別できるようにする。【解決手段】バンクＡおよびバンクＢに格納されたカーネルＡおよびＢの内の一方のカーネルを起動カーネルとして選択した際に、その選択した起動カーネルに対応するバンクを識別する識別情報をメインメモリ２５における未使用領域に書き込む処理（ステップＳ３０２）、およびメインメモリ２５の未使用領域に書き込まれた識別情報を読み出すことにより、ファイルシステムＡおよびＢの中から、起動カーネルにリンクするファイルシステムを判別する処理（ステップＳ３０５、Ｓ３０６、Ｓ３０８）をそれぞれ実行するＬｉｎｕｘプログラム起動システムである。【選択図】図４
2010282645.tif 000002
【特許請求の範囲】
【請求項１】
カーネルとそのカーネルと対で動作するユーザランドとを備えたＬｉｎｕｘプログラムにおいて、カーネルを起動させてユーザランドをマウントさせるＬｉｎｕｘプログラム起動システムであって、
第１のＬｉｎｕｘプログラムのカーネルを記憶する第１の領域と、そのカーネルにリンクする前記第１のＬｉｎｕｘプログラムのユーザランドを記憶する第２の領域と、前記第１のＬｉｎｕｘプログラムの新旧を識別するための第１の識別情報を記憶する第３の領域との前記第１から第３の領域を有する第１のバンクと、第２のＬｉｎｕｘプログラムのカーネルを記憶する第４の領域と、そのカーネルにリンクする前記第２のＬｉｎｕｘプログラムのユーザランドを記憶する第５の領域と、前記第２のＬｉｎｕｘプログラムの新旧を識別するための第２の識別情報を記憶する第６の領域との前記第４から第６の領域を有する第２のバンクと、ブートローダを記憶する第７の領域とを備えた第１のメモリと、
起動された前記ブートローダにより、前記第１及び第２の識別情報に応じて前記第１のバンクと前記第２のバンクとから一つ選択されたバンクを示すバンク識別情報を記憶する所定領域を備えた第２のメモリと、
前記第７の領域からブートローダを読み出して起動させ、その起動させたブートローダにより、読み出した前記第１及び第２の識別情報の比較結果に応じて前記第１及び第２のバンクから有効なバンクを一つ選択させ、その選択されたバンクを示す前記バンク識別情報を前記第２のメモリの前記所定領域に書き込ませ、前記選択されたバンクからカーネルを読み出して起動させ、その起動させたカーネルにより、前記第２のメモリから読み出した前記バンク識別情報によって自カーネルが起動された前記第１のメモリ内のバンクを特定させ、その特定されたバンクに記憶されているユーザランドをマウントさせる制御部と、
を有することを特徴とするＬｉｎｕｘプログラム起動システム。
【請求項２】
カーネルとそのカーネルと対で動作するユーザランドとを備えたＬｉｎｕｘプログラムにおいて、カーネルを起動させてユーザランドをマウントさせるＬｉｎｕｘプログラム起動システムであって、
一つのＬｉｎｕｘプログラムのカーネルを記憶する領域と、そのカーネルにリンクする前記一つのＬｉｎｕｘプログラムのユーザランドを記憶する領域と、前記一つのＬｉｎｕｘプログラムの新旧を識別するための識別情報を記憶する領域との３つの領域をそれぞれ有する複数のバンクと、ブートローダを記憶する領域とを備えた第１のメモリと、
起動された前記ブートローダにより、各前記識別情報に応じて前記複数のバンクから一つ選択されたバンクを示すバンク識別情報を記憶する所定領域を備えた第２のメモリと、
前記第１のメモリからブートローダを読み出して起動させ、その起動させたブートローダにより、読み出した前記各識別情報の比較結果に応じて前記複数のバンクから有効な一つのバンクを選択させ、その選択されたバンクを示す前記バンク識別情報を前記第２のメモリの前記所定領域に書き込ませ、前記選択されたバンクからカーネルを読み出して起動させ、その起動させたカーネルにより、前記第２のメモリから読み出した前記バンク識別情報によって自カーネルが起動された前記第１のメモリ内のバンクを特定させ、その特定されたバンクに記憶されているユーザランドをマウントさせる制御部と、
を有することを特徴とするＬｉｎｕｘプログラム起動システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｌｉｎｕｘプログラム（以下、単にＬｉｎｕｘとも記載する）をオペレーテ
ィングシステムとして搭載した（組み込んだ）組み込み機器において好適に利用されるＬ
ｉｎｕｘプログラム起動システムに関する。
【背景技術】
【０００２】
各種家電機器、腕時計、携帯電話やＰＤＳ等の小型端末、インターネット関連機器等の
様々なコンピュータアプリケーションプログラム（以下、単にアプリケーションとも記載
する）により動作する機器には、オペレーティングシステム（以下、ＯＳとも記載する）
と呼ばれる基本ソフトが実装されているものが多い。そしてこの機器実装用（組み込み用
）ＯＳとして、近年では、オープンソースであるＬｉｎｕｘが注目を集めている。
【０００３】
このＬｉｎｕｘの特徴として、カーネル（Ｌｉｎｕｘカーネル）と呼ばれるＯＳのコア
となる部分のみ開発を専念し、それ以外の部分については、ロイヤリティフリーで公開さ
れているフリーソフトウェアから容易に入手することができるという点が挙げられる。
【０００４】
このＬｉｎｕｘは、ファイルシステムを利用したブロックデバイスへの論理的なアクセ
スを前提として構築されている。すなわち、Ｌｉｎｕｘでは、カーネルの起動時において
、ルートファイルシステムと呼ばれる基本部分をデバイスからマウント｛ファイルシステ
ムが格納されたデバイス（格納領域）を起動カーネルから認識（アクセス）できるデバイ
スにして、そのデバイスに格納されたファイルシステム内のアプリケーションを含む各種
ファイルに対して起動カーネルがアクセス可能にすることを意味する｝することにより、
様々なアプリケーションを利用してブロックデバイスに格納されたデータにアクセスする
ことが可能である。
【０００５】
通常、Ｌｉｎｕｘが動作する標準的なシステムであるパーソナルコンピュータ（以下、
パソコンという）である例えばＩＢＭ・ＡＴ互換機においては、起動時（ブート時）にマ
ウントされるデバイスを表す情報は、ＭＢＲ（Master Boot Record）と呼ばれるハードデ
ィスク（ＨＤＤ）の起動用領域に予めデフォルトとして書き込まれている。なお、デフォ
ルトとは異なるデバイスを利用してファイルシステムをブートしたい場合には、コマンド
ラインやメニュー形式を用いて、ブートしたいファイルシステムが搭載されたデバイスを
選択することも一般的に行われている。
【０００６】
また、Ｌｉｎｕｘにおいては、カーネルに渡す引数によりルートファイルシステムをマ
ウントする。しかしながら、組み込み機器においては、デバイスドライバの都合上、ｉｎ
ｉｔｒｄと呼ばれるＲＡＭディスクに搭載されたファイルシステムを初期ルートファイル
システムとして利用し、そのｉｎｉｔｒｄから本来マウントしたいルートファイルシステ
ムを搭載デバイスからマウントする場合がある。
【０００７】
ところで、例えばパソコンでは、そのパソコンに組み込まれた（搭載された）プログラ
ム、例えばＬｉｎｕｘプログラムを更新する場合、その実行ファイルのみを交換したり、
またＬｉｎｕｘの知識のあるユーザの場合には、カーネルを再構築した上で新しい機能プ
ログラムを追加すること等により、新しいＬｉｎｕｘプログラムを実行する環境をパソコ
ン内に構築することができる。
【０００８】
この点、Ｌｉｎｕｘ組み込み機器においては、メンテナンス性の観点からもカーネルお
よびこのカーネルにリンクするファイルシステム（以下、ユーザランドとも記載する）を
書き換えて、Ｌｉｎｕｘプログラムの実行環境を一新する方法が効率的であると考えられ
ている。
【０００９】
また、例えばパソコンにおいては、そのブート用のプログラムを記憶しておくことがで
きるデバイスが例えばＨＤＤ、ＣＤ−ＲＯＭ等複数あり、あるデバイスからブートローダ
を含むプログラムの更新を行って仮に失敗した場合であっても、他のデバイスに搭載され
たブートローダを含むプログラムを起動して比較的容易にパソコンを復帰させることがで
きる。
【００１０】
しかしながら、組み込み機器では、ユーザにブートするファイルシステムが搭載された
デバイスを選択させることは、ユーザを混乱させる原因ともなるため、自動的にファイル
システムをブートさせる仕組みが必要である。また、組み込み機器は、外部からユーザに
より頻繁にオン／オフされることが多いことから、ブートローダ自体の書き換えはブート
不能に陥るリスクが大きくなるため、他のデバイス特定方法を用いたいという技術的背景
もある。
【００１１】
この点、同一又は異なるバージョンのプログラム｛カーネルおよびリンクするファイル
システム（ユーザランド）｝を２つのメモリ領域（メモリバンク）に冗長的に記録する２
バンク方式も知られており、そのプログラムが正常に作動したかどうかによって有効パン
クを切り換えることが可能になっており、上述したブート不能リスクを低減することがで
きる。
【００１２】
この２バンク方式では、組み込み機器でプログラムの更新により不具合の修正や機能追
加を行う場合、その更新操作は、必ず一方のプログラムの更新が完了し、更新したプログ
ラムが正常に動作した場合に初めて他方のプログラムを無効にするようになっている。
【００１３】
したがって、一方のバンクに記録されたプログラムの更新に失敗した場合でも、他方の
バンクに記録された現在動作しているプログラムを保持し続けることが可能になる。
【００１４】
上述した２バンク方式のシステムとしては、特許文献１に開示されたものがある。この
特許文献１に開示されたコンピュータシステムのファームウェア記憶装置は、同一又は異
なるバージョンのファームウェアを２つのメモリバンクに冗長的に記憶するファームウェ
ア記憶装置である。
【００１５】
このファームウェア記憶装置によれば、２つのメモリバンクの一方のメモリバンクが選
択されている間は、他方のメモリバンクを書込み禁止にする。そして、２つのメモリバン
クの一方を選択し、選択されなかったメモリバンクに記憶されたファームウェアの有効性
をチェックし、選択されたメモリバンクに記憶されたファームウェアのバージョンを、選
択されなかったメモリバンクに記憶されたファームウェアのバージョンと比較し、その比
較結果を生成する。この比較結果に従って、２つのメモリバンクに記憶されているファー
ムウェアのどちらか一方を選択し、この選択されたメモリバンクに記憶されたファームウ
ェアを使用してコンピュータシステムを起動し、所定の時間内に該コンピュータシステム
が正常に動作可能状態にならない場合に、この選択されなかったメモリバンクを選択し、
その後プロセッサをリセットするといものである。
【００１６】
このような構成により、システム・ファームウェアの保全性を効率的に確保すると共に
、ファームウェアを簡単に変更することが可能になる。また、コンピュータシステムが動
作可能な状態に留まるのに十分なファームウェアを確実に保持しながら、そのようなシス
テムのファームウェアを変更することができる。さらに、コンピュータシステム内の複数
のファームウェアバンクからの自動選択を行うことが可能になる。
【００１７】
詳しくは、特許文献１の段落番号に開示されているように、２つのメモリバンク５０２
および５０４が制御装置５０５によって管理されており、制御装置５０５は、メモリバン
ク５０２および５０４からのファームウェアの読み取り、およびそのメモリバンク５０２
および５０４からのファームウェアの書込みをそれぞれ制御している。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特許第３０３３６４２号
【発明の概要】
【発明が解決しようとする課題】
【００１９】
しなしながら、ＬｉｎｕｘをＯＳとして用いるＬｉｎｕｘプログラム組み込み機器にお
いて、Ｌｉｎｕｘプログラムを格納する領域（バンク）が複数（２バンク以上）存在して
いる場合、起動されたカーネルは、複数のバンクそれぞれに格納された複数のユーザラン
ドの内の何れのユーザランドを、その起動カーネルにリンクするユーザランドとしてマウ
ントすればよいのか判断することが困難であった。
【００２０】
本発明は上述した事情に鑑みてなされたものであり、Ｌｉｎｕｘプログラム起動におい
て、複数のバンクに記録された複数のファイルシステムから、起動カーネルにリンクする
有効なファイルシステムを識別することを可能にするＬｉｎｕｘプログラム起動システム
を提供することをその目的とする。
【課題を解決するための手段】
【００２１】
請求項１記載の発明は、上記課題を解決するため、
カーネルとそのカーネルと対で動作するユーザランドとを備えたＬｉｎｕｘプログラムにおいて、カーネルを起動させてユーザランドをマウントさせるＬｉｎｕｘプログラム起動システムであって、
第１のＬｉｎｕｘプログラムのカーネルを記憶する第１の領域と、そのカーネルにリンクする前記第１のＬｉｎｕｘプログラムのユーザランドを記憶する第２の領域と、前記第１のＬｉｎｕｘプログラムの新旧を識別するための第１の識別情報を記憶する第３の領域との前記第１から第３の領域を有する第１のバンクと、第２のＬｉｎｕｘプログラムのカーネルを記憶する第４の領域と、そのカーネルにリンクする前記第２のＬｉｎｕｘプログラムのユーザランドを記憶する第５の領域と、前記第２のＬｉｎｕｘプログラムの新旧を識別するための第２の識別情報を記憶する第６の領域との前記第４から第６の領域を有する第２のバンクと、ブートローダを記憶する第７の領域とを備えた第１のメモリと、
起動された前記ブートローダにより、前記第１及び第２の識別情報に応じて前記第１のバンクと前記第２のバンクとから一つ選択されたバンクを示すバンク識別情報を記憶する所定領域を備えた第２のメモリと、
前記第７の領域からブートローダを読み出して起動させ、その起動させたブートローダにより、読み出した前記第１及び第２の識別情報の比較結果に応じて前記第１及び第２のバンクから有効なバンクを一つ選択させ、その選択されたバンクを示す前記バンク識別情報を前記第２のメモリの前記所定領域に書き込ませ、前記選択されたバンクからカーネルを読み出して起動させ、その起動させたカーネルにより、前記第２のメモリから読み出した前記バンク識別情報によって自カーネルが起動された前記第１のメモリ内のバンクを特定させ、その特定されたバンクに記憶されているユーザランドをマウントさせる制御部と、
を有することを特徴とするＬｉｎｕｘプログラム起動システム、
を提供する。
請求項２記載の発明は、上記課題を解決するため、
カーネルとそのカーネルと対で動作するユーザランドとを備えたＬｉｎｕｘプログラムにおいて、カーネルを起動させてユーザランドをマウントさせるＬｉｎｕｘプログラム起動システムであって、
一つのＬｉｎｕｘプログラムのカーネルを記憶する領域と、そのカーネルにリンクする前記一つのＬｉｎｕｘプログラムのユーザランドを記憶する領域と、前記一つのＬｉｎｕｘプログラムの新旧を識別するための識別情報を記憶する領域との３つの領域をそれぞれ有する複数のバンクと、ブートローダを記憶する領域とを備えた第１のメモリと、
起動された前記ブートローダにより、各前記識別情報に応じて前記複数のバンクから一つ選択されたバンクを示すバンク識別情報を記憶する所定領域を備えた第２のメモリと、
前記第１のメモリからブートローダを読み出して起動させ、その起動させたブートローダにより、読み出した前記各識別情報の比較結果に応じて前記複数のバンクから有効な一つのバンクを選択させ、その選択されたバンクを示す前記バンク識別情報を前記第２のメモリの前記所定領域に書き込ませ、前記選択されたバンクからカーネルを読み出して起動させ、その起動させたカーネルにより、前記第２のメモリから読み出した前記バンク識別情報によって自カーネルが起動された前記第１のメモリ内のバンクを特定させ、その特定されたバンクに記憶されているユーザランドをマウントさせる制御部と、
を有することを特徴とするＬｉｎｕｘプログラム起動システム、
を提供する。
【発明の効果】
【００２２】
本発明によれば、有効なバンクとして一つ選択したバンクを示すバンク識別情報を起動させたブートローダにより第２のメモリに書き込んでおくことにより、有効と選択したバンクから読み出した起動カーネルによるファイルシステム判別時において、第２のメモリに書き込まれたバンク識別情報に基づいて起動カーネルに対応するファイルシステムを容易に識別することができる。
【図面の簡単な説明】
【００２３】
【図１】本発明の実施の形態に係わる組み込み機器に搭載されたＬｉｎｕｘプログラム起動システムを含むマザーボードの概略構成を示す概略ブロック図。
【図２】本発明の実施の形態に係るＬｉｎｕｘプログラム起動システムにおけるＬｉｎｕｘプログラムを格納するフラッシュメモリのメモリマップを概略的に示す図である。
【図３】（ａ）は、本発明の実施の形態に係わるメインメモリのメモリマップを概略的に示す図であり、（ｂ）は、図３（ａ）におけるカーネル非認識メモリ領域の一部を拡大して示す図である。
【図４】本発明の実施の形態に係るＬｉｎｕｘプログラム起動システムの起動処理の一例を示す概略フローチャートである。
【発明を実施するための形態】
【００２４】
以下、本発明を実施するための最良の形態を、図面を参照して説明する。
【００２５】
図１を参照して、本発明を実施するための最良の形態（以下、実施形態と記載する）に
係るＬｉｎｕｘプログラム起動システム１を含むマザーボード１１の概略構成を説明する
。このマザーボート１１は、家電機器、腕時計、携帯電話やＰＤＳ等の小型端末、インタ
ーネット関連機器等のアプリケーション動作機器に予め搭載されている。
【００２６】
図１に示すように、マザーボード１１には、ＣＰＵ／ＰＣＩブリッジ３１を介して接続
されているアドレスバスやデータバス等からなるホストバス１３と、３２ビット幅の標準
化されたＰＣＩバス１５が設けられている。
【００２７】
このホストバス１３には、内部キャッシュメモリＣｍおよび所定ビットのデータバスを
有するＣＰＵ１７、ＳＲＡＭからなる外部キャッシュメモリ２１、およびこの外部キャッ
シュメモリ２１へのデータの読み書きを制御するキャッシュコントローラ１９がそれぞれ
接続されている。また、ホストバス１３には、ＤＲＡＭからなるメインメモリ２５、およ
びこのメインメモリ２５へのデータの読み書きとリフレッシュを制御するＤＲＡＭコント
ローラ２３がそれぞれ接続されている。
【００２８】
さらに、ホストバス１３には、例えばＮＡＮＤメモリからなる書き換え可能な記録媒体
の一例としてのフラッシュメモリ２９、このフラッシュメモリ２９へのデータの読み書き
を制御するフラッシュメモリコントローラ２７、およびＣＰＵが接続されているホストバ
ス１３とＰＣＩバス１５とを接続するためのＣＰＵ／ＰＣＩブリッジ３１等がそれぞれ接
続されている。
【００２９】
一方、ＰＣＩバス１５には、ＰＣＩ拡張スロット３３を介して例えばＬＡＮのプロトコ
ルを制御するＬＡＮカードが接続されている。
【００３０】
フラッシュメモリコントローラ２７は、ＣＰＵ１７から与えられるデータの読み書きに
関するブロック転送コマンドに応じてフラッシュメモリ２９との間のデータの読み書きを
制御する。
【００３１】
フラッシュメモリ２９は、いわゆるＮＡＮＤメモリからなり例えば２ｋバイトのブロッ
ク毎に記憶されているデータを１まとまりにして読み書きするように構成されており、そ
の異なる複数の領域（バンク）には、複数（本実施形態では２つ）のＬｉｎｕｘプログラ
ムＬ１およびＬ２がそれぞれ格納されている。
【００３２】
そして、本実施形態においては、複数のＬｉｎｕｘプログラムＬ１およびＬ２における
一方のＬｉｎｕｘプログラムが新しいプログラムに更新（バージョンアップ）されている
。
【００３３】
次に、図２を参照して、フラッシュメモリ２９に記憶されているＬｉｎｕｘプログラム
Ｌ１およびＬ２の具体的な内容をそれぞれの格納領域毎に説明する。
【００３４】
図２に示すように、フラッシュメモリ２９のブートローダ領域１０１（アドレス＃１〜
＃２までの領域）には、Ｌｉｎｕｘプログラムブート用のブートローダが記憶されている
。このブートローダ領域１０１は、システム１全体がリセットされたときに例えばＭＩＰ
Ｓアーキテクチャのプログラムカウンタにより指示されている領域であり、システム１（
ＣＰＵ１７）起動時にブートローダが最初にメインメモリ２５に転送されるようになって
いる。
【００３５】
ＬｉｎｕｘプログラムＬ１のカーネルＡのバージョン情報（その新旧を識別するための
情報）を含むヘッダ情報は、フラッシュメモリ２９のアドレス＃２〜＃３までの領域（第
１のヘッダバンク領域）に記憶されている。
【００３６】
フラッシュメモリ２９のカーネルＡ領域１０２（アドレス＃３〜＃４までの領域：第１
のカーネルバンク領域）には、ＬｉｎｕｘプログラムＬ１のカーネルＡが記憶されており
、このカーネルＡは、メインメモリ２５に転送されたブートローダに従ったＣＰＵ１７の
処理により、メインメモリ２５に転送される。このカーネルＡには、そのカーネル作成時
にｉｎｉｔｒｄと呼ばれるファイルシステム認識用（マウント用）プログラムが内蔵され
ている。なお、ＣＰＵ１７の処理は、必要に応じてキャッシュコントローラ１９、ＤＲＡ
Ｍコントローラ２３の処理も含むが、単にＣＰＵの処理として説明する。
【００３７】
ＬｉｎｕｘプログラムＬ２のカーネルＢのヘッダ情報は、フラッシュメモリ２９のアド
レス＃４〜＃５までの領域（第２のヘッダバンク領域）に記憶されている。
【００３８】
フラッシュメモリ２９のカーネルＢ領域１０３（アドレス＃５〜＃６までの領域：第２
のカーネルバンク領域）には、ＬｉｎｕｘプログラムＬ２のカーネルＢが記憶されており
、このカーネルＢは、メインメモリ２５に転送されたブートローダに従ったＣＰＵ１７の
処理により、メインメモリ２５に転送される。このカーネルＢにも、そのカーネル作成時
にｉｎｉｔｒｄと呼ばれるファイルシステム認識用（マウント用）プログラムが内蔵され
ている。
【００３９】
フラッシュメモリ２９のユーザランドＡ領域１０４（アドレス＃６〜＃７までの領域：
第１のユーザバンク領域）には、ＬｉｎｕｘプログラムＬ１のカーネルＡにリンクされた
ファイルシステムであるユーザランドＡが記憶されている。このユーザランドＡは、カー
ネルの処理（カーネルに従ったＣＰＵ１７の処理）によりメインメモリ２５に転送される
ものではなく、カーネルの処理によりマウントまたはアンマウントされる。
【００４０】
フラッシュメモリ２９のユーザランドＢ領域１０５（アドレス＃７〜＃８までの領域：
第２のユーザバンク領域）には、ＬｉｎｕｘプログラムＬ２のカーネルＢにリンクされた
ファイルシステムであるユーザランドＢが記憶されている。このユーザランドＢは、カー
ネルの処理（カーネルに従ったＣＰＵ１７の処理）によりメインメモリ２５に転送される
ものではなく、カーネルの処理によりマウントまたはアンマウントされる。
【００４１】
本実施形態において、第１のＬｉｎｕｘプログラムＬ１（カーネルＡ、ユーザランドＡ
）が格納される領域（第１のヘッダバンク領域、第１のカーネルバンク領域、第１のユー
ザバンク領域）を総称してバンクＡと記載し、第２のＬｉｎｕｘプログラムＬ２（カーネ
ルＢ、ユーザランドＢ）が格納される領域（第２のヘッダバンク領域、第２のカーネルバ
ンク領域、第２のユーザバンク領域）を総称してバンクＢと記載する。
【００４２】
フラッシュメモリ２９のデータ領域（アドレス＃８〜＃９）には、起動したＬｉｎｕｘ
プログラムＬ１あるいはＬ２により利用可能な各種データが格納されている。
【００４３】
一方、図３は、本実施形態に係わるメインメモリ２５の記録領域（メモリ領域）を示す
図である。
【００４４】
図３に示すように、メインメモリ２５の一定領域２５ａ１は、起動カーネルが認識する
メモリ領域としてカーネルを作成した段階で決定されている。一方、起動カーネルが認識
していない非認識領域２５ａ２は、起動カーネルの支配下ではないため、特殊な用途で使
われることが想定される。
【００４５】
本実施形態では、このカーネル非認識メモリ領域２５ａ２を空けておき、ブートローダ
によるメインメモリ２９上でのカーネル展開時における有効バンク識別情報を含むブート
情報を書き込み可能に構成している。また、Ｌｉｎｕｘ起動後、アプリケーションが動作
するまでは使用されないメモリ領域等もブート情報を書き込むために使用可能である。
【００４６】
次に、本実施形態に係るＬｉｎｕｘプログラム起動システム１におけるＣＰＵ１７のＬ
ｉｎｕｘプログラム起動処理について、図４を参照して説明する。
【００４７】
Ｌｉｎｕｘプログラム起動時において、フラッシュメモリ２９のデータ領域（アドレス
♯１〜アドレス♯２）に記憶されたブートローダがメインメモリ２５にロードされ起動さ
れる。起動されたブートローダ（つまり、ブートローダに従ったＣＰＵ１７）は、フラッ
シュメモリ２９のデータ領域（アドレス♯２〜アドレス♯３）に記憶されたカーネルＡの
バージョン情報を含むヘッダ情報およびフラッシュメモリ２９のデータ領域（アドレス♯
４〜アドレス♯５）に記憶されたカーネルＢのバージョン情報を含むヘッダ情報をそれぞ
れ読み出す。
【００４８】
続いて、ブートローダは、図４に示すように、ステップＳ３０１として、読み出したカ
ーネルＡおよびカーネルＢそれぞれのヘッダ情報を比較して、例えば新しいバージョンの
カーネルが格納されたバンクを有効なバンクとして判断する（ステップＳ３０１）。すな
わち、ＬｉｎｕｘプログラムＬ１が新しく更新されている場合には、カーネルＡのバージ
ョン情報がカーネルＢのバージョン情報よりも新しいことを表す情報となっているため、
バンクＡが有効なバンクとして判断され、ＬｉｎｕｘプログラムＬ２が新しく更新されて
いる場合には、カーネルＢのバージョン情報がカーネルＡのバージョン情報よりも新しい
ことを表す情報となっているため、バンクＢが有効なバンクとして判断される。
【００４９】
次いで、ステップＳ３０２において、ブートローダは、有効と判断したバンクを識別す
るための識別情報（バンクＡが有効ならバンクＡを表す識別情報、バンクＢが有効ならバ
ンクＢを表す識別情報）をメインメモリ２５における未使用領域である例えばカーネル非
認識メモリ領域２５ａ２に書き込む（記述する）。
【００５０】
次いで、ステップＳ３０３において、ブートローダは、有効なカーネル（カーネルＡお
よびカーネルＢのうちの何れか一方のカーネル）をメインメモリ２５内にロードかつ展開
し、このカーネルを起動して、この起動カーネル（カーネルコード）に制御をシフトする
。
【００５１】
続いて、ステップＳ３０４において、起動カーネル（つまり、起動カーネルに従ったＣ
ＰＵ１７）は、起動カーネル内における初期ルートファイルシステム（ｉｎｉｔｒｄ）に
おける各種ドライバのロードを行うスクリプトを起動する。
【００５２】
次いで、ステップＳ３０５において、起動カーネルは、ｉｎｉｔｒｄの起動スクリプト
内において、メインメモリ２５のカーネル非認識メモリ領域２５ａ２を、例えばカーネル
認識領域２５ａ１からのポインタ等を用いて起動カーネルが認識できるメモリ領域である
起動カーネル空間の仮想メモリ空間にマッピング（ｍｍａｐ）し、マッピングされた領域
に書き込まれたバンク情報を読み出し、自カーネルがどちらのバンクから起動されたのか
を判断する。
【００５３】
この判断において、読み出したバンク情報がバンクＡの場合には、自カーネルがバンク
Ａから起動されたものと判断し（ステップＳ３０６の判断→ＹＥＳ）、起動カーネルは、
ステップＳ３０７に進む。
【００５４】
このステップＳ３０７において、起動カーネルは、バンクＡに格納されたユーザランド
Ａをルートファイルシステムとしてマウント、すなわち、起動カーネル（カーネルＡ）の
ルートディレクトリ（/）に対してユーザランドＡを接続して階層化することにより、起
動カーネルから認識（アクセス）できるファイルシステムに設定する。
【００５５】
一方、読み出したバンク情報がバンクＢの場合には、自カーネルがバンクＢから起動さ
れたものと判断し（ステップＳ３０６の判断→ＮＯ、ステップＳ３０８の判断→ＹＥＳ）
、起動カーネルは、ステップＳ３０９に進む。
【００５６】
このステップＳ３０９において、起動カーネルは、バンクＢに格納されたユーザランド
Ｂをルートファイルシステムとしてマウントする。
【００５７】
なお、ステップＳ３０８において、万が一何れのバンクＡおよびＢも有効として判断で
きない場合には、エラーが発生したものとしてＬｉｎｕｘプログラム起動処理を終了する
。
【００５８】
このようにして、起動カーネルにリンクされたユーザランドのマウントが完了されると
、起動カーネルは、設定に従い通常の起動処理を続ける。
【００５９】
以上述べたように、本実施形態によれば、複数のＬｉｎｕｘプログラムＬ１およびＬ２
がフラッシュメモリ２９の複数のバンクにそれぞれ格納されている場合でも、起動カーネ
ルにリンクされたユーザランドを自動的に判別してルートファイルシステムとしてマウン
トすることができる。
【００６０】
この結果、Ｌｉｎｕｘプログラム組み込み機器において２バンク方式を用いて一方のバ
ンクに記録されたＬｉｎｕｘプログラムを更新した場合においても、更新後の起動カーネ
ルがリンクされたルートファイルシステム（ユーザランド）を認識できない状態に陥るこ
とを確実に防止することができ、Ｌｉｎｕｘプログラムの起動処理の信頼性を向上させる
ことができる。
【００６１】
なお、本実施形態においては、Ｌｉｎｕｘプログラムを格納する記録媒体としてフラッ
シュメモリとしたが、書き換え可能な他の記録媒体であってもよい。
【００６２】
また、組み込み機器に搭載されるマザーボードとして、図１に示す構成を示したが、本
発明はこの構成に限定されるものではなく、図２〜図４で説明した内容を実現できるコン
ピュータハードウェア構成であればよい。
【００６３】
さらに、本実施形態では、フラッシュメモリに記録されるＬｉｎｕｘプログラムの冗長
構成として、２つのＬｉｎｕｘプログラムをフラッシュメモリの２つのバンクそれぞれに
格納する２バンク構成としたが、本発明はこの構成に限定されるものではなく、３つ以上
のＬｉｎｕｘプログラムをフラッシュメモリの３つ以上のバンクそれぞれに格納する冗長
構成としてもよい。
【００６４】
そして、本実施形態では、新しいバージョンのＬｉｎｕｘプログラムを有効なプログラ
ムとして起動するように構成したが、本発明はこのように限定されるものではなく、古い
バージョンのＬｉｎｕｘプログラムを有効なプログラムとして起動するように構成しても
よい。
【符号の説明】
【００６５】
１１  マザーボード
１３  ホストバス
１５  ＰＣＩバス
１７  ＣＰＵ
２１  外部キャッシュメモリ
２５  メインメモリ
２７  フラッシュメモリコントローラ
２９  フラッシュメモリ
３１  ＣＰＵ／ＰＣＩブリッジ
３３  ＰＣＩ拡張スロット
３５  ＬＡＮカード
♯１〜♯２  ブートローダ格納領域
♯２〜♯３  第１のヘッダバンク領域
♯３〜♯４  第１のカーネルバンク領域
♯４〜♯５  第２のヘッダバンク領域
♯５〜♯６  第２のカーネルバンク領域
♯６〜♯７  第１のユーザバンク領域
♯７〜♯８  第２のユーザバンク領域
【図１】
2010282645.tif 000003
【図２】
2010282645.tif 000004
【図３】
2010282645.tif 000005
【図４】
2010282645.tif 000006