(57)【要約】【課題】更新中断時の復旧と、バックアップおよび差分データ保存に使われる不揮発性メモリ容量の節約を、同時に実現することができるファームウェア更新処理を提供する。【解決手段】新旧ファームウェアの他に、書き換え中のファームウェアの状態を常に保持する中間データを備え、ファームウェアを構成するすべてのブロックを任意の順番で更新する場合について、前期中間データと新しいファームウェアの該ブロックを逐次比較し、更新中断時の復旧のためのデータのアドレスとそれに必要なバックアップ容量の計算と、配布すべき差分データ抽出とその容量の計算と更新手順の作成を行い、バックアップ容量と差分データ容量の合計が最小となる処理順序を導き出す。【選択図】図２
2011044087.tif 000002
【特許請求の範囲】
【請求項１】
情報機器における旧ファームウェアを新ファームウェアに更新するファームウェア更新システムであって、
ファームウェア更新用データを生成する管理装置と、前記ファームウェア更新用データを取得して前記旧ファームウェアを前記新ファームウェアに更新する情報機器と、を備え、
前記管理装置は、前記旧ファームウェア及び前記新ファームウェアのデータから差分データを生成し、前記情報機器において前記旧ファームウェア及び前記差分データから前記新ファームウェアを生成するための更新処理を記述する更新手順書を生成し、前記情報機器における更新処理が中断した場合に更新処理途中のデータを更新処理開始前の状態に戻す処理（書き戻し処理）を実行するための情報を記述する書き戻し参照情報を生成し、前記差分データ、前記更新手順書、及び前記書き戻し参照情報を前記ファームウェア更新用データとして生成し、
前記情報機器は、前記ファームウェア更新用データに含まれる前記差分データ、前記更新手順書、及び前記書き戻し参照情報に基づいて、前記旧ファームウェアを前記新ファームウェアに更新することを特徴とするファームウェア更新システム。
【請求項２】
請求項１において、
前記管理装置は、前記旧ファームウェア及び前記新ファームウェアを複数のブロックに分割し、ブロック単位で処理して前記ファームウェア更新用データを生成することを特徴とするファームウェア更新システム。
【請求項３】
請求項２において、
前記管理装置は、前記複数のブロックを更新処理するための順番を示す処理順序を複数提供し、
各処理順序について、前記旧ファームウェアから前記新ファームウェアに書き換え中の各ブロックの状態を示す中間データを生成し、前記新ファームウェア及び前記中間データを用いて前記ブロック単位でバックアップの必要性及び差分データ抽出の必要性をチェックし、
前記バックアップの必要性及び前記差分データ抽出の必要性に関するチェック結果に基づいて、前記複数の処理順序の中で前記バックアップに必要な容量と前記差分データ格納に必要な容量の合計値が最小となる処理順序を特定し、当該特定された処理順序を前記更新手順書に記述することを特徴とするファームウェア更新システム。
【請求項４】
請求項３において、
前記管理装置は、前記中間データ内において処理対象のブロックとそれ以外のブロックとを比較し、一致するか否かによって前記バックアップの必要性をチェックし、
前記新ファームウェア内の処理対象のブロックと前記中間データの全ブロックとを比較し、一致するか否かによって前記差分データ抽出の必要性をチェックすることを特徴とするファームウェア更新システム。
【請求項５】
請求項２において、
前記管理装置は、前記書き戻し処理を実行する際のデータの参照位置及びサイズを前記ブロックのサイズより小さい単位で指示して複数の位置から前記書き戻し処理のデータを取得できるように、前記書き戻し参照情報を記述することを特徴とするファームウェア更新システム。
【請求項６】
請求項２において、
前記管理装置は、前記更新処理を実行する際のデータの参照位置及びサイズを前記ブロックサイズより小さい単位で指示して複数の位置から前記更新処理のデータを取得できるように、前記更新手順書の更新手順を記述することを特徴とするファームウェア更新システム。
【請求項７】
請求項２乃至６の何れか１項において、
前記情報機器は、前記更新手順書の処理手順に対応させて、前記ブロック単位で、バックアップが終了したことを示す情報、及び更新処理が終了したことを示す情報を含む更新状況を管理することを特徴とするファームウェア更新システム。
【請求項８】
請求項７において、
前記情報機器は、処理中断が起こった場合、前記更新状況を確認してどの処理手順に従って処理していたときに中断が発生したか特定し、
前記更新手順書を参照して、前記特定された処理手順によって処理途中であったブロックを特定し、
前記書き戻し参照情報を確認し、前記特定された処理途中のブロックについてデータ書き戻し処理を実行して当該ブロックを更新処理開始前の状態にすることを特徴とするファームウェア更新システム。
【請求項９】
ファームウェア更新用データに基づいて、旧ファームウェアを新ファームウェアに更新する情報機器であって、
前記ファームウェア更新用データは、前記旧ファームウェア及び前記新ファームウェアのデータから生成された差分データと、前記旧ファームウェア及び前記差分データから前記新ファームウェアを生成するための更新処理を記述する更新手順書と、前記更新処理が中断した場合に更新処理途中のデータを更新処理開始前の状態に戻す処理（書き戻し処理）を実行するための情報を記述する書き戻し参照情報と、を含み、
前記ファームウェア更新用データを取得する更新用データ取得部と、
前記ファームウェア更新用データに含まれる前記差分データ、前記更新手順書、及び前記書き戻し参照情報に基づいて、前記旧ファームウェアを前記新ファームウェアに更新する更新処理部を備え、
前記更新処理部は、前記旧ファームウェア及び前記新ファームウェアを複数に分割して得られるブロックを単位として、前記更新手順書の処理手順に対応させて、前記ブロック単位で、バックアップが終了したことを示す情報、及び更新処理が終了したことを示す情報を含む更新状況を管理することを特徴とする情報機器。
【請求項１０】
請求項９において、
前記情報機器は、処理中断が起こった場合、前記更新状況を確認してどの処理手順に従って処理していたときに中断が発生したか特定し、
前記更新手順書を参照して、前記特定された処理手順によって処理途中であったブロックを特定し、
前記書き戻し参照情報を確認し、前記特定された処理途中のブロックについてデータ書き戻し処理を実行して当該ブロックを更新処理開始前の状態にすることを特徴とする情報機器。
【請求項１１】
コンピュータを請求項１０に記載の情報機器として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェア更新システム、及びその一部を構成する情報機器であって、例えば、組込み機器分野でＮＯＲ型フラッシュメモリ等の不揮発性メモリに格納されているファームウェアを書き換える技術に関するものである。
【背景技術】
【０００２】
家電分野では、Read-Onlyなファイルシステムが多用されているため、ファイルシステムの機能を利用したファイル単位の書き込みは不可能である。そのため、ファームウェアを更新する際は、ファームウェアのイメージを書き換える必要がある。ファームウェアイメージは、一般に、サイズが大きいため、ファームウェアを更新する場合、イメージ全体を配信するのではなく、差分のみを抽出・配信する方法が利用される。
【０００３】
差分を抽出する手法として、新旧ファームウェアイメージ全体同士を、バイト単位で比較し、差分を抽出するイメージ全体比較法がある（例えば、非特許文献１参照）。イメージ全体比較法では、情報機器側で差分から新イメージを作る場合、旧イメージ全体が必要であるため、更新中断時の復旧のためには、旧イメージ全体のバックアップが必要である。書き換えてしまった旧データはＲＡＭ上に残っていないので、旧イメージを復旧させるためにはその全体のバックアップを取っておく必要があるからである。
【０００４】
また、ファームウェアイメージとその全体のバックアップを保持する方法もある（例えば、特許文献１参照）。
【０００５】
さらに、更新中断時に復旧できる形にファームウェアイメージの差分を抽出する手法として、新旧のイメージを構成する各ブロック（ファームウェアを格納する不揮発性メモリのブロックに対応）同士をブロック単位で比較し、一致しないブロックのデータを配布すべき差分データに追加するという、分割ブロック比較法がある。この方法で差分を適用する場合、書き換え対象のブロックをバックアップする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１１０２１８号公報
【非特許文献】
【０００７】
【非特許文献１】xdelta: URL＝http://xdelta.org/
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、非特許文献１に記載されているイメージ全体比較法では、差分データのサイズは小さくなるものの、更新中断時に復帰するために必要なバックアップは旧イメージ全体となるのでサイズが大きくなってしまう。
【０００９】
また、分割ブロック比較法では、更新中断時に復帰するためのバックアップは書き換え中のブロックのみで済むが、旧イメージ内に書き換え対象のデータと同一のデータが他のブロックに存在する場合でもそれとは別にバックアップを取るため、不揮発性メモリの無駄が発生してしまう。また、ブロック単位でしか比較しないため、差分データが大きくなってしまう。
【００１０】
本発明はこのような状況に鑑みてなされたものであり、不揮発メモリにおいて、更新中断時に復旧するために必要なバックアップ領域と差分データの保存領域との合計サイズを小さくして効率よくかつ廉価にファームウェア更新を実行することのできる技術を提供するものである。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明によるファームウェア更新システムは、ファームウェア更新用データを生成する管理装置と、ファームウェア更新用データを取得して旧ファームウェアを新ファームウェアに更新する情報機器と、を備えている。管理装置は、旧ファームウェア及び新ファームウェアのデータから差分データを生成し、情報機器において旧ファームウェア及び差分データから新ファームウェアを生成するための更新処理を記述する更新手順書を生成し、情報機器における更新処理が中断した場合に更新処理途中のデータを更新処理開始前の状態に戻す処理（書き戻し処理）を実行するための情報を記述する書き戻し参照情報（書き戻し元アドレステーブル）を生成する。ファームウェア更新用データ（配布パッケージ）は、ブロック単位で更新処理するためのデータとして生成される。
【００１２】
管理装置は、複数のブロックを更新処理するための順番を示す処理順序を複数種類用意し、各処理順序について、旧ファームウェアから新ファームウェアに書き換え中の各ブロックの状態を示す中間データを生成し、新ファームウェア及び前記中間データを用いてブロック単位でバックアップの必要性及び差分データ抽出の必要性をチェックする。また、管理装置は、バックアップの必要性及び差分データ抽出の必要性に関するチェック結果に基づいて、複数の処理順序の中でバックアップに必要な容量と差分データ格納に必要な容量の合計値が最小となる処理順序を特定する。この特定された処理順序が更新手順書に記述される。より具体的には、管理装置は、中間データ内において処理対象のブロックとそれ以外のブロックとを比較し、一致するか否かによって前記バックアップの必要性をチェックし、新ファームウェア内の処理対象のブロックと中間データの全ブロックとを比較し、一致するか否かによって差分データ抽出の必要性をチェックする。
【００１３】
なお、管理装置は、書き戻し処理を実行する際のデータの参照位置及びサイズをブロックのサイズより小さい単位で指示して複数の位置から前記書き戻し処理のデータを取得できるように、書き戻し参照情報を記述するようにしてもよい。また、管理装置は、更新処理を実行する際のデータの参照位置及びサイズをブロックサイズより小さい単位で指示して複数の位置から更新処理のデータを取得できるように、更新手順書の更新手順を記述するようにしてもよい。
【００１４】
一方、情報機器は、更新手順書の処理手順に対応させて、ブロック単位で、バックアップが終了したことを示す情報、及び更新処理が終了したことを示す情報を含む更新状況を管理する。
【００１５】
また、情報機器は、処理中断が起こった場合、更新状況を確認してどの処理手順に従って処理していたときに中断が発生したか特定し、更新手順書を参照して特定された処理手順によって処理途中であったブロックを特定し、書き戻し参照情報を確認し、特定された処理途中のブロックについてデータ書き戻し処理を実行して当該ブロックを更新処理開始前の状態にする。
【００１６】
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００１７】
本発明によれば、バックアップデータや差分データ保存に使われる不揮発性メモリ容量の節約をしながら、更新中断時の復旧を実現することができるようになる。
【図面の簡単な説明】
【００１８】
【図１】中断が対象データのブロック書き換え中であった場合は、該当ブロックを元に書き戻して更新再開するという第４のポリシーの必要性を示すための図である。
【図２】本発明の実施形態によるファームウェア更新システムの概略構成を示す図である。
【図３】管理装置における差分抽出処理の概略を説明するためのフローチャートである。
【図４】バックアップの必要性調査処理の詳細を説明するためのフローチャートである。
【図５】差分配布（抽出）必要性調査処理の詳細を説明するためのフローチャートである。
【図６Ａ】バックアップ及び差分配布（抽出）の必要性調査処理（図４及び５）の例であって、所定の処理順序で処理した場合の例を示す図である。
【図６Ｂ】バックアップ及び差分配布（抽出）の必要性調査処理（図４及び５）の例であって、図６Ａとは異なる処理順序で処理した場合の例を示す図である。
【図７】書き戻し元アドレステーブルの例を示す図である。
【図８】更新手順書の例を示す図である。
【図９】更新状況の例を示す図である。
【図１０】情報機器における更新処理（復旧処理を含む）を説明するためのフローチャートである。
【図１１】ブロック単位より小さな単位での操作を可能にするための更新手順と書き戻しアドレステーブルの例を示す図である。
【発明を実施するための最良の形態】
【００１９】
本発明は、組込み機器分野でＮＯＲ型フラッシュメモリ等の不揮発性メモリに格納されているファームウェアについて、変更のあった差分データを書き換える際に更新中断が発生したときの復旧と不揮発性メモリ容量の節約の両方を実現する差分抽出・差分適用の方法および装置に関する。
【００２０】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【００２１】
＜前提条件＞
本発明の実施形態は、組込み機器で用いられる不揮発性メモリには、ブロック単位でしか消去できないという制限があるという前提で説明される。よって、ブロックを書き換える際、書き換え後のブロックのデータを揮発性のメモリ内に作った後、それを該当ブロックに書き込むという動作が実行される。
【００２２】
また、本実施形態では、次の４つのポリシーに基づいたファームウェアの更新について説明する。つまり、
第１のポリシー：バックアップ領域は最大１ブロックとすること、
第２のポリシー：バックアップ領域は各ブロックの書き換え終了時にクリアすること、
第３のポリシー：差分データは最後まで保存すること、
第４のポリシー：中断が対象データのブロック書き換え中であった場合は、該当ブロックを元に書き戻して更新再開すること、
である。なお、第４のポリシーは、図１のように書き換え対象ブロックの一部のデータが、書き換えのために必要な場合があるためである。以後この場合を自己参照と呼ぶこととする。図１は、第４のポリシーの必要性を示すための自己参照がある場合の例を示す図である。
【００２３】
＜ファームウェア更新システムの構成＞
図２は本発明の実施形態によるファームウェア更新システムの概略構成を示す図である。実施形態によるファームウェア更新システムは、管理装置１と、配布装置２と、少なくとも１つの情報機器３と、を備えている。
【００２４】
管理装置１は、ＣＰＵ１１Ａ及びメモリ１１Ｂを有する端末部１１と、通信ポート１２と、外部記憶装置１３と、を備えている。外部記憶装置１３は不揮発性メモリで構成され、差分抽出手段１３Ａと、転送手段１３Ｂと、旧データ格納部１３Ｃと、新データ格納部１３Ｄと、更新途中の不揮発性メモリの状態を常時保持するためのデータ（書き換え途中のデータの様子、つまりファームウェアの書き換え途中の状態を示すデータ）である中間データ格納部１３Ｅと、不揮発メモリの各ブロックのデータが未処理（０）か処理中(−１)か処理済(１)かを記録するための処理状況テーブル１３Ｆと、バックアップ必要性テーブル１３Ｇと、差分を抽出して配布すべきデータであるかを示す差分配布必要性テーブル１３Ｈと、差分データ格納部１３Ｉと、更新手順格納部１３Ｊと、書き戻し元アドレステーブル１３Ｋと、を備えている。
【００２５】
配布装置２は、ＣＰＵ２１Ａ及びメモリ２１Ｂを有する端末部２１と、通信ポート２２と、外部記憶装置２３と、を備えている。外部記憶装置２３は不揮発性メモリで構成され、転送手段２３Ａと、配布パッケージ２３Ｂと、を備えている。
【００２６】
情報機器３は、ＣＰＵ３１Ａ及びメモリ３１Ｂを有する端末部３１と、通信ポート３２と、外部記憶装置３３と、を備えている。外部記憶装置３３は不揮発性メモリで構成され、情報機器３の起動時に最初に実行されるブートブロック３３０１と、通常利用される通常ファームウェアブロック３３０２と、ファームウェアの更新時に利用される更新用ファームウェアブロック３３０３と、ファームウェア更新時に利用される差分データ保存ブロック３３０４と、ファームウェア更新時に利用されるバックアップブロック３３０５と、を備えている。
【００２７】
ブートブロック３３０１には、本装置起動時最初に実行されるブートローダ３３０１Ａと、次回起動時にロードするファームウェア（具体的には、次回に３３０２Ａと３３０３Ａのどちらを起動させるか）を識別する起動設定情報３３０１Ｂが格納されている。ブートローダ３３０１Ａは、起動後、通常ファームウェアブロック３３０２もしくは更新用ファームウェアブロック３３０３のいずれかを読み込む。いずれを読み込むかは、起動設定情報３３０１Ｂに従う。起動設定情報３３０１Ｂは、更新の必要性が生じた場合に、通常ファームウェアブロックから、更新用ファームウェアブロック３３０３に切り替えられ、更新が無事終了すると、通常ファームウェアブロックに戻される。なお、更新の必要性は、例えば、配布装置２から情報機器３に更新が指示された場合、若しくは、情報機器３が定期的に配布装置２にファームウェアのバージョンを確認し、新しいバージョンとなっていた場合に、更新必要と判断するようにすれば良い。
【００２８】
通常ファームウェアブロック３３０２には、通常基盤ソフトウェア３３０２Ａ及び通常応用ソフトウェア３３０２Ｂが保存される。
【００２９】
更新用ファームウェアブロック３３０３には、更新用基盤ソフトウェア３３０３Ａ及び更新プログラム（更新処理部）３３０３Ｂが保存される。
【００３０】
差分データ保存ブロック３３０４には、現在のファームウェアと新しいファームウェアの差分である差分データ３３０４Ａと、更新手順を記録する更新手順３３０４Ｂと、更新の中断から復旧する際、書き換え中のデータ領域にあった古いデータを書き戻す際に利用する書き戻し元アドレステーブル３３０４Ｃと、該更新手順の中のどの部分まで終了しているかを表す更新手順実行終了位置を記録するための更新状況３３０５Ｄとが保存される。
【００３１】
＜差分抽出処理の全体概要＞
図３は、管理装置１における差分抽出処理の全体を説明するためのフローチャートである。なお、差分抽出処理は、例えば、新しいファームウェアが管理装置１に入力されたときに実行される。また、ＣＰＵ１１Ａが差分抽出手段１３Ａを介して（両者が協働して）当該差分抽出処理を実行することになるが、以下では、差分抽出手段１３Ａを動作主体として説明する。
【００３２】
まず、差分抽出手段１３Ａは、次の書き換えブロック順序を決定する（ステップ２０１）。この書き換えブロック順序とは書き換えるべきブロックが複数ある場合の書き換えの順序を示す。例えば、不揮発性メモリが３つのブロックから構成されているとすると、１→２→３、２→３→１、・・・、３→２→１の順での書き換え処理について検討される。従って、ステップ２０１では、これら複数の書き換え順序のうち、当該ループではどの順序で検討するか決定される。
【００３３】
差分抽出手段１３Ａは、決定した順序に従い、次に処理対象のブロックを１つ進めて、処理状況テーブルを更新する（ステップ２０２）。例えば、２→３→１の順で処理している場合、前回ブロック２を処理したとすると、今回の処理対象をブロック３とされる。
【００３４】
次に、差分抽出手段１３Ａは、中間データを更新する（ステップ２０３）。ここで、中間データとは、更新途中の不揮発性メモリの状態を常時保持するためのデータである。つまり、ステップ２０３では、該当ブロックを新データから取得し、中間データにコピーされる（例えば、図６参照）。
【００３５】
また、差分抽出手段１３Ａは、該当ブロックデータについてバックアップの必要性調査を行なう（ステップ２０４）。さらに、差分抽出手段１３Ａは、該当ブロックデータについて差分配布の必要性調査を行なう（ステップ２０５）。バックアップ必要性調査及び差分配布必要性調査の処理の詳細は、図４及び５を用いてそれぞれ後述する。
【００３６】
続いて、差分抽出手段１３Ａは、全部ブロックを処理したか調べ、処理していない場合は、ステップ２０２に処理を移行させ、処理している場合は、ステップ２０７に処理を移行させる（ステップ２０６）。また、差分抽出手段１３Ａは、全ての書き換えブロック順序を処理したかどうか調べ、処理していない場合は、ステップ２０１に処理を移行させ、処理している場合は、ステップ２０８に処理を移行させる（ステップ２０７）。
【００３７】
そして、差分抽出手段１３Ａは、バックアップ領域と差分領域の容量の和が最小の書き換え順序を決定する（ステップ２０８）。例えば、バックアップ領域の容量については、バックアップ必要性テーブルの各レコードのうち最大値を取る。差分領域の容量については、差分必要性テーブルの各レコードの和を取る。この最大値と各レコードの和の合計値が最小となる書き換え順序を更新手順１３Ｊ内の書き換え順序に決定するが、合計値が同一の順序が複数ある場合は最初に計算した手順が選択されるようにする。
【００３８】
最後に、差分抽出手段１３Ａは、差分データ１３Ｉ、更新手順１３Ｊ、及び書き戻しアドレステーブル１３Ｋをパッケージ化する（ステップ２０９）。
【００３９】
＜バックアップ必要性調査処理の詳細＞
図４は、バックアップ必要性調査処理（ステップ２０４）の詳細を説明するためのフローチャートである。
【００４０】
まず、差分抽出手段１３Ａは、中間データ中の対象ブロックと、中間データ中のその他の各ブロックと比較し、一致するかチェックする。例えば、図６Ａの状態６Ａ−１のブロック１については、Ｃ（ブロック１）と、Ｂ（ブロック２）及びＡ（ブロック３）とを比較する。この場合、Ｃと一致するものがないため、バックアップの必要性はあると判断される。
【００４１】
一致するものがある場合（ステップ４０１でＹＥＳ）、バックアップの必要性が無いため、差分抽出手段１３Ａは、バックアップ必要性テーブルの該レコードに０を記述するとともに、書き換え中のファームウェアデータ中の一致するデータから復旧ができるように、書き戻し元アドレステーブルに記述する（ステップ４０２）。
【００４２】
一方、一致するものがない場合（ステップ４０１でＮＯ）、バックアップの必要性があるため、差分抽出手段１３Ａは、バックアップ必要性テーブルの該レコードにそのブロック数を表す１（本実施形態はブロック単位での書き換えを行う形態であるため）を記述するとともに、バックアップ領域からデータの復旧ができるように、書き戻し元アドレステーブルに記述する（ステップ４０３）。
【００４３】
＜差分配布必要性調査処理の詳細＞
図５は、差分配布必要性調査処理（ステップ２０５）の詳細を説明するためのフローチャートである。
【００４４】
差分抽出手段１３Ａは、新データ中の対象ブロックと、中間データ中の各ブロックを比較し、一致するか調べる（ステップ５０１）。例えば、図６Ａの状態６Ａ−１のブロック１については、Ｂ（新データのブロック１）と、Ｃ（中間データのブロック１）、Ｂ（中間データのブロック２）及びＡ（中間データのブロック３）と、を比較する。この場合、新データのブロック１のＢと一致するものが中間データのブロック２にあるため、差分配布の必要性なしと判断される。
【００４５】
一致するものがある場合（ステップ５０１でＹＥＳ）、差分配布の必要性が無いため、差分抽出手段１３Ａは、差分配布必要性テーブルの該レコードに０を記述するとともに、更新手順の該レコードに、旧データ中の一致するデータからのコピー命令を記述する（ステップ５０２）。
【００４６】
一方、一致するものが無い場合（ステップ５０１でＮＯ）、差分配布の必要性があるため、差分抽出手段１３Ａは、差分配布必要性テーブルの該レコードにそのブロック数を表す１を記述するとともに、配布した差分データからのコピー命令を記述する（ステップ５０３）。
【００４７】
＜状態遷移の具体例＞
図６は、中間データ更新処理（ステップ２０３）、バックアップ必要性調査処理（ステップ２０４及び図４）、及び差分配布必要性調査処理（ステップ２０５及び図５）を実行した場合の状態遷移例を示す図である。
【００４８】
図６Ａは、ステップ２０１において、ブロック１、ブロック２、ブロック３の処理順序とした場合で、状態６Ａ−１、６Ａ−２、６Ａ−３は、それぞれ、ブロック１についてのステップ２０５の処理直後の状態、ブロック２についてのステップ２０５の処理直後の状態、ブロック３についてのステップ２０５の処理直後の状態を表している。また、図６Ｂは、ブロック２、ブロック１、ブロック３の処理順序とした場合で、状態６Ｂ−１、６Ｂ−２、６Ｂ−３は、それぞれ、ブロック２についてステップ２０５の処理直後の状態、ブロック１についてのステップ２０５直後の状態、ブロック３についてのステップ２０５の処理直後の状態を表している。
【００４９】
なお、ブロックの処理順序として、１→２→３、１→３→２、３→１→２、３→２→１のいずれかの場合、図６に示されるように、バックアップが１、差分容量が１の合計２であるのに対し、２→１→３、または、２→３→１の場合、図６Ｂに示したように、バックアップが１、差分容量が２の合計３である。このため、前者のうち最初に処理した順序がステップ２０８で最適な更新順序として選ばれることになる。
【００５０】
本実施形態では、バックアップデータを、該当ブロック処理後消去するという前提であるが、仮にバックアップデータを、該当ブロック処理後消去せず、例えば上記２→１→３または２→３→１の場合でデータＢのバックアップをこれらの２つ目のブロックの処理後まで保持していた場合でも、必要なフラッシュメモリ容量は、バックアップが２、差分容量が１の合計３である。
【００５１】
＜書き戻し元アドレステーブルの例＞
図７は、図６Ａの例に対応する書き戻し元アドレステーブルの例を示す図である。書き戻し元アドレステーブルとは、更新中断が発生したときに旧データ若しくはバックアップ領域から書き換え途中のデータを元に戻すために用いられるテーブルである。なお、図６Ａの処理手順がブロック１→２→３であるため、図７の書き戻し元アドレステーブルでもブロック番号が１→２→３となっているが、処理手順が異なれば、ブロック番号の順序もそれによって異なってくる。
【００５２】
更新処理中断時に処理対象ブロックのデータ復旧を実現する際には、書き戻し元アドレステーブルにおける、当該処理対象のブロック番号に対応するレコードが参照される。
【００５３】
例えば、図７に示されるように、バックアップ領域のアドレスをＦｂｕｐ_ｓｔａｒｔ、ファームウェア領域（旧データ）の第ｎブロックのアドレスをＦｄａｔ_ｎ_ｓｔａｒｔ、差分データのアドレスをＦｄｌｔ_ｓｔａｒｔとしている。なお、データのサイズは、ここでは簡単のため、不揮発性メモリのイレースブロックサイズを表すｓｉｚｅに統一した。
【００５４】
図７では、第１レコードにはバックアップ領域から、第２レコードには書き換え中のファームウェアブロック中から、第３レコードにはバックアップ領域から書き戻すように記述されている。
【００５５】
＜更新手順書の例＞
図８は、図６Ａの例に対応する更新手順書の例を示す図である。図８において、処理手順番号は、行番号と一致する。図８の例では、第１手順は、ファームウェアブロックの第２ブロックの先頭からｓｉｚｅ分のデータをコピーする処理を実行させるための命令を示している。第２手順は、差分領域の先頭からｓｉｚｅ分のデータをコピーする処理を実行させるための命令を示している。第３手順は、ファームウェアブロックの第１ブロックの先頭からｓｉｚｅ分のデータをコピーする処理を実行させるための命令を示している。
【００５６】
＜更新状況の例＞
図９は、処理手順１が終了し、処理手順２に関してはバックアップ処理までが終わった場合の更新状況を示す更新状況テーブルの例を示す図である。
【００５７】
更新状況の管理方法には、図９Ａ及びＢに示す方法がある。つまり、例えば、図９Ａのようにファイルに更新手順の各手順の開始時に手順の番号を、バックアップ終了時にそれを表す文字ＢｕｐＥｎｄを記述し、更新処理終了時に終了を表す文字ＥＮＤをファイルに記述するか、若しくは、図９Ｂのように、バックアップ用ログ領域（Ｂ−１）と更新手順の各レコードの終了用のログ領域（Ｂ−２）に分ける方法である。
【００５８】
図９Ｂの場合、バックアップ用ログ（Ｂ−１）は、更新手順の各レコード開始時に０クリアしておき、バックアップ終了時に１を記述する。従って、バックアップ用ログ領域（Ｂ−１）には、現在更新処理中のブロックがバックアップ完了であることを示す「１」のみが表示されることになる。そして、更新状況用ログ（Ｂ−２）は、更新状況を記録するブロックを設け、最初はすべて０の状態から始め、処理が終われば、上位バイトから数えて該当する処理手順番号と一致する位置のバイトについて「０」が「１」に書き換えられる。
【００５９】
例えば、処理中断（例えば電源ＯＦＦ）が発生した場合、図９を見ると処理手順２の更新途中であったことが分かる。そして、更新手順（図８）の該当行（処理手順２）を参照し、処理先（コピー先或いは追加先）をチェックして処理対象のブロック番号を確認する。この場合、Ｆｄａｔ_２_ｓｔａｒｔなのでブロック２となっている。よって、書き戻し元アドレスは、図７を参照して、（Ｆｄａｔ_１_ｓｔａｒｔ  ｓｉｚｅ）であることが分かる。
【００６０】
＜更新処理の内容＞
図１０は、情報機器３において実行される、中断からの復旧処理を含めた更新処理を説明するためのフローチャートである。なお、ＣＰＵ３１Ａが更新プログラム３３０３Ｂを介して（両者が協働して更新処理部を構成する）当該更新処理を実行することになる。以下では、更新プログラム３３０３Ｂを動作主体として説明する。
【００６１】
まず、更新プログラム３３０３Ｂは、更新状況テーブル（図９）を参照して更新状況が全て空かどうか調べる（ステップ１１０１）。更新状況テーブルが空でなければ、処理はステップ１００２に進み、当該テーブルが空であれば、処理はステップ１００４に進む。なお、１つでも更新状況に関する情報が更新状況テーブルに含まれていれば、更新状況は空ではないと判断される。
【００６２】
更新状況が空であると判断された場合（ステップ１００１でＹＥＳ）、つまり、更新が中断された場合でないとき、更新プログラム３３０３Ｂは、更新手順書（図８）を参照して処理対象ブロックを確定する（ステップ１００４）。また、更新プログラム３３０３Ｂは、書き戻し元アドレステーブルの該処理番号（処理対象ブロック番号）のレコードを参照し、バックアップが必要なら行なう（ステップ１００５）。例えば、書き戻し元アドレスがＦｂｕｐで始まるものであればバックアップが必要であり、Ｆｄａｔで始まるものであればデータが旧データ中に存在するのでバックアップ領域にバックアップする必要はない。また、バックアップ処理途中で中断があった場合は、再度バックアップを取るだけであるので書き戻し処理は行われない。
【００６３】
そして、更新プログラム３３０３Ｂは、更新手順に従って、処理対象ブロックの処理を実行する（ステップ１００６）。さらに、更新プログラム３３０３Ｂは、更新手順の最終行か確認し、最終行であれば処理をステップ１００４に移行させ、最終行でなければ処理を終了する。
【００６４】
一方、更新状況が空でない場合、更新が中断した場合であるので、更新プログラム３３０３Ｂは、更新状況と書き戻し元アドレステーブルの該処理番号のレコードを参照し、書き戻しが必要なら行なう（ステップ１００２）。ここで「書き戻しが必要な場合」とは、バックアップ終了後更新手順書に従って更新処理中に中断が発生した場合を意味する。バックアップ処理中に中断が発生した場合は再度バックアップするだけなので「書き戻しが必要な場合」には該当しない。例えば、図９の更新状況の場合に中断が発生したとすると、処理手順２を実行しているときに中断発生したことになるので、更新手順書（図８）の処理手順２を参照する。処理手順２の処理（コピー）先を見ると、処理対象ブロックがブロック２であることが判明する。そして、書き戻し元アドレステーブル（図７）を参照するとＦｄａｔ_ｓｔａｒｔであるので、旧データのブロック１の先頭からサイズ分だけ当該処理対象のブロック２のデータを書き戻す処理が実行される。
【００６５】
ステップ１００２が終了すると、更新プログラム３３０３Ｂは、更新手順書（図８）を参照して処理対象ブロックを確定する（ステップ１００３）。その後、処理はステップ１００５に移行する。
【００６６】
なお、通常ファームウェアブロック３３０２からの起動時に、更新用ファームウェアブロック３３０３をマウントし、更新プログラム３３０３Ｂを実行してもよい。その場合でも、中断があった場合には、更新用ファームウェアブロック３３０３から起動させ、更新を再開することができる。
【００６７】
＜変形例＞
（１）上記実施形態では、処理単位をブロック単位としたが、更新手順と書き戻し元アドレステーブルの各レコードをカンマで区切り、複数のデータを並べることで、ブロック単位より小さな単位での操作を可能にすることができる。
【００６８】
図１１は、ブロック単位より小さな単位での操作を可能にするための更新手順と書き戻し元アドレステーブルの例を示す図である。
【００６９】
図１１Ａは、書き戻し処理時に、ブロックサイズの半分のデータをバックアップ領域の先頭から取得し、残りの半分のデータをブロック１の後ろ半分のデータより取得することを意味している。これにより１つのブロックのデータが分割されて複数の位置に退避している場合でも更新中断時に復旧できる。
【００７０】
また、図１１Ｂは、更新処理時に、ブロックサイズの半分のデータを差分ブロックの先頭から取得してブロック２の先頭から挿入し、ブロック１の前半部分のデータをブロック２の後半部分にコピーする処理を実行することを意味する。これにより１つのブロックのデータを、複数の位置のデータから書き換えることができるため、差分データのサイズを抑えることができる。
【００７１】
（２）図１０においては、ステップ１００２で中断からの再開、及び書き戻しと記述したが、ＲＡＭ上に復元しても良い。
【００７２】
（３）第１のポリシーについて、バックアップ容量が最大１ブロックの場合を示したが、これを１ブロック以上も可としても良い。
【００７３】
また、第２のポリシーについて、中断点から元のデータに戻すためのデータは、更新が完了するまでずっとバックアップ領域に保管していても良い。その際必要なデータ以外は削除してよい。
【００７４】
第３のポリシーについて、差分データは不要になった時点で削除しても良い。
さらに、第４のポリシーについて、自己参照がある場合のみ書き戻し処理を実行するようにしても良い。
【００７５】
＜まとめ＞
本実施形態において、管理装置は、旧データと新データから差分データを生成し、情報機器において旧ファームウェア及び差分データから新ファームウェアを生成するための更新処理を記述する更新手順書を生成し、情報機器における更新処理が中断した場合に更新処理途中のデータを更新処理開始前の状態に戻す処理（書き戻し処理）を実行するための情報を記述する書き戻し参照情報（書き戻し元アドレステーブル）を生成する。そして、情報機器はこのファームウェア更新用データに従って更新処理を実行する。このようにすることにより、情報機器において更新処理が中断され場合でも中断からの復旧をスムーズに実行でき、書き戻し処理により中断が発生したところから更新処理を再開することができるようになる。
【００７６】
また、管理装置は、複数のブロック（不揮発性メモリの分割ブロックに相当）を更新処理するための順番を示す処理順序を複数種類用意し、各処理順序について、旧ファームウェアから新ファームウェアに書き換え中の各ブロックの状態を示す中間データを生成する。そして、管理装置は、新ファームウェア及び前記中間データを用いてブロック単位でバックアップの必要性及び差分データ抽出の必要性をチェックする。また、管理装置は、バックアップの必要性及び差分データ抽出の必要性に関するチェック結果に基づいて、複数の処理順序の中でバックアップに必要な容量と差分データ格納に必要な容量の合計値が最小となる処理順序を特定する。この特定された処理順序が更新手順書に記述される。より具体的には、管理装置は、中間データ内において処理対象のブロックとそれ以外のブロックとを比較し、一致するか否かによって前記バックアップの必要性をチェックし、新ファームウェア内の処理対象のブロックと中間データの全ブロックとを比較し、一致するか否かによって差分データ抽出の必要性をチェックする。このように、中間データという概念を導入すると、バックアップの必要性及び差分データ抽出の必要性をチャックすることができるようになる。そして、これらの必要性が少ない処理順序を特定することにより、更新中断からの復旧処理を実行する際に必要なメモリ領域を小さくすることができる。よって、情報機器のコストを低減することができるようになる。
【００７７】
なお、管理装置は、書き戻し処理を実行する際のデータの参照位置及びサイズをブロックのサイズより小さい単位で指示して複数の位置から前記書き戻し処理のデータを取得できるように、書き戻し参照情報を記述するようにしてもよい。また、管理装置は、更新処理を実行する際のデータの参照位置及びサイズをブロックサイズより小さい単位で指示して複数の位置から更新処理のデータを取得できるように、更新手順書の更新手順を記述するようにしてもよい。このようにすることにより、１つのブロックのデータを複数の位置に保存されたデータから書き換えることができるようになり、差分データのサイズをさらに抑えることができるようになる。
【００７８】
一方、情報機器は、更新手順書の処理手順に対応させて、ブロック単位で、バックアップが終了したことを示す情報、及び更新処理が終了したことを示す情報を含む更新状況を管理する。このように更新状況を管理することにより、中断が発生した場合にどこのブロックまでどのような処理を実行していたか、どのブロックから復旧すれば良いか容易に把握することができ、スムーズに復旧処理に移行することができる。
【００７９】
また、情報機器は、処理中断が起こった場合、更新状況を確認してどの処理手順に従って処理していたときに中断が発生したか特定し、更新手順書を参照して特定された処理手順によって処理途中であったブロックを特定し、書き戻し参照情報を確認し、特定された処理途中のブロックについてデータ書き戻し処理を実行して当該ブロックを更新処理開始前の状態にする。このようにすることにより、書き戻し処理を行うべきブロックを容易に特定でき、どの領域から当該処理対象のブロックに対する書き戻し処理を実行すれば良いか容易に判断することができる。また、ファームウェア全体についてではなく、必要なブロックについてのみ更新処理開始前の状態にすれば良い。そして、バックアップデータや差分データ保存に使われる不揮発性メモリ容量の節約をしながら、更新中断時の復旧を実現することができるようになる。
【００８０】
なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【００８１】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【００８２】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ-ＲＷ、ＣＤ-Ｒ等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はＣＰＵやＭＰＵ)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【符号の説明】
【００８３】
１・・・管理装置
１１Ａ、２１Ａ、３１Ａ・・ＣＰＵ
１１Ｂ、２１Ｂ、３１Ｂ・・・メモリ
１２、２２、３２・・・通信ポート
１３、２３・・・外部記憶装置
３３・・・不揮発性メモリ
１３Ａ・・・差分抽出手段
１３Ｂ、２３Ａ・・・転送手段
１３Ｃ・・・旧データ
１３Ｄ・・・新データ
１３Ｅ・・・中間データ
１３Ｆ・・・処理状況テーブル
１３Ｇ・・・バックアップ必要性テーブル
１３Ｈ・・・差分配布必要性テーブル
１３Ｉ・・・差分データ
１３Ｊ・・・更新手順
１３Ｋ・・・書き戻し元アドレステーブル
２３Ｂ・・・配布パッケージ
３３０１・・・ブートブロック
３３０２・・・通常ファームウェアブロック
３３０３・・・更新用ファームウェアブロック
３３０４・・・差分データ保存ブロック
３３０５・・・バックアップブロック
３３０１Ａ・・・ブートローダ
３３０１Ｂ・・・起動設定
３３０２Ａ・・・通常基盤ソフトウェア
３３０２Ｂ・・・通常応用ソフトウェア
３３０３Ａ・・・更新用基盤ソフトウェア
３３０３Ｂ・・・更新プログラム
３３０４Ａ・・・差分データ
３３０４Ｂ・・・更新手順書
３３０４Ｃ・・・書き戻し元アドレステーブル
３３０４Ｄ・・・更新状況
【図１】
2011044087.tif 000003
【図２】
2011044087.tif 000004
【図３】
2011044087.tif 000005
【図４】
2011044087.tif 000006
【図５】
2011044087.tif 000007
【図６Ａ】
2011044087.tif 000008
【図６Ｂ】
2011044087.tif 000009
【図７】
2011044087.tif 000010
【図８】
2011044087.tif 000011
【図９】
2011044087.tif 000012
【図１０】
2011044087.tif 000013
【図１１】
2011044087.tif 000014