(57)【要約】【課題】作業領域・作業時間が小さく、電源断があっても更新が再開でき、かつ書き込みをサポートしないファイルシステムをサポートしたファームウェア更新技術を提供する。【解決手段】更新作成・配布サーバにおいて、旧版新版のファームウェアイメージを分割し、新旧の分割したファームウェアイメージの差分を抽出し、更新パッケージを作成し、それを組み込み機器に配信する。一方、組み込み機器では、旧版の分割したファームウェアイメージ（現在使用中の既存ファームウェアイメージ）に対して更新パッケージを適用する。【選択図】図１
2010237852.tif 000002
【特許請求の範囲】
【請求項１】
ファームウェアが組み込まれた組み込み機器と、当該組み込み機器とネットワークを介して接続され、ソフトウェアとその構成データとを含むファームウェアイメージを配信するファームウェア配信サーバと、を備え、
前記ファームウェア配信サーバは、
旧バージョンのファームウェアイメージが所定個数に分割されて生成された、複数の旧バージョン分割ファームウェアイメージを格納する格納部と、
前記旧バージョンのファームウェアイメージと同じ条件で新バージョンのファームウェアイメージを分割し、複数の新バージョン分割ファームウェアイメージを生成する分割イメージ作成部と、
ファームウェアイメージの分割単位ごとに、前記新バージョンファームウェアイメージと前記旧バージョンファームウェアイメージの差分情報を抽出し、前記分割単位ごとの差分情報を有する更新イメージを生成する更新イメージ作成部と、
前記更新イメージを前記組み込み機器に配信する配信部と、を有し、
前記組み込み機器は、
前記更新イメージを受信する受信部と、
使用中の既存ファームウェアイメージに前記更新イメージを適用し、ファームウェアを更新する更新適用部と、を有する
ことを特徴とするファームウェア更新システム。
【請求項２】
前記複数の旧バージョン分割ファームウェアイメージは、前記旧バージョンのファームウェアをディレクトリ名が共通するファイルでまとめて分割することにより生成されており、
前記分割イメージ作成部は、前記複数の旧バージョン分割ファームウェアイメージを生成したときと同じ条件で前記ディレクトリ名に基づいて、前記新バージョンのファームウェアを分割して前記複数の新バージョン分割ファームウェアイメージを生成することを特徴とする請求項１に記載のファームウェア更新システム。
【請求項３】
前記ファームウェア配信サーバは、さらに、ファームウェアイメージを分割する際に用いられ、前記ファームウェアイメージを振り分ける基準となるディレクトリ名を分割イメージ番号と対応付けて管理するイメージ分割テーブルを有し、
前記イメージ分割テーブルでは、各分割イメージ番号に対応するテーブルの領域サイズは等しく設定されており、
前記分割イメージ作成部は、第１のテーブル領域に振り分けられたファイルの合計サイズが前記領域サイズよりも大きい場合には、振り分けられたファイルの合計サイズが前記領域サイズよりも小さい第２のテーブル領域に、前記第１のテーブル領域に振り分けられたファイルの一部を移動させ、移動処理後の前記第１のテーブル領域に移動先を示すリンク情報を付与することにより、前記ファームウェアイメージを分割することを特徴とする請求項２に記載のファームウェア更新システム。
【請求項４】
前記更新適用部は、前記更新イメージを前記既存ファームウェアイメージに適用して前記ファームウェアを更新する際に、起動ＯＳを通常使用する通常ＯＳから緊急時に使用する緊急用ＯＳに切り替えることを特徴とする請求項１に記載のファームウェア更新システム。
【請求項５】
前記緊急用ＯＳは、前記ファームウェア更新中に前記組み込み機器の電源がＯＦＦとなった場合に更新適用中であった更新イメージを特定する機能と、メモリに対して直接アクセスできる機能と、前記更新適用部を動作させる機能と、を有することを特徴とする請求項4に記載のファームウェア更新システム。
【請求項６】
前記組み込み機器は、前記既存ファームウェアイメージを前記ディレクトリ名に基づいて分割して生成された既存分割ファームウェアイメージとして有しており、
前記更新適用部は、前記ディレクトリ名に基づいた前記分割単位ごとの前記差分情報を有する前記更新イメージを、対応するディレクトリ名を有する前記既存分割ファームウェアイメージに適用して、前記ファームウェアを更新することを特徴とする請求項２に記載のファームウェア更新システム。
【請求項７】
ファームウェアが組み込まれた組み込み機器とネットワークを介して接続され、ソフトウェアとその構成データとを含むファームウェアイメージを配信するファームウェア配信サーバであって、
旧バージョンのファームウェアイメージが所定個数に分割されて生成された、複数の旧バージョン分割ファームウェアイメージを格納する格納部と、
前記旧バージョンのファームウェアイメージと同じ条件で新バージョンのファームウェアイメージを分割し、複数の新バージョン分割ファームウェアイメージを生成する分割イメージ作成部と、
ファームウェアイメージの分割単位ごとに、前記新バージョンファームウェアイメージと前記旧バージョンファームウェアイメージの差分情報を抽出し、前記分割単位ごとの差分情報を有する更新イメージを生成する更新イメージ作成部と、
前記更新イメージを前記組み込み機器に配信する配信部と、
を備えることを特徴とするファームウェア配信サーバ。
【請求項８】
ソフトウェアとその構成データとを含むファームウェアイメージを配信するファームウェア配信サーバとネットワークを介して接続された、ファームウェア組み込み機器であって、
前記ファームウェア配信サーバから送信されてきた更新イメージを受信する受信部と、
使用中の既存ファームウェアイメージに前記更新イメージを適用し、ファームウェアを更新する更新適用部と、を備え、
前記更新イメージは、旧バージョンのファームウェアイメージが所定個数に分割されて生成された複数の旧バージョン分割ファームウェアイメージと、前記旧バージョンのファームウェアイメージと同じ条件で新バージョンのファームウェアイメージを分割して生成された複数の新バージョン分割ファームウェアイメージとの差分で構成されており、前記新旧バージョンのファームウェアイメージの分割単位ごとに、前記新バージョンファームウェアイメージと前記旧バージョンファームウェアイメージの差分情報を抽出し、前記分割単位ごとの差分情報を有し、
前記使用中の既存ファームエアイメージは、前記新旧バージョンのファームウェアイメージと同じ条件で分割されており、
前記更新適用部は、前記分割された使用中の既存のファームウェアイメージの該当する分割単位に前記更新イメージを適用する
ことを特徴とするファームウェア組み込み機器。
【請求項９】
コンピュータを請求項７に記載のファームウェア配信サーバとして機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェア配信するサーバと、ファームウェア組み込み機器との間で実行されるファームウェア更新技術に関するものである。
【背景技術】
【０００２】
近年、ＤＶＤ機器やＴＶ機器等の組込み機器をリリース後、ソフトウェア（ファームウェア含む）に不具合が見つかった場合、従来のファームウェアを、不具合を解決したファームウェアに書き換えることで、問題を解決するという方法が一般に行われている。ここで、ファームウェアとは、組み込み機器の不揮発性記憶領域にあらかじめ記憶されているデータすべてを指すものとする。このようなファームウェア更新に関しては、例えば特許文献１や非特許文献１、非特許文献２等に開示されている。
【０００３】
特許文献１は、ファームウェアを全て交換するファームウェア更新方式を開示している。ファームウェアを全て交換するため、ネットワーク経由で更新する場合、新しいバージョンのファームウェアイメージを全て配信する必要があるため、配信すべきデータサイズが大きくなる。
【０００４】
また、非特許文献１は、古いバージョンのデータと新しいバージョンのデータの差分を抽出する技術を開示している。ネットワーク経由でファームウェアを更新する場合、これを利用し、ファームウェアの更新差分だけを配信すれば、配信データサイズを削減できる。
【０００５】
非特許文献２は、Linuxでよく使われているソフトウェア更新プログラムについて開示している。当該プログラムによれば、パッケージ単位でソフトウェアを管理し、更新のあったソフトウェアパッケージが配布される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１１０２１８号公報
【非特許文献】
【０００７】
【非特許文献１】xdelta: http://xdelta.org/
【非特許文献２】Yum: Yellow dog Updater, Modified：http://linux.duke.edu/projects/yum/
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、特許文献１の方法では、配信すべきデータサイズが大きいため、ダウンロードに時間がかかり、機器側のダウンロードのための領域も大きくなってしまうという問題がある。さらに、ファームウェアを全て書き換えるための作業時間も長くなるという問題もある。
【０００９】
また、非特許文献１によるファームウェア配信では、配信するデータのサイズは小さくなるものの、ファームウェアイメージに更新を適用するためには、時間と作業領域を消費するという問題がある。つまり、例えば、古いバージョンのファームウェアイメージに更新データを適用する場合、逐次古いバージョンのイメージに適用していこうとすると、電源断などで中断があった場合、ファームウェアイメージが破損してしまう。したがって、更新データを適用した後の出力を古いバージョンのイメージとは別の領域に行う必要があり、この分作業領域がかかる。また、古いバージョンのイメージ全体へのアクセスが必要なため時間もかかる。
【００１０】
さらに、非特許文献２のファームウェアの更新を用いれば作業領域と時間はかからないが、書き込みをサポートしないファイルシステムには対応できない。パッケージの中には、ファイルシステム中の更新対象のファイルが入っている。このファイルを書き込むためには、ファイルシステムの書き込みサポートが必要である。通常、組み込み機器の場合、処理を軽くする（起動時間に影響を与えないようにする）ために、読み込みのＩ／Ｏ要求のみをサポートしたファイルシステムが用いられている。従って、読み込みのみをサポートするファイルシステムの利点を保持したままＯＳ等のファームウェアを更新できる方法が望ましい。
【００１１】
本発明はこのような状況に鑑みてなされたものであり、作業領域が小さく、作業時間が短くて済み、電源断があっても更新が再開でき、かつ書き込みをサポートしないファイルシステムでもファームウェアを更新できる技術を提供するものである。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明では、ファームウェア配信サーバでは、旧バージョンのファームウェアイメージが所定個数に分割されて生成された、複数の旧バージョン分割ファームウェアイメージを有し、旧バージョンのファームウェアイメージと同じ条件で新バージョンのファームウェアイメージを分割し、複数の新バージョン分割ファームウェアイメージを生成する。また、ファームウェアイメージの分割単位ごとに、新バージョンファームウェアイメージと旧バージョンファームウェアイメージの差分情報を抽出し、分割単位ごとの差分情報を有する更新イメージを生成する。そして、更新イメージを組み込み機器に配信する。更新イメージを受信した組み込み機器では、使用中の既存ファームウェアイメージに更新イメージを適用し、ファームウェアが更新される。
【００１３】
ここで、複数の旧バージョン分割ファームウェアイメージは、旧バージョンのファームウェアをディレクトリ名が共通するファイルでまとめて分割することにより生成されている。よって、複数の旧バージョン分割ファームウェアイメージを生成したときと同じ条件で前記ディレクトリ名に基づいて、新バージョンのファームウェアを分割して複数の新バージョン分割ファームウェアイメージが生成される。
【００１４】
ファームウェア配信サーバは、さらに、ファームウェアイメージを分割する際に用いられ、ファームウェアイメージを振り分ける基準となるディレクトリ名を分割イメージ番号と対応付けて管理するイメージ分割テーブルを有している。なお、イメージ分割テーブルでは、各分割イメージ番号に対応するテーブルの領域サイズは等しく設定されている。この場合、ファームウェアの分割処理を実行する際には、分割テーブル中の第１のテーブル領域に振り分けられたファイルの合計サイズが領域サイズよりも大きい場合には、振り分けられたファイルの合計サイズが領域サイズよりも小さい第２のテーブル領域に、第１のテーブル領域に振り分けられたファイルの一部を移動させる。そして、移動処理後の第１のテーブル領域に移動先を示すリンク情報を付与する。
【００１５】
組み込み機器では、更新イメージを既存ファームウェアイメージに適用してファームウェアを更新する際に、起動ＯＳを通常使用する通常ＯＳから緊急時に使用する緊急用ＯＳに切り替える。この緊急用ＯＳは、ファームウェア更新中に組み込み機器の電源がＯＦＦとなった場合に更新適用中であった更新イメージを特定する機能と、メモリに対して直接アクセスできる機能と、更新適用処理を動作させる機能と、を有している。
【００１６】
また、組み込み機器は、既存ファームウェアイメージをディレクトリ名に基づいて分割して生成された既存分割ファームウェアイメージとして有している。この分割の条件は上述の新旧ファームウェアイメージの分割処理の際に用いられた条件と同一である。そして、ファームウェア更新処理の際には、ディレクトリ名に基づいた分割単位ごとの差分情報を有する更新イメージを、対応するディレクトリ名を有する既存分割ファームウェアイメージに適用する。
【００１７】
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００１８】
本発明によれば、組み込み機器において、ファームウェア更新に要する作業領域が小さく、作業時間が短くて済み、電源断があっても更新が再開でき、かつ書き込みをサポートしないファイルシステムでもファームウェアを更新することができるようになる。
【図面の簡単な説明】
【００１９】
【図１】本発明の実施形態によるファームウェア更新システムの概略構成を示す図である。
【図２】本発明の実施形態による更新作成・配布サーバのソフトウェア構成を示す図である。
【図３】本発明の組み込み機器のソフトウェアの構成を示す図である。
【図４】イメージ分割テーブルの構成例を示す図である。
【図５】分割ファームウェアイメージの構成例を示す図である。
【図６】更新イメージの構成例を示す図である。
【図７】パーティションテーブルの構成例を示す図である。
【図８】マウントテーブルの構成例を示す図である。
【図９】更新ステータスの構成例を示す図である。
【図１０】イメージ分割機能の処理内容を説明末するためのフローチャートである。
【図１１】更新作成機能の処理内容を説明するためのフローチャートである。
【図１２】更新配布機能の処理内容を説明するためのフローチャートである。
【図１３】更新適用プログラムの処理内容を説明するためのフローチャートである。
【図１４】復旧用プログラムの処理内容を説明するためのフローチャートである。
【発明を実施するための形態】
【００２０】
本発明は、端的に説明すると、新旧ファームウェアイメージを分割して、分割領域ごとの差分データを更新イメージとしてサーバから組み込み機器に送信し、組み込み機器ではファイルシステムを用いずにＯＳによってファームウェアの更新を実行するものである。
【００２１】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【００２２】
＜システム構成＞
図１は、システム（ファームウェア更新システム）の概略構成を示す図である。当該システムは、更新イメージ１４０を配信する更新作成・配布サーバ１３０と、ネットワーク１５０を介して更新イメージ１４０を受信し、内部のファームウェアを更新する組み込み機器１６０と、を備えている。
【００２３】
開発者１１０は、作成した新しいファームウェアイメージ１２０を更新作成・配布サーバ１３０に転送する。ここで、ファームウェアイメージ１２０とは、開発者１１０が開発したソフトウェアと構成ファイルを一つのファイルとしてアーカイブしたものである。アーカイブの形式は、書き込みＩ／Ｏ要求をサポートしないファイルシステムイメージである。例えば、Linuxならば、cramfsのようなファイルシステムのイメージである。
【００２４】
更新作成・配布サーバ１３０は、例えばインターネット上に配置された、組み込み機器メーカのサーバであり、ネットワーク機能を備えたコンピュータとしてのハードウェアを備える。つまり、更新作成・配布サーバ１３０は、ＣＰＵ１３１と、ＲＡＭ１３２と、ネットワークインタフェース１３３と、ＨＤＤ１３４と、を備えている。ＨＤＤ１３４の中には、ファームウェアイメージが分割された分割ファームウェアイメージが格納されている。具体的には、新しいファームウェアイメージ１２０より一つ古いバージョンのファームウェアイメージを基に作成された旧版分割ファームウェアイメージ１３５である。なお、更新作成・配布サーバ１３０のソフトウェア構成については図２を参照して後述する。また、旧版分割ファームウェアイメージ１３５の構成については、図５を参照して後述する。
【００２５】
また、更新作成・配布サーバ１３０は、ファームウェアイメージ１２０と旧版分割ファームウェアイメージ１３５を基に更新イメージ１４０を作成し、ネットワーク１５０を介して組み込み機器１６０に送信する。なお、更新イメージ１４０の詳細な構成については、図６を参照して後述する。
【００２６】
組み込み機器１６０は、ネットワーク機能を備えたコンピュータとしてのハードウェアを備える。つまり、組み込み機器１６０は、ＣＰＵ１６１と、ＲＡＭ１６２と、ネットワークインタフェース１６３と、フラッシュメモリ１６４と、を備えている。機器１６０は、ソフトウェア更新リクエストを更新作成・配布サーバ１３０に送信し、更新イメージ１６０を受信し、フラッシュメモリ１６４に格納された分割ファームウェアイメージ１６５を更新する。なお、組み込み機器１６０のソフトウェア構成については、図３を参照して後述する。また、現在組み込み機器１６０で使用中の分割ファームウェアイメージ１６５の構成については、図５を参照して後述する。
【００２７】
＜更新作成・配布サーバのソフトウェア構成＞
図２は、更新作成・配布サーバ１３０のソフトウェアの構成を示す図である。当該ソフトウェアは、イメージ分割機能２１０と、更新作成機能２２０と、更新配布機能２３０と、イメージ分割テーブル２４０と、旧版分割ファームウェアイメージ（格納部）１３５と、新しい分割ファームウェアイメージ（格納部）２６０と、によって構成されている。これらの各機能及びデータは、ＨＤＤ１３４に格納されている。
【００２８】
イメージ分割機能２１０は、更新作成機能２２０が呼び出して用いる機能（図１１参照）であり、ファームウェアイメージ１２０を分割し、新版ファームウェアイメージ２６０を作成する。イメージ分割機能の処理内容の詳細については図１０を参照して後述する。
【００２９】
更新作成機能２２０は、更新イメージ１４０を作成するための機能である。詳細な処理内容については、図１１を参照して後述する。
更新配布機能２３０は、更新パッケージ１４０を組み込み機器１６０に配布する機能である。更新配布機能２３０の詳細な処理については、図１２を参照して後述する。
【００３０】
イメージ分割テーブル２４０は、イメージ分割機能２１０で用いるデータである。詳細については図４を参照して後述する。分割ファームウェアイメージ２６０は、イメージ分割機能２２０の出力である。詳細構成については図５を参照して後述する。
【００３１】
＜組み込み機器のソフトウェア構成＞
図３は、組み込み機器１６０のソフトウェア構成を示す図である。当該ソフトウェアは、ＯＳ群３００と、更新適用プログラム３３０と、マウントテーブル３５０と、更新ステータス３６０と、分割ファームウェアイメージ１６５と、によって構成されている。ＯＳ群３００は、通常時に使用され、読込み専用ファイルシステムを有する通常ＯＳ３１０と、急に電源切断がなされた時等の緊急時に使用され、復旧用プログラム３２２を有する緊急用ＯＳ３２１と、パーティションテーブル３４０と、を含んでいる。また、分割ファームウェアイメージ１６５は、組み込み機器１６０に現時点で搭載されている分割ファームウェアイメージであり、更新前は旧版分割ファームウェアイメージ１３５と同じ内容となっており、更新後は新版分割ファームウェアイメージ２６０と同じ内容となっている。
【００３２】
通常ＯＳ（オペレーティングシステム）３１０は、ファイルシステムとして、読込み専用ファイルシステム３１１をサポートしている。この読込み専用ファイルシステム３１１は、フラッシュメモリ１６４上のファイルシステムイメージをマウントし、Ｌｉｎｕｘのようなディレクトリツリーでファイルにアクセスすることを可能にする。しかし、ディレクトリツリー経由でファイルをオープンしても、ファイルは読込み操作のみがサポートされており、書き込み操作はサポートされていない。フラッシュメモリに書き込みを行うためには、Ｌｉｎｕｘ  ＯＳのＭＴＤインタフェースのように、直接フラッシュメモリにアクセスする必要がある。
【００３３】
緊急用ＯＳ３２１は、更新適用プログラム３３０の処理が電源断などで中断された場合に使われるＯＳであり、復旧用プログラム３２２を内包している。復旧用プログラム３２２の処理については図１４で述べるが、簡単に説明すると、更新ファームウェアをフラッシュメモリ１６４に書き込む機能を有している。ただし、この場合、ファイル名のみを指定して書き込みが可能な、書き込みをサポートするファイルシステムとは異なり、書き込むべきフラッシュメモリのアドレス（ＬＢＡ）を指定して書き込みがなされなければならない。
【００３４】
パーティションテーブル３４０は、フラッシュメモリ１６４のパーティション分けを記載したテーブルであり、通常ＯＳ３１０及び緊急用ＯＳ３２１を有するＯＳ群３００の中に格納されている。パーティションテーブル３４０の詳細な構成については、図７を参照して後述する。
【００３５】
更新適用プログラム３３０は、更新イメージ１４０を基に、分割ファームウェアイメージ１６５を更新するプログラムである。更新適用プログラム３３０の詳細な処理内容については、図１３を参照して後述する。
【００３６】
マウントテーブル３５０は、組み込み機器１６０内の分割ファームウェアイメージ１６５がどのようなファイルツリーでマウントされるかを記述している。マウントテーブル３５０は、フラッシュメモリ１６４の中に、分割ファームウェアイメージ１６５とは別の領域に記録されている。マウントテーブル３５０の詳細な構成については、図８を参照して後述する。
【００３７】
更新ステータス３６０は、更新状態を保存するための領域であり、フラッシュメモリ１６４の中に、分割ファームウェアイメージ１６５とは別の領域に記録されている。更新ステータス３６０の詳細な構成については、図９を参照して後述する。
【００３８】
＜イメージ分割テーブルの構成＞
図４は、イメージ分割テーブル２４０の構成を示す図である。このイメージ分割テーブル２４０は、新しく作成されたファームウェアイメージ１２０を分割し、新版分割ファームウェアイメージ２６０を生成するために使用される。
【００３９】
図４において、イメージサイズ４１０は、分割のサイズである。図４の例では分割サイズ（分割された各イメージのサイズ）は８Ｍｂｙｔｅを超えないようになっているが、このサイズに限られるものではない。
【００４０】
イメージ分割テーブル２４０では、分割されたイメージに対して、イメージ番号４２０が付与されている。また、ディレクトリ名４３０には、分割されたイメージの中に格納されるディレクトリのサブツリーが記されている。例えば、符号４４２で示された行は、「イメージ番号２のイメージには、／ｌｉｂ以下のディレクトリツリーが格納される」という意味を有している。さらに、符号４４１の行の「／」は、「符号４４２、４４３、及び４４４の行に格納されなかったディレクトリツリー全てが格納される」という意味である。
【００４１】
＜分割ファームウェアイメージ（新旧）の構成＞
図５は、分割ファームウェアイメージ２６０と旧版分割ファームウェアイメージ１３５の構成を示す図である。分割ファームウェアイメージ２６０及び１３５は、ファームウェアイメージ１２０がイメージサイズ（分割サイズ）４１０の単位で分割されて生成され、イメージ番号５１０及び５３０と、分割されたイメージデータ５２０及び５４０と、によって構成されている。
【００４２】
＜更新イメージの構成＞
図６は、更新イメージ１４０の構成を示す図である。更新イメージ１４０は、イメージ番号６１０と、イメージ番号に対応する更新データ６２０と、によって構成されている。図６に示されるように、例えば、イメージ番号２のイメージデータは、新旧において差がないので、更新イメージ１４０には含まれていない。
【００４３】
＜パーティションテーブルの構成＞
図７は、パーティションテーブル３４０の構成を示す図である。このパーティションテーブル３４０は、イメージデータを物理的にどこに書き込むかを決めるときに参照されるテーブルであり、フラッシュメモリ１６４のパーティション分け設定をしている。
【００４４】
パーティションテーブル３４０は、パーティション番号７１０と、それに対応するフラッシュメモリのアドレス範囲７２０と、によって構成されている。今回の例では、８Ｍバイトのパーティション５つと２Ｍバイトのパーティション１つが定義されている。
【００４５】
＜マウントテーブルの構成＞
図８は、マウントテーブル３５０の詳細な構成を示す図である。マウントテーブル３５０は、ファイルツリー内の正しい位置に正しいデータを格納するために用いられるものであり、イメージが格納されているパーティション番号８１０と、イメージ番号８２０と、ＯＳがマウントするマウントポイント８３０と、によって構成されている。マウントポイント８３０が分からないと、ＯＳは何のデータとしてマウントすべきなのか判断することができない。
【００４６】
なお、マウントテーブル３５０において、例えば、行８３２は、「パーティション番号２のパーティションには、イメージ番号２に対応するイメージが格納されており、ＯＳはこのイメージを／ｌｉｂにマウントする」という意味である。
【００４７】
＜更新ステータスの構成＞
図９は、更新ステータス３６０の構成を示す図である。更新ステータス３６０には、更新ステータス番号が記録される。つまり、更新ステータス３６０は、どのイメージ番号に対応する更新イメージを、今更新しているかを示す情報である。全ての更新イメージの更新処理が終了すると、最後に更新したイメージ番号が記録されるので、全ての更新イメージが処理済であることが分かるようになっている。
【００４８】
＜イメージ分割機能の処理内容＞
図１０は、更新作成機能２２０で用いられるイメージ分割機能が実行する処理内容を説明するためのフローチャートである。なお、イメージ分割テーブル２４０としては図４に示されたテーブル例を用いて説明する。
【００４９】
まず、イメージ分割機能２１０が、イメージ分割テーブル２４０の行数と同じ数の行数の作業領域をＲＡＭ１３２上に設ける（ステップ１０１０）。図４のイメージ分割テーブル２４０ならば、４つの作業領域が設けられることになる。
【００５０】
次に、イメージ分割機能２１０は、ファームウェアイメージ１２０に含まれる各ファイルについて以下のステップ１０２１及び１０２２の処理を繰り返し実行する（ステップ１０２０）。
【００５１】
つまり、イメージ分割機能２１０は、ファイルが、イメージ分割テーブル２４０のどのイメージ番号４２０に対応するか検索する（ステップ１０２１）。例えば、ファイル名が、／ｌｉｂ／ｌｉｂｃ．ｓｏならば、イメージ番号は「２」となり、ファイル名が、／ｓｂｉｎ／ｉｎｓｍｏｄならば、行４４２，４４３，４４４のどのディレクトリにも該当しないため、行４４１のディレクトリ「／」にマッチするとして、イメージ番号は「１」となる。
【００５２】
そして、イメージ分割機能２１０は、ファイルを、ステップ１０２１でマッチしたイメージ番号に対応する作業領域に保存する（ステップ１０２２）。例えば、／ｌｉｂ／ｌｉｂｃ．ｓｏならば、作業領域２に同じファイル名で保存し、／ｓｂｉｎ／ｉｎｓｍｏｄならば、作業領域１に同じファイル名で保存する。
【００５３】
続いて、イメージ分割機能２１０は、各作業領域について、以下のステップ１０３１ないし１０３４の処理を繰り返し実行する（ステップ１０３０）
つまり、イメージ分割機能２１０は、各作業領域に保存されたファイルを、ファイルシステムイメージとしてアーカイブした場合のサイズを見積もる（ステップ１０３１）。具体的には、実際にアーカイブを作成し、作成されたアーカイブのファイルサイズを測定する。
【００５４】
また、イメージ分割機能２１０は、イメージサイズがイメージサイズ４１０（図４の例だと８Ｍバイト）より大きいかどうか判定する（ステップ１０３２）。イメージサイズがイメージサイズ４１０より大きいと判断された場合には処理はステップ１０３３に移行し、小さいと判断された場合には処理はステップ１０３４に移行する。
【００５５】
ステップ１０３２でＹｅｓの場合、イメージ分割機能２１０は、作業領域に保存されたファイルを、イメージサイズがイメージサイズ４１０より小さな作業領域に移動すると共に、元のファイルをシンボリックリンクとして残し、リンク先を移動先とする（ステップ１０３３）。例えば、作業領域２に保存された／ｌｉｂ／ｌｉｂｃ．ｓｏを作業領域３に、／ｂｉｎ／ｏｖｅｒｆｌｏｗ３／ｌｉｂ／ｌｉｂｃ．ｓｏとして移動した場合、作業領域２の／ｌｉｂ／ｌｉｂｃ．ｓｏは、／ｂｉｎ／ｏｖｅｒｆｌｏｗ３／ｌｉｂ／ｌｉｂｃ．ｓｏへのシンボリックリンクとなる。こうすることで、ファイルの内容を移動しても、同じ名前でファイルにアクセスできることになる。
【００５６】
ステップ１０３２でＮｏの場合、或いは、ステップ１０３３の処理の後、イメージ分割機能２１０は、作業領域に保存されたファイルを、ファイルシステムイメージとしてアーカイブし、分割ファームウェアイメージ２６０に保存する（ステップ１０３４）。例えば、作業領域２ならば、保存される場所は行５３２となる。
以上の作業により、ファームウェアイメージ１２０が、最大８Ｍバイトのファイルシステムイメージに分割され、分割ファームウェアイメージ２６０として保存される。
【００５７】
＜更新作成機能の処理内容＞
図１１は、更新作成機能２２０が実行する更新イメージ作成処理の内容を説明するためのフローチャートである。
【００５８】
まず、開発者１１０によって作成されたファームウェアイメージ１２０が更新作成・配布サーバ１３０に入力され、更新作成機能２２０が当該ファームウェアイメージ１２０を取得する（ステップ１１１０）。
【００５９】
次に、更新作成機能２２０は、イメージ分割機能２１０を呼び出し、それを用いてファームウェアイメージ分割処理（図１０）を行い、分割ファームウェアイメージ２６０を取得する（ステップ１１２０）。
【００６０】
そして、更新作成機能２２０は、分割ファームウェアイメージ２６０の各イメージ番号５１０(ループ変数ｍとする)について、以下のステップ１１３１乃至１１３４の処理を繰り返し実行する（ステップ１１３０）。
【００６１】
つまり、更新作成機能２２０は、分割ファームウェアイメージ２６０のイメージ番号５１０がｍのイメージデータ５２０と、旧版分割ファームウェアイメージ１３５のイメージ番号５３０がｍのイメージデータ５４０を比較し（ステップ１１３１）、イメージデータが同一かどうか判断する（ステップ１１３２）。同一であれば処理は終了し、同一でなければ処理はステップ１１３３に移行する。
【００６２】
ステップ１１３２でＮｏの場合、更新作成機能２２０は、ステップ１１３１の分割ファームウェアイメージ２６０のイメージデータ５２０と、旧版ファームウェアイメージ１３５のイメージデータ５３０の差分データをバイナリ単位で抽出する（ステップ１１３３）。抽出方法としては、例えば、ｘｄｅｌｔａのような技術を用いることができる。
【００６３】
続いて、更新作成機能２２０は、更新イメージ１４０のイメージ番号６１０にｍを、更新データ６２０にステップ１１３３で抽出した差分データを保存する（ステップ１１３４）。
以上のようにして、更新イメージが作成される。前述のように、更新イメージは例えば図６のような構成となっている。
【００６４】
＜更新配布機能の処理内容＞
図１２は、更新配布機能２３０の処理内容を説明するためのフローチャートである。
【００６５】
組み込み機器１６０から更新作成・配布サーバ１３０に送信されてきたファームウェアアップデートのリクエストを取得する（ステップ１２１０）と、更新配布機能２３０は、更新作成機能２２０が作成した更新イメージをリクエスト送信元の組み込み機器１６０に配信する（ステップ１２２０）。
【００６６】
なお、アップデートリクエストの送信は、例えば、ユーザが更新を指定したり、定期的に組み込み機器１６０が自動送信したり、組み込み機器１６０を起動したときに更新作成・配布サーバ１３０と通信してファームウェアが更新されているかをチェックし、更新されている場合にアップデートリクエストを自動送信したりするようにすればよい。
【００６７】
＜更新適用プログラムの処理内容＞
図１３は、組み込み機器１６０における更新適用プログラム３３０が実行する処理内容を説明するためのフローチャートである。なお、更新適用プログラム３３０は、ＣＰＵ１６１と協働して更新適用処理部として機能する。
【００６８】
組み込み機器１６０が更新作成・配布サーバ１３０から更新イメージ１４０を受信し、起動した更新適用プログラム３３０が格納場所を通常ＯＳ（ＲＡＭ上に展開されたもの）に通知し、通常ＯＳがそれをメモリに保存する（ステップ１３１０）。なお、更新イメージ１４０の保存先については、マウントテーブル３５０のイメージ番号８２０が「ＷＯＲＫ２」となっている行の、パーティション番号８１０に対応するパーティションとなる。図８で例示のマウントテーブルの場合、パーティション番号６に対応するパーティション（ＷＯＲＫ２）である。また、保存する際は、ファイルシステム３１１を介さず、通常ＯＳのファイルシステム３１１以外の機能が直接フラッシュメモリ１６４に書き込みを行う。また、更新ステータス９２１は「０」（まだ何も更新されていないことを示す）とされる。
【００６９】
次に、更新適用プログラム３３０は、次回起動時のＯＳを、通常ＯＳ３１０から緊急用ＯＳ３２１に切り替える（ステップ１３２０）。これは、非常事態のとき等に電源がＯＦＦとなった場合に、緊急用ＯＳ３２１を使用できるようにするための処理であり、電源がＯＦＦとならなければ通常ＯＳ３１０（ＲＡＭ１６２上に展開された通常ＯＳ）が使用される。なお、切り替えは、ブートローダの設定を切り替えるなどして実現可能である。また、緊急用ＯＳ３２１は、機能として、少なくとも更新ステータス参照機能と、アドレスと指定してフラッシュメモリ１６４に対するデータの読み書きを実行する機能と、復旧用プログラム３２２を実行する機能を有していれば良い。
【００７０】
そして、更新適用プログラム３３０は、更新イメージ１４０の各イメージ番号６１０について、ステップ１３３１乃至１３３４の処理を繰り返し実行する（ステップ１３３０）。ここで、繰り返しの変数を以下ｎとする。
【００７１】
つまり、更新適用プログラム３３０は、更新ステータス９２１を更新する（ステップ１３３１）。具体的には、更新ステータス９２１に「ｎ」が入力される。
【００７２】
また、更新適用プログラム３３０は、マウントテーブル３５０（図８）を参照し、イメージ番号ｎに対応するパーティションを探し、更新データ６２０の適用対象とする。例えば、ｎ＝１の場合、図８を見ると、対応するパーティション番号は１であり、このパーティションにあるデータが更新適用対象となる。更新適用対象のデータに更新データ６２０を適用する。適用の際は、ｘｄｅｌｔａの差分適用機能のような機能を用いる。適用後のデータは、イメージ番号がＷＯＲＫ（作業領域）１に対応するパーティション（パーティション番号を「ｍ」とする）に出力する。図８の例では、ＷＯＲＫ１に対応するパーティション番号は５であるため、パーティション５に出力される。このように、パーティション番号１の領域ではなくＷＯＲＫ１に更新データを格納するのは、旧版のデータが残っていないと、途中で電源がＯＦＦとなった場合にファームウェアの更新処理を再開できなくなってしまうからである。
【００７３】
そして、適用対象への更新データの格納が完了すると、更新適用プログラム３３０は、マウントテーブルのパーティション番号８１０のｍとｎを入れ替える（ステップ１３３３）。図８の例では、行８３１のパーティション番号が５になり、行８３５のパーティション番号が１となる。
【００７４】
続いて、更新適用プログラム３３０は、再度マウント処理を行う。ここで示した例の場合だと、マウントポイント「／」はパーティション５にマウントされることになる。これにより、マウントポイント「／」にマウントされたデータは、更新されたイメージ番号１のデータということになる。
【００７５】
送信されてきた全ての更新イメージが適用された後（全てのイメージ番号についてステップ１３３２乃至１３３４の処理が終了後）、更新適用プログラム３３０は、起動ＯＳを元の通常ＯＳ３１０に戻し、処理は終了する（ステップ１３４０）。
【００７６】
＜復旧用プログラムの処理内容＞
図１４は、緊急用ＯＳ３２１から起動する復旧用プログラム３２２の処理を説明するためのフローチャートである。なお、緊急用ＯＳ３２１は、図１３の処理が途中で終了した場合に起動するようになっている。
【００７７】
図１３の処理が何らかの理由（緊急事態や異常事態）で終了してしまった場合、復旧用プログラム３２２は、更新ステータス９２１を参照し、更新中（終了時に処理中）であった更新データのイメージ番号を取得する（ステップ１４１０）。図９の場合だと２となっている。
【００７８】
そして、復旧用プログラム３２２は、図１３の処理のステップ１３３２から、ｎ＝（ステップ１４１０の値）として、図１３の処理を再開する（ステップ１４２０）。このときは、緊急用ＯＳ３２１が使用される。
【００７９】
＜まとめ＞
本実施形態では、更新作成・配布サーバにおいて、更新対象機器（組み込み機器）の旧バージョンのファームウェアイメージと新バージョンのファームウェアイメージのそれぞれを、等サイズＭ（バイト）のＮ個の新バージョンファームウェアイメージｉ（１＜ｉ＜Ｎ）（以下新ファームウェアイメージｉ）とＮ個の旧バージョンファームウェアイメージｉ（以下旧ファームウェアイメージ）に分割する。そして、旧ファームウェアイメージｉと新ファームウェアイメージｉの差分ｉ（１＜ｉ＜Ｎ）を抽出し、差分ｉをまとめて更新パッケージにし、対象機器に配信する。これにより、組み込み機器側での更新処理が差分があった分割されたファームウェアイメージiに対する更新だけですむため、更新対象のファイルも特定しやすく、非常に効率よくファームウェアの更新処理を実行することができるようになる。
【００８０】
更新対象機器のフラッシュメモリは、Ｎ個以上のパーティションに分けられており、パーティションサイズは、少なくともサイズＭ以上であり、旧ファームウェアイメージｉが各パーティションに格納されている。また、更新対象機器は、更新パッケージを受信し、パッケージに含まれる差分ｉを、パーティションに格納された旧ファームウェアイメージｉに適用し、新ファームウェアイメージｉを生成する。
【００８１】
さらに、対象機器には、旧ファームウェアイメージｉに対する更新作業に使う作業用のパーティションＷを設ける。旧ファームウェアイメージｉに対する更新作業の出力である、新ファームウェアイメージｉをパーティションＷに出力する。更新後は、Ｗのデータを新ファームウェアイメージｉとして取り扱い、旧ファームウェアイメージｉが格納されたパーティションをＷとして取り扱う。
【００８２】
また、対象機器には、緊急用のOSと更新ステータスデータを設ける。更新ステータスには、現在どのファームウェアイメージiを更新しているのかの状態を記録する。更新途中で電源が切れた場合、次回電源投入時に、緊急用のOSが起動し、更新ステータスデータを参照し、更新処理を再開する。
【００８３】
以上により、作業領域のサイズは、作業用のパーティションWだけである。また、更新に要する時間も、差分があった分割されたファームウェアイメージiに対する更新だけですむため、全てのファームウェアイメージを更新するより短い。さらに、旧ファームウェアイメージiから新ファームウェアイメージiを生成する作業の途中で電源が切れた場合も、旧ファームウェアイメージiが残っているため、次回の電源投入時に更新を再開することができる。
【００８４】
また、実施形態において、作業領域のサイズは、作業用のパーティションＷＯＲＫ１、ＷＯＲＫ２の合計で１０Ｍバイトである。ファームウェアイメージのサイズは８Ｍのイメージ４個分なので３２Ｍバイトである。ファームウェアイメージ全てを更新する方式では、ファームウェアイメージと同サイズ（３２Ｍバイト）の作業領域が必要なため、作業領域を小さく出来ている。さらに、更新に要する時間も、差分があった分割されたファームウェアイメージに対する更新だけですむため、全てのファームウェアイメージを更新するより短い。さらに、旧ファームウェアイメージから新ファームウェアイメージを生成する作業の途中で電源が切れた場合も、図１４の処理により、次回の電源投入時に更新を再開することができる。
【００８５】
なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【００８６】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【００８７】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ-ＲＷ、ＣＤ-Ｒ等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はＣＰＵやＭＰＵ)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【図１】
2010237852.tif 000003
【図２】
2010237852.tif 000004
【図３】
2010237852.tif 000005
【図４】
2010237852.tif 000006
【図５】
2010237852.tif 000007
【図６】
2010237852.tif 000008
【図７】
2010237852.tif 000009
【図８】
2010237852.tif 000010
【図９】
2010237852.tif 000011
【図１０】
2010237852.tif 000012
【図１１】
2010237852.tif 000013
【図１２】
2010237852.tif 000014
【図１３】
2010237852.tif 000015
【図１４】
2010237852.tif 000016