(57)【要約】【課題】ファームウェア保存用の不揮発性メモリ容量を小さく抑えながらも、更新中不具合に対応でき、更新に伴うシステム停止時間の短いファームウェア更新装置を提供する。【解決手段】更新に必要なデータを通常ファームウェアと緊急用ファームウェアの両方からアクセス可能な構成とし、更新の間次回ブート先を緊急用ファームウェアに設定しておく手段と、更新ファイルが元々占有していた領域に更新前のファイルを退避する手段と、緊急用ファームウェア起動中に通常ファームウェアのブートに必要なファイルが壊れていないことを検査するもしくは、仮想化環境により実際に起動が可能であることを確かめる手段と、退避した更新前ファイルと、更新手順から操作内容を反転させることで自動生成した新たな更新手順によって、更新前の状態に戻す手段と、更新手順に更新ファイルごとに必要な再起動の対象を記述しておく手段を備える。【選択図】図１
2010079440.tif 000002
【特許請求の範囲】
【請求項１】
ファームウェアを有し、このファームウェアを更新する機能を備えるファームウェア更新装置であって、
更新プログラムに従って、ファイル単位でファームウェアの更新処理を実行する演算処理部と、
一時的にデータを保存する揮発性メモリと、
持続的にデータを保存する不揮発性メモリと、を備え、
前記不揮発性メモリは、通常時に動作する通常ファームウェアと、この通常ファームウェア書き換え失敗時を含む緊急時に動作する緊急用ファームウェアと、を保持し、
前記緊急用ファームウェアは、前記通常ファームウェアよりサイズが小さく、前記更新プログラムを実行できる状態にする機能のみを有し、
前記演算処理部は、前記通常ファームウェアの更新処理をする場合には、前記更新処理の前に次回のブート先を前記緊急用ファームウェアに設定して前記更新処理を実行し、前記更新処理の後に次回ブート先を前記通常ファームウェアに設定することを特徴とするファームウェア更新装置。
【請求項２】
前記不揮発メモリは、更新前のファイルを一時的に格納するための一時退避領域と、更新ファイルを格納する更新データ領域と、を有し、
前記演算処理部は、更新前のファイルを前記一時退避領域に格納し、前記更新処理を実行した後、前記一時退避領域に格納した前記更新前のファイルを前記一時退避領域から削除すると共に、対応する前記更新ファイルと入れ替えて前記更新データ領域に格納することを特徴とする請求項１に記載のファームウェア更新装置。
【請求項３】
前記不揮発性メモリは、更新手順を記載した更新手順記載領域と、前記通常ファームウェアを構成する各ファイルについての更新状況を記載した更新状況記載領域と、を有し、
前記演算処理部は、前記更新手順に従って前記更新プログラムを実行し、更新のログを前記更新状況記載領域に記述することを特徴とする請求項１に記載のファームウェア更新装置。
【請求項４】
前記更新手順は、前記通常ファームウェアを構成する各ファイルについて、更新処理が完了した場合に再起動が必要か否かについての情報を含み、
前記演算処理部は、前記更新処理終了後に、再起動が必要とされるファイルについて再起動することを特徴とする請求項３に記載のファームウェア更新装置。
【請求項５】
前記演算処理部は、前記緊急用ファームウェアを起動した場合に、前記通常ファームウェアのブートに必要なファイルの破損の有無をチェックし、前記更新処理を実行した後に、次回ブート先を前記通常ファームウェアに設定することを特徴とする請求項１に記載のファームウェア更新装置。
【請求項６】
前記演算処理部は、前記緊急用ファームウェアを起動したとき、前記通常ファームウェアが起動可能か否かを判断し、起動可能な場合には、次回ブート先を前記通常ファームウェアに設定することを特徴とする請求項１に記載のファームウェア更新装置。
【請求項７】
前記演算処理部は、前記緊急用ファームウェアを起動したとき、前記通常ファームウェアが起動可能か否かを判断し、起動可能でない場合には、前記一時退避領域に格納された更新前のファイルを用いて前記通常ファームウェアを修復して起動可能な状態にしてから、次回ブート先を前記通常ファームウェアに設定することを特徴とする請求項２に記載のファームウェア更新装置。
【請求項８】
ファームウェアを組込んだ組込み装置において、前記ファームウェアを更新するファームウェア更新方法であって、
前記組込み装置は、更新プログラムに従って、ファイル単位でファームウェアの更新処理を実行する演算処理部と、一時的にデータを保存する揮発性メモリと、持続的にデータを保存する不揮発性メモリと、を備え、
前記不揮発性メモリは、通常時に動作する通常ファームウェアと、この通常ファームウェア書き換え失敗時を含む緊急時に動作する緊急用ファームウェアと、を保持し、
前記緊急用ファームウェアは、前記通常ファームウェアよりサイズが小さく、前記更新プログラムを実行できる状態にする機能のみを有し、
前記演算処理部が、前記通常ファームウェアの更新処理をする場合には、前記更新処理の前に次回のブート先を前記緊急用ファームウェアに設定して前記更新処理を実行し、前記更新処理の後に次回ブート先を前記通常ファームウェアに設定するステップを備えることを特徴とするファームウェア更新方法。
【請求項９】
前記不揮発メモリは、更新前のファイルを一時的に格納するための一時退避領域と、更新ファイルを格納する更新データ領域と、を有し、
前記演算処理部が、更新前のファイルを前記一時退避領域に格納し、前記更新処理を実行した後、前記一時退避領域に格納した前記更新前のファイルを前記一時退避領域から削除すると共に、対応する前記更新ファイルと入れ替えて前記更新データ領域に格納するステップを備えることを特徴とする請求項８に記載のファームウェア更新方法。
【請求項１０】
前記不揮発性メモリは、更新手順を記載した更新手順記載領域と、前記通常ファームウェアを構成する各ファイルについての更新状況を記載した更新状況記載領域と、を有し、
前記演算処理部が、前記更新手順に従って前記更新プログラムを実行し、更新のログを前記更新状況記載領域に記述するステップを備えることを特徴とする請求項８に記載のファームウェア更新方法。
【請求項１１】
前記更新手順は、前記通常ファームウェアを構成する各ファイルについて、更新処理が完了した場合に再起動が必要か否かについての情報を含み、
前記演算処理部が、前記更新処理終了後に、再起動が必要とされるファイルについて再起動するステップを備えることを特徴とする請求項１０に記載のファームウェア更新方法。
【請求項１２】
前記演算処理部が、前記緊急用ファームウェアを起動した場合に、前記通常ファームウェアのブートに必要なファイルの破損の有無をチェックし、前記更新処理を実行した後に、次回ブート先を前記通常ファームウェアに設定するステップを備えることを特徴とする請求項８に記載のファームウェア更新方法。
【請求項１３】
前記演算処理部が、前記緊急用ファームウェアを起動したとき、前記通常ファームウェアが起動可能か否かを判断し、起動可能な場合には、次回ブート先を前記通常ファームウェアに設定するステップを備えることを特徴とする請求項８に記載のファームウェア更新方法。
【請求項１４】
前記演算処理部が、前記緊急用ファームウェアを起動したとき、前記通常ファームウェアが起動可能か否かを判断し、起動可能でない場合には、前記一時退避領域に格納された更新前のファイルを用いて前記通常ファームウェアを修復して起動可能な状態にしてから、次回ブート先を前記通常ファームウェアに設定するステップを備えることを特徴とする請求項９に記載のファームウェア更新方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェア更新装置及び方法に関する。
【背景技術】
【０００２】
組込み装置をリリースした後、組み込み装置の不揮発性記憶メモリにあらかじめ記憶されている全てのデータ、例えばＯＳやアプリケーション（以下、「ファームウェア」という）に関して不具合が見つかった場合、当該ファームウェアを不具合を解決したファームウェアに書き換えることによって、不具合を解決するという方法が従来から一般に行われている。
【０００３】
例えば、特許文献１には、新しいファームウェアと現在のファームウェアの２つのバージョンを保有するという２面構成を採用するシステムが開示されている。ここでは、新しいファームウェアと現在のファームウェアは外部のコンソールにより、手動で切り替えることができるようになっている。特許文献１によれば、更新途中で電源が落ちたり、想定外の操作をしてしまうなど更新中不具合があり、更新が途中で終了してしまった場合でも、外部のコンソールから更新を初めからやり直すことで、更新を完了させることができる。また、更新状況を管理しておけば、初めからではなく不具合発生時点から更新を再開することも可能である。さらに、新しいファームウェアから前のバージョンのファームウェアに切り替えることで、システムを起動することができる。つまり、更新中不具合が発生しても更新を再開できたり、前のバージョンに戻すことができるという利点がある。
【０００４】
【特許文献１】特開平１１−１１０２１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に開示されたファームウェア更新装置は２面構成を採用しているため、バックアップを持たないものに比べてファームウェア容量が２倍要り、装置の開発コストが高くなるという欠点がある。また、ブートができない状態に陥った場合、それを直すために、必ず外部コンソールが必要であり、一般ユーザが自分で簡単に修正することができない。
【０００６】
さらに、該装置では、装置を停止させてファームウェアの更新を行うため、更新後の起動処理を行う必要がある。装置を停止させずにファームウェアを書き換える他のファームウェア更新装置でも、書き換えた後、必ず装置の再起動を必要とする。このように常に再起動を必要とするとファームウェア更新処理に時間が掛かってしまう。
【０００７】
本発明はこのような状況に鑑みてなされたものであり、更新中不具合時に更新の再開が可能であり、前のバージョンに戻すことができるという従来の２面構成と同等の耐障害性を有しつつも、ファームウェア保存用の不揮発性メモリを節約でき、ブート失敗によるシステム停止を防ぐことができ、かつ必ずしも再起動を必要としないファームウェア更新処理を提供するものである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明は、ファームウェアを有し、このファームウェアを更新する機能を備えるファームウェア更新装置であって、更新プログラムに従って、ファイル単位でファームウェアの更新処理を実行する演算処理部と、一時的にデータを保存する揮発性メモリと、持続的にデータを保存する不揮発性メモリと、を備える。そして、不揮発性メモリは、通常時に動作する通常ファームウェアと、この通常ファームウェア書き換え失敗時を含む緊急時に動作する緊急用ファームウェアと、を保持する。ここで、緊急用ファームウェアは、通常ファームウェアよりサイズが小さく、更新プログラムを実行できる状態にする機能のみを有する。そして、演算処理部は、通常ファームウェアの更新処理をする場合には、更新処理の前に次回のブート先を緊急用ファームウェアに設定して更新処理を実行し、更新処理の後に次回ブート先を通常ファームウェアに設定するようにしている。
【０００９】
また、不揮発メモリは、更新前のファイルを一時的に格納するための一時退避領域と、更新ファイルを格納する更新データ領域と、を有する。この場合、演算処理部は、更新前のファイルを一時退避領域に格納し、更新処理を実行した後、一時退避領域に格納した更新前のファイルを一時退避領域から削除すると共に、対応する更新ファイルと入れ替えて更新データ領域に格納するようにする。なお、一時退避領域の容量は、通常ファームウェアを構成する複数のファイルのうち最大サイズのファイルの容量に設定されている。
【００１０】
さらに、不揮発性メモリは、更新手順を記載した更新手順記載領域と、通常ファームウェアを構成する各ファイルについての更新状況を記載した更新状況記載領域と、を有している。この場合、演算処理部は、更新手順に従って更新プログラムを実行し、更新のログを更新状況記載領域に記述する。ここで、更新手順は、さらに、通常ファームウェアを構成する各ファイルについて、更新処理が完了した場合に再起動が必要か否かについての情報を含んでいる。この場合、演算処理部は、更新処理終了後に、再起動が必要とされるファイルについて再起動する。
【００１１】
演算処理部は、緊急用ファームウェアを起動した場合に、通常ファームウェアのブートに必要なファイルの破損の有無をチェックし、更新処理を実行した後に、次回ブート先を通常ファームウェアに設定する。
【００１２】
また、演算処理部は、緊急用ファームウェアを起動したとき、通常ファームウェアが起動可能か否かを判断し、起動可能な場合には、次回ブート先を通常ファームウェアに設定する。一方、起動可能でない場合には、一時退避領域に格納された更新前のファイルを用いて前記通常ファームウェアを修復して起動可能な状態にしてから、次回ブート先を前記通常ファームウェアに設定する。
【００１３】
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００１４】
本発明によれば、ファームウェア更新において、ファームウェア保存用の不揮発性メモリの容量を節約しながらも、更新中不具合時の更新再開と前のバージョンへの戻すことができるという従来の２面構成と同等の信頼性を保つことができる。また、ブート失敗によるシステム停止を防ぐことができる。また、再起動によるシステム停止時間を必要最小限に留めることができる。
【発明を実施するための最良の形態】
【００１５】
本発明は、ファームウェアを格納するフラッシュメモリの容量を削減しながらも、更新中の不具合にも対応できるなどの耐障害性を有するファームウェア更新装置に関するものである。
【００１６】
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。
【００１７】
＜組込み装置（ファームウェア更新装置）の構成＞
図１は本発明の実施形態による組込み装置の概略構成を示す図である。本発明において、この組込み装置として想定しているものは例えばＴＶなどの家電機器である。
【００１８】
組込み装置１は、ＭＰＵ（ＣＰＵ）１１と、ＲＡＭ１２と、ＦＲＯＭ１３と、入力装置１４と、表示装置１５と、通信装置１６と、それぞれを接続するバス１７と、で構成されている。
【００１９】
ＦＲＯＭ１３はファームウェアを保持している不揮発性メモリである。ＦＲＯＭ１３は、組込み装置１の起動時に最初に実行されるブートブロック１３０１と、組込み装置１に不具合のない通常状態で利用される通常ファームウェアブロック１３０２と、組込み装置１に不具合のあった場合に緊急に利用される緊急用ファームウェアブロック１３０３と、ファームウェア更新時に利用される更新プログラム保存ブロック１３０４と、ファームウェア更新時に利用される更新データ保存ブロック１３０５と、更新ファイルを一時的に格納する更新ファイル一時退避ブロック１３０６と、によって構成されている。
【００２０】
ブートブロック１３０１には、本装置起動時最初に実行され、起動時に設定（指定）したファームウェアから起動させるためのソフトウェアであるブートローダ１３０１Ａが保存されている。ブートローダは、起動後、通常ファームウェアブロック１３０２もしくは緊急用ファームウェアブロック１３０３のいずれかを読み込む。ブートローダ１３０１Ａには、通常ファームウェアブロック１３０２及び緊急用ファームウェアブロック１３０３のいずれから起動するか、あらかじめ次回ブート先がＭＰＵ１１によって登録される。
【００２１】
通常ファームウェアブロック１３０２には、通常基盤ソフトウェア（ＯＳ）１３０２Ａと通常応用ソフトウェア１３０２Ｂが保存されている。
【００２２】
緊急用ファームウェアブロック１３０３には、最低限の機能のみ有し、通常基盤ソフトウェア１３０２Ａに比べてサイズを小さく抑えた緊急用基盤ソフトウェア１３０３Ａが保存される。つまり、緊急用基盤ソフトウェア１３０３Ａは、更新プログラム保存ブロック１３０４と更新データ保存ブロック１３０５と通常ファームウェアブロック１３０２とをＲＡＭにマウントして呼び出すだけの機能、即ち更新したプログラムを走らせることができる状態にする機能のみを備えている。従来とは異なり、通常基盤ソフトウェアと同じものを備えている必要はない。
【００２３】
更新プログラム保存ブロック１３０４には、通常基盤ソフトウェア１３０２Ａと通常応用ソフトウェア１３０２Ｂを更新する際に用いる更新プログラムが保存されている。
【００２４】
更新データ保存ブロック１３０５には、新しいファームウェアに更新するための、現在のファームウェアと新しいファームウェアのファイル単位の差分データである更新データ１３０５Ａと、更新手順（どのような手順及び操作で更新を実行するか）を記録する更新手順１３０５Ｂと、実行中の更新手順を指定する更新手順格納パスと該更新手順の中のどの部分まで終了しているかを表す更新手順実行終了位置とを記録するための更新状況（ｌｏｇ  ｆｉｌｅ）１３０５Ｃと、が保存されている。従来ではイメージ（バイナリデータの塊）単位で更新していたのに対し、本発明ではファイル単位での更新を行っている。
【００２５】
＜通常ファームウェアの動作＞
図２は、本発明の実施形態による通常ファームウェアブロック１３０２の起動直後の動作を説明するためのフローチャートである。
【００２６】
最初に、ＭＰＵ１１は、ファームウェア更新処理が途中であるか否かについて判定する（ステップＳ２０１）。これは、更新状況１３０５Ｃの中の更新手順格納パスがＮＵＬＬか否かで判定する。更新途中である場合はＮＵＬＬではなく、更新途中でない場合はＮＵＬＬとなっている。更新途中と判定された場合、処理はステップ２０７に進み、更新途中でないと判定された場合、処理はステップＳ２０２に移行する。
【００２７】
ステップＳ２０２において、ＭＰＵ１１は、ファームウェア更新を行うかどうか判定する。例えば、ＭＰＵ１１が入力装置１４と表示装置１５を利用して、組込み装置１のユーザに問い合わせるか、もしくは更新データ１３０５Ａに更新を新規に行うのか、既に更新が正常終了したのかを示すフラグを保有しておき、それを参照するようにする。更新しない場合には、処理はステップＳ２０３に移行し、ＭＰＵ１１は通常の起動手順を実行し（ステップ２０３）、処理を終了する。
【００２８】
ファームウェアを更新する場合には、ＭＰＵ１１は、その更新が順方向か逆方向かを判定する（ステップ２０４）。これは例えば、ＭＰＵ１１が、組込み装置１のユーザに入力装置１４と表示装置１５を利用して問い合わせることにより実現される。順方向である場合、処理はステップＳ２０５に移行し、ＭＰＵ１１が更新状況１３０５Ｃに更新手順書１３０５Ｂの格納位置を設定する（ステップＳ２０５）。一方、逆方向である場合、処理はステップＳ２０６に移行し、ＭＰＵ１１が更新手順書１３０５Ｂを元に逆方向の更新手順書を生成し、更新状況１３０５Ｃに更新手順書１３０５Ｂの格納位置を設定する（ステップＳ２０６）。
【００２９】
続いて、ＭＰＵ１１は、ブートローダに対し、次回ブート先を緊急用ファームウェアブロックに設定する（ステップ２０７）。これは、ファームウェアが更新途中になっているので、その先の更新を可能にするための処理である。例えば、通常基盤ソフトウェア１３０２Ａを書き換えている途中で電源が落ちてしまったような場合、ユーザは通常基盤ソフトウェアを起動することできず、メーカが回収しなければならなくなるからである。よって、このような場合には、緊急用ファームウェアを用いて更新プログラムを実行するようにしている。次回立ち上がるときは緊急用ファームウェアブロックから立ち上がるので、処理としては図３（ａ）又は（ｂ）の処理が実行されることになる。
【００３０】
そして、ＭＰＵ１１は、ファームウェアの更新処理を行進手順書に基づいて実行する（ステップＳ２０８）。更新処理の詳細は図４でさらに説明する。
【００３１】
次に、ＭＰＵ１１は、ブートローダに対し、次回ブート先を通常ファームウェアブロックに設定する（ステップＳ２０９）。
【００３２】
さらに、ＭＰＵ１１は、更新したファイルについて再起動が必要かどうかを更新手順書で判定する（ステップＳ２１０）。必要な場合は、ＭＰＵ１１は、更新手順書に従って必要なコンポーネントに対し再起動し（ステップＳ２１１）、終了する。２面構成の場合には更新した場合には必ず再起動が必要であったが、本発明の場合には正常に更新が完了すれば再起動は不要であり、異常（更新途中で電源が落ちた等）があった場合に再起動が必要となるだけである（ＯＳの書き換えに関しては書き換えの対象によっては正常に更新が終了しても再起動が必要な場合はある）。
【００３３】
なお、更新手順書は、例えば、更新前の現バージョン、更新後の新バージョン、更新内容からなり、更新内容は対象ファイルごとに操作内容、対象ファイル、再起動が必要な対象を表す再起動対象からなる。更新対象とは例えば、サービス単位での更新で済む場合はそのサービスを指定し、システム全体を再起動する必要がある場合は、システム全体を指定する。ステップＳ２０６の逆方向の更新手順書の生成について、例えば、ファイルの生成については削除、削除については生成に変更する。
【００３４】
＜緊急用ファームウェアブロックの動作＞
緊急用ファームウェア風呂奥の起動後の動作としては、例えば、図３（ａ）及び（ｂ）に示されるように２種類考えられる。
【００３５】
１）図３（ａ）は、緊急用ファームウェアブロックの起動直後の動作であり、通常ファームウェアが少なくとも修正すれば起動可能であった場合の動作を説明するためのフローチャートである。
【００３６】
最初に、ＭＰＵ１１は、ファームウェア更新処理が途中であるか否かについて判定する（ステップＳ３０１）。これは、前述と同様に、更新状況１３０５Ｃの中の更新手順格納パスがＮＵＬＬか否かで判定する。更新途中である場合はＮＵＬＬではなく、更新途中でない場合はＮＵＬＬである。更新途中と判定された場合、処理はステップＳ３０３に進む。更新途中でないと判定された場合、処理はステップＳ３０２に移行し、ＭＰＵ１１は通常の起動手順を実行し（ステップ３０２）、処理を終了する。
【００３７】
ステップＳ３０３において、ＭＰＵ１１は、通常ファームウェアブロックをＲＡＭ１２にマウントする。図３（ａ）は通常ファームウェアから起動する場合に係るからである。
【００３８】
そして、ＭＰＵ１１は、通常ファームウェアブロックに欠陥があるか否か検査し、そのままで起動可能か判定する（ステップＳ３０４）。起動できないと判断された場合、処理はステップＳ３０５に移行し、ＭＰＵ１１は通常ファームウェアブロックを更新前の状態に戻して、起動可能にする（ステップＳ３０５）。例えば、更新前のファイルを更新ファイル一時退避ブロック１３０６に格納した後、更新処理している途中で電源が落ちてしまったような場合には、この更新ファイル一時退避ブロック１３０６から更新前のファイルを取り出して更新前の状態に戻す、といった処理である。一方、起動可能と判断された場合、処理はステップＳ３０６に移行する。
【００３９】
続いて、ＭＰＵ１１は、次回ブート先を通常ファームウェアに設定し（ステップＳ３０６）、再起動する（ステップＳ３０７）。緊急用ファームウェアから立ち上がった場合には必ず再起動することになる。
【００４０】
２）図３（ｂ）は、緊急用ファームウェアブロックの起動直後の動作であり、通常ファームウェア風呂奥が起動可能でない場合の動作を説明するためのフローチャートである。図３（ｂ）の方が基本となる動作を示している。
【００４１】
最初に、ＭＰＵ１１は、ファームウェア更新処理が途中であるか否かについて判定する（ステップ３１１）。更新途中であるか否かの判断については上述した通りである。更新途中と判定された場合、処理はステップＳ３１３に進む。更新途中でないと判定された場合は、ＭＰＵ１１は、通常の起動手順を実行し（ステップ３１２）、処理を終了する。
【００４２】
ステップＳ３１３では、ＭＰＵ１１は、通常ファームウェアブロックをＲＡＭ１２にマウントする。
【００４３】
そして、ＭＰＵ１１は、更新処理を実行する（ステップＳ３１４）。また、ＭＰＵ１１は、次回ブート先を通常ファームウェアに設定し（ステップＳ３１５）、再起動する（ステップＳ３１６）。
【００４４】
なお、ステップＳ３１４では、ブートに必要なファイルの破損状況を確認することでブート可能かどうかを判定しているが、その代わりもしくはそれに加え、緊急用ファームウェア領域内に備えた、ＯＳ上で別のＯＳを動作させることのできる仮想化環境により、通常ファームウェアの起動が可能であることを実際に確かめても良い。
【００４５】
＜ファームウェアの更新処理＞
図４は、ファームウェアの更新処理の詳細について説明するためのフローチャートである。
【００４６】
まず、ＭＰＵ１１は、前回の更新処理において破損ファイルがあれば破棄する（ステップＳ４０１）。これは、例えば、更新途中で電源が落ちてしまったような場合には更新処理によって生成されたファイルに破損ファイル（途中までしか更新されていないファイル）が含まれている場合がある。このような破損ファイルを破棄するのがステップＳ４０１の処理である。ファイル単位で更新処理が行われ、どのファイルまで更新処理が完了しているかは更新状況１３０５Ｃを見れば分かるので更新途中のファイルが検出できる。
【００４７】
次に、ＭＰＵ１１は、更新手順１３０５Ｂと更新状況１３０５Ｃを基に更新開始位置を判定し（ステップＳ４０２）、更新対象ファイルの複製を更新ファイル一時退避ブロック１３０６に退避する（ステップＳ４０３）。
【００４８】
そして、ＭＰＵ１１は、更新手順１３０５Ｂに従って、更新対象ファイルを更新する（ステップＳ４０４）。
【００４９】
続いて、ＭＰＵ１１は、更新データ１３０５Ａの中の該当更新ファイル（更新ファイルＡ、Ｂ、・・・）を削除し、代わりに更新ファイル一時退避ブロック１３０６に格納されていた退避ファイル（更新前のファイル）を更新データ１３０５Ａに移動する（ステップ４０５）。従来は単純にバックアップ領域が存在し、該バックアップ領域に更新前のファイルを格納していたが、本発明でステップＳ４０５のようにすることで、ファームウェア容量を節約することができる。なお、更新ファイル一時退避ブロック１３０６の容量は、あらかじめ組込み装置１の最大ファイルサイズに決定されている。
【００５０】
さらに、ＭＰＵ１１は、ステップＳ４０４の更新処理中に不具合があったかどうか判定をし（ステップ４０６）、不具合があったと判断された場合、処理はステップＳ４０７に移行し、不具合がなかったと判断された場合、処理はステップＳ４０８に移行する。
【００５１】
ステップＳ４０７では、ＭＰＵ１１は、基盤ソフトウェア（通常又は緊急基盤ソフトウェア）を再起動し、図２又は図３の処理を最初から開始する。一方、ステップＳ４０８では、ＭＰＵ１１は、全てのファイルについて更新処理が完了したか否か調べる。何れかのファイルについて更新済みで無い場合は、処理はステップＳ４０３に戻り、全ファイル更新済みである場合は、処理はステップＳ４０９に移行する。ステップＳ４０９では、ＭＰＵ１１は、更新状況１３０５Ｃを初期化し、更新処理が終了する。更新処理が終了した場合には、処理は、図２のステップＳ２０９又は図３（ｂ）のステップＳ３１５に移行する。
【００５２】
なお、ステップＳ４０３からステップＳ４０５の処理に関しては、更新ファイル一時退避ブロック１３０６に更新後のファイルを格納し、その後、更新データ中の該当ファイルを削除し、代わりに更新前のファイルを更新データ保存領域へ移動し、更新後ファイルを通常ファームウェアブロックに移動しても良い。
【００５３】
＜まとめ＞
本発明の実施形態では、不揮発性メモリ内に、ファームウェアを読み込むためのブートローダ、通常動作する通常ファームウェアと通常ファームウェア書き換え失敗時など緊急時に動作する緊急用ファームウェア、両ファームウェアからアクセス可能な更新プログラム、通常ファームウェアのうち変更のあるファイルのみで構成される更新データ、更新方法を記した更新手順、更新途中経過を記録する更新状況、ファイル更新中にその前のファイルまたは更新後のファイルを一時的に格納する更新ファイル一時退避領域を保有する。そして、更新データを通常ファームウェアのうち変更のあるファイルのみで構成することと、更新ファイル一時退避領域をあらかじめ決めた最大ファイルサイズの容量にすること、更新前のファイルを該ファイル更新後に更新後ファイルが占有していた領域に格納することで、不揮発性メモリ容量を小さく抑える。
【００５４】
また、通常ファームウェアと緊急用の両方から更新に必要なデータにアクセス可能な構成と、更新の直前に次回ブート先を緊急用ファームウェアに設定し、更新終了直後に次回ブート先を通常ファームウェアに設定する。これにより、更新中の不具合発生時に、不具合発生時点から更新を再開することができ、退避した更新前ファイルと、更新手順から操作内容を反転させることで自動生成した新たな更新手順によって、更新前の状態に戻すことができるようになっている。
【００５５】
さらに、緊急用ファームウェア起動中に通常ファームウェアのブートに必要なファイルの破損がないかを検査するようにしている。これにより、その後の通常ファームウェア起動時に起動失敗に陥りシステムが停止してしまうことを回避することができる。
【００５６】
また、緊急用ファームウェア起動中に緊急用ファームウェア領域内に備えた、ＯＳ内で別のＯＳを動作させることのできる仮想化環境を用意し、通常ファームウェアの起動が可能であることを実際に確かめる。これにより、その後の通常ファームウェア起動時に起動失敗に陥りシステムが停止してしまうことを回避することができるようになる。
【００５７】
また、稼働中の通常ファームウェアから書き換え、かつ、更新手順に、更新ファイルごとに必要な再起動の対象として、システム全体またはあるサービスまたは一切再起動が必要がないことを記述しておく。これにより、システムの停止時間を必要最小限に抑えることができるようになる。
【００５８】
なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【００５９】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【００６０】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶手段又はＣＤ-ＲＷ、ＣＤ-Ｒ等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はＣＰＵやＭＰＵ)が当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【図面の簡単な説明】
【００６１】
【図１】本発明の実施形態における組込み装置の概略構成を示す図である。
【図２】通常ファームウェアブロックの起動直後の動作を説明するためのフローチャートである。
【図３ａ】緊急用ファームウェアブロックの起動直後の動作を説明するためのフローチャート（１）である。
【図３ｂ】緊急用ファームウェアブロックの起動直後の動作を説明するためのフローチャート（２）である。
【図４】ファームウェアの更新処理の詳細動作を説明するためのフローチャートである。
【符号の説明】
【００６２】
１・・・組込み装置
１１・・ＭＰＵ
１２・・・ＲＡＭ
１３・・・ＦＲＯＭ
１４・・・入力装置
１５・・・表示装置
１６・・・通信装置
１３０１・・・ブートブロック
１３０１・・・通常ファームウェアブロック
１３０２・・・更新ファームウェアブロック
１３０３・・・緊急用ファームウェアブロック
１３０４・・・更新プログラム保存ブロック
１３０５・・・更新データ保存ブロック
１３０６・・・更新ファイル一時退避ブロック
１３０１Ａ・・・ブートローダ
１３０２Ａ・・・通常基盤ソフトウェア
１３０２Ｂ・・・通常応用ソフトウェア
１３０３Ａ・・・緊急用基盤ソフトウェア
１３０４Ａ・・・更新プログラム
１３０５Ａ・・・更新データ
１３０５Ｂ・・・更新手順書
１３０５Ｃ・・・更新状況
【図１】
2010079440.tif 000003
【図２】
2010079440.tif 000004
【図３ａ】
2010079440.tif 000005
【図３ｂ】
2010079440.tif 000006
【図４】
2010079440.tif 000007