(57)【要約】【課題】デバッグや市場での調査など、情報収集を目的とした場合などに、ファームウェア等のプログラム一時的な変更を加えたい場合における、プログラム変更・復元のための時間を短縮すること。【解決手段】情報処理装置１１０のプログラム書換え機能部４００は、第１記憶手段（ＲＯＭ２０４）から読み出されて第２記憶手段（ＲＡＭ２０２）に展開されたプログラム（ファームウェア）を、該プログラムの中の第１のモジュール（対象モジュール）の実行をするようプログラムされた箇所で、前記第１のモジュールの実行前に第２のモジュール（変更モジュール）を実行するよう書換えるよう制御する。【選択図】図６
2010257103.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを記憶する第１記憶手段と、
前記第１記憶手段から読み出されて展開されたプログラムを格納する第２記憶手段と、
前記第２記憶手段に記憶されたプログラムを書換える書換え手段とを有し、
前記プログラムは、第１のモジュールの実行をするようプログラムされており、
前記書換え手段は、前記プログラムの中の前記第１のモジュールの実行が指示された箇所で、前記第１のモジュールの実行前に第２のモジュールを実行するよう前記プログラムを書換えるよう制御する制御手段を有することを特徴とする情報処理装置。
【請求項２】
前記制御手段は、前記プログラムの中の前記第１のモジュールの実行が指示された箇所で、前記第１のモジュールの代わりに第２のモジュールを実行し、前記第２のモジュールの中で前記第１のモジュールの実行をするよう前記プログラムを書換えるよう制御することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記第２のモジュールは、前記第１記憶手段に記憶されており、前記第２記憶手段に展開されることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
外部記憶装置を接続する接続手段を有し、
前記第２のモジュールは、前記外部記憶装置に記憶されるものであり、
前記書換え手段は、前記外部記憶装置から前記第２のモジュールを読み出して前記第２記憶手段に展開する展開手段を有することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項５】
外部記憶装置を接続する接続手段を有し、
前記外部記憶装置には、前記第１のモジュールと前記第２のモジュールを指定する情報を含む書換え設定データが記憶されており、
前記制御手段は、前記外部記憶装置に記憶される前記書換え設定データに従って、前記プログラムを書換えるよう制御することを特徴とする請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記書換える書換え手段は、操作手段からの指示に応じて、前記第２記憶手段に記憶されたプログラムを書換えることを特徴とする請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記書換える書換え手段は、当該情報処理装置が起動された際に前記外部記憶装置に前記書換え設定データが記憶されていることに応じて、前記第２記憶手段に記憶されたプログラムを書換えることを特徴とする請求項５に記載の情報処理装置。
【請求項８】
前記第２のモジュールは、デバッグ作業時に使用する情報出力用モジュールであることを特徴とする請求項１乃至７のいずれか１項に記載の情報処理装置。
【請求項９】
プログラムを記憶する第１記憶手段と、前記第１記憶手段から読み出されて展開されたプログラムを格納する第２記憶手段とを有する情報処理装置のプログラムを書換え方法であって、
書換え手段が、前記第２記憶手段に記憶されたプログラムを書換える書換えステップを有し、
前記プログラムは、第１のモジュールの実行をするようプログラムされており、
前記書換えステップでは、前記プログラムの中の前記第１のモジュールの実行が指示された箇所で、前記第１のモジュールの実行前に第２のモジュールを実行するよう前記プログラムを書換えるよう制御する制御ステップを有することを特徴とする情報処理装置のプログラムを書換え方法。
【請求項１０】
請求項１乃至８のいずれか１項に記載された情報処理装置の各手段としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファームウェアの書き換え技術に関し、特にファームウェアの変更が一部である場合、若しくは一時的である場合に好適なファームウェア書き換え技術に関する。
【背景技術】
【０００２】
組込み機器におけるファームウェア書換え方法として、以下のようなものがある。
メモリ領域を二つに分割し、一方のメモリ領域にシステム立ち上げプログラム及びファーム書換えプログラムを格納し、もう一方のメモリ領域にファームウェア本体を格納する。そして、ファームウェアを書換える際には、ファームウェア本体が格納された領域のファームウェア全体を書換える。
【０００３】
しかしながら、この方法ではファームウェア全体を書換えるため、ファームウェアのダウンロードや書換えの処理に時間がかかってしまう。そこで、ファームウェア更新時間の短縮のため、ファームウェア格納領域を複数に分割し、変更が必要な領域のみを書換える方法が考案されている（特許文献１）。
【０００４】
このファームウェア書換え方法では、ファームウェア全てを書換える方法に比べ、短時間でファームウェアの書換えが可能である。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００２−３４２１００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、デバッグや市場での調査など、情報収集を目的とし、プログラム修正の必要が一時的である場合、従来の方法では、ファームウェアを書換えた後、再び元の状態に戻すため、再度ファームウェアの書換えを行う必要が生じる。そのため、ファームウェアの変更・復元のための工数が増加してしまうという課題がある。
【０００７】
本発明は、上記の問題点を解決するためになされたものである。本発明の目的は、ファームウェア等のプログラムに一時的な変更を加えたい場合における、プログラム変更・復元のための時間を短縮する仕組みを提供することである。
【課題を解決するための手段】
【０００８】
本発明は、プログラムを記憶する第１記憶手段と、前記第１記憶手段から読み出されて展開されたプログラムを格納する第２記憶手段と、前記第２記憶手段に記憶されたプログラムを書換える書換え手段とを有し、前記プログラムは、第１のモジュールの実行をするようプログラムされており、前記書換え手段は、前記プログラムの中の前記第１のモジュールの実行が指示された箇所で、前記第１のモジュールの実行前に第２のモジュールを実行するよう前記プログラムを書換えるよう制御する制御手段を有することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、ファームウェア等のプログラムに一時的な変更を加えたい場合における、プログラム変更・復元のための時間を短縮することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施例１に係る情報処理装置を含むシステムの外観図である
【図２】図１の情報処理装置１１０の詳細構成を示すブロック図である
【図３】図２の操作部１１２の詳細構成を示すブロック図である。
【図４】実施例１における書換え設定データの例を示す図である
【図５】実施例１におけるプログラム書換え機能部のソフト構成図である
【図６】実施例１におけるプログラム書換え処理の流れを示すフローチャートである。
【図７】実施例１におけるプログラム書換え処理前後のプログラム構造図である。
【図８】プログラム書換え前後のモジュールＡ実行時におけるシーケンス図である。
【図９】書換え後にモジュールＡの処理が実行された場合のLog_fileを示す図である。
【図１０】実施例２における書換え設定データの例である
【図１１】実施例２におけるプログラム書換え機能部のソフト構成図である
【図１２】実施例２における情報処理装置１１０の起動時のシーケンス図
【図１３】実施例２におけるプログラム書換え処理を示すフローチャートである。
【図１４】実施例２におけるプログラム書換え処理前後のプログラム構造図である。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を用いて説明する。
【実施例１】
【００１２】
図１は、本発明の実施例１に係る情報処理装置を含むシステムの外観図である。
図１において、１１０は情報処理装置である。情報処理装置１１０は、画像の入出力と送受信及び各種の画像処理を行う複合機（ＭＦＰ；Multi Function Peripheral）である。
情報処理装置１１０は、図２に示すように、画像入力デバイスであるスキャナ１１３、画像出力デバイスであるプリンタ１１４、コントロールユニット１１１、ユーザインタフェースである操作部１１２を備える。
【００１３】
１２０は外部記憶装置である。外部記憶装置１２０は、ＵＳＢメモリであり、情報処理装置のコントロールユニット１１１に接続される。
以下、図２を参照しながら情報処理装置１１０の構成について説明する。
図２は、図１の情報処理装置１１０の詳細構成を示すブロック図である。
図２に示すように、情報処理装置１１０は、装置全体を制御するコントロールユニット１１１を備える。コントロールユニット１１１は、画像入力デバイスであるスキャナ１１３や画像出力デバイスであるプリンタ１１４を接続し、これらを制御する一方、ＬＡＮや公衆回線と接続され、これらを介して画像情報やデバイス情報の入出力を行うものである。
【００１４】
コントロールユニット１１１は、ＣＰＵ２０１を有する。ＣＰＵ２０１は、システムバス２０７を介して、ＲＡＭ２０２、ＢＯＯＴＲＯＭ２０３、ＲＯＭ２０４、イメージバスＩ／Ｆ２０５、操作部Ｉ／Ｆ２０６、ネットワークＩ／Ｆ２０８、及びモデム２０９と接続される。
【００１５】
ＲＡＭ２０２は、ＣＰＵ２０１の作業領域を提供するためのメモリであり、また、画像データを一時記憶するための画像メモリとしても使用される。ＢＯＯＴＲＯＭ２０３には、システムのブートプログラムが格納されている。ＲＯＭ２０４には、システムプログラム（ファームウェア）が格納される。
【００１６】
操作部Ｉ／Ｆ２０６は、操作部１１２との間で入出力を行うためのインタフェースである。操作部Ｉ／Ｆ２０６は、操作部１１２に表示する画像データを操作部１１２に対して出力し、ユーザが操作部１１２を介して入力した情報を、ＣＰＵ２０１に伝送するなどの役割を果たす。
【００１７】
ネットワークＩ／Ｆ（Ｎｅｔｗｏｒｋ Ｉ／Ｆ）２０８は、ＬＡＮと接続され、ＬＡＮに対して情報の入出力を行う。モデム（ＭＯＤＥＭ）２０９は、公衆回線と接続され、公衆回線に対して情報の入出力を行う。
【００１８】
ＵＳＢ Ｉ／Ｆ２１０は、各種周辺機器と接続され、接続された周辺機器に対し情報の入出力を行う。実施例１では、ＵＳＢ Ｉ／Ｆ２１０は、外部記憶装置１２０と接続される。実施例１において、外部記憶装置１２０には、プログラム書換え処理に利用する書換え設定データが格納されている。
【００１９】
イメージバスＩ／Ｆ２０５は、システムバス２０７と画像データを高速で転送する画像バス２１７とを接続し、データ構造を変換するバスブリッジである。
画像バス２１７には、ＲＩＰ（ラスタイメージプロセッサ）２１１、デバイスＩ／Ｆ２１２、スキャナ画像処理部２１３、プリンタ画像処理部２１４、画像回転部２１５、及び画像圧縮部２１６が接続されている。
【００２０】
ＲＩＰ２１１は、ＬＡＮから受信されたＰＤＬコードをビットマップイメージに展開する。デバイスＩ／Ｆ２１２は、スキャナ１１３及びプリンタ１１４とコントロールユニット１１１とを接続し、画像データの同期系／非同期系の変換を行う。スキャナ画像処理部２１３は、入力画像データに対し補正、加工、編集などを行う。
【００２１】
プリンタ画像処理部２１４は、プリント出力画像データに対して、プリンタの補正、解像度変換などを行う。画像回転部２１５は、画像データの回転を行う。画像圧縮部２１６は、多値画像データに対してはＪＰＥＧ圧縮伸長処理を行い、２値画像データに対してはＪＢＩＧ，ＭＭＲ，ＭＨなどの圧縮伸長処理を行う。
【００２２】
次に、操作部１１２の構成について図３を参照しながら説明する。
図３は、図２の操作部１１２の詳細構成を示すブロック図である。
図３に示すように、操作部１１２は、ＬＣＤ表示部５０１を有する。このＬＣＤ表示部５０１には、システムの操作画面が表示されるとともに、表示されているキーが押（タッチ）されると、押された位置を示す位置情報がＣＰＵ２０１に伝えられる。
【００２３】
また、操作部１１２には、ＬＣＤ表示部５０１に表示されるシステムの操作画面を操作するための上下左右の選択キー５０２、決定キー５０３、キャンセルキー５０４、リセットキー５０５の各種ハードキーが設けられている。リセットキー５０５は、操作部１１２からの設定を初期化するときに用いられるキーである。
【００２４】
操作部１１２は、図３に示すように、操作部Ｉ／Ｆ２０６を介してシステムバス２０７に接続される。システムバス２０７には、上述したように、ＣＰＵ２０１、ＲＡＭ２０２、ＢＯＯＴＲＯＭ２０３、ＲＯＭ２０４などが接続されている。
【００２５】
操作部Ｉ／Ｆ２０６は、ユーザからの入力を制御するための入力ポート６０１と、画面出力デバイスを制御するための出力ポート６０２とを有する。入力ポート６０１は、各種ハードキー５０２，５０３，５０４，５０５を含むキー群からのユーザ入力をＣＰＵ２０１に渡す。ＣＰＵ２０１は、ユーザ入力の内容と制御プログラムとに基づいて表示画面データを生成し、出力ポート６０２を介して、ＬＣＤ表示部５０１に表示画面を出力する。また、ＣＰＵ２０１は、出力ポート６０２を介して必要に応じてＬＥＤ表示部５０６を制御する。
【００２６】
以下、書換え設定データについて説明する。
実施例１におけるプログラム書換え処理は、書換え設定データで指定されたモジュール呼出し命令を書換え設定データで指定された他のモジュール呼出し命令に変更する処理である。
【００２７】
書換え設定データには、システムプログラムのバージョン情報と、対象モジュールアドレスと、変更モジュールアドレスと、書換え対象となるモジュール呼出し命令を検索する検索範囲が記載される。
【００２８】
なお、対象モジュールアドレスとは、書換え対象となるモジュール呼出し命令の呼出し対象となるモジュールの先頭アドレスを示す。また、変更モジュールアドレスとは、プログラム書換え後のモジュール呼出し命令の呼出し対象となるモジュールの先頭アドレスを示す。
さらに、書換え設定データは、対象モジュールアドレスと変更モジュールアドレスと検索範囲を１つのレコードとして、複数のレコードを持つことができる。
【００２９】
図４は、実施例１における書換え設定データの例を示す図である。
図４の例では、書換え設定データには、１行目に互換性のあるシステムプログラムのバージョン情報、２行目以降に前述のレコードがそれぞれ記載されている。これらのレコードは、「対象モジュールアドレス：変更モジュールアドレス：検索開始アドレス：検索終了アドレス」という書式で１つのレコードが記載されている。
【００３０】
具体的には、２行目に記載されたレコードは、対象モジュールアドレスがaddrC、変更モジュールアドレスがaddrD、検索開始アドレスがaddrA、検索終了アドレスがaddrB-1である。即ち、このレコードは、addrA〜addrB-1の範囲で、先頭アドレスaddrCのモジュール呼出し命令を検出したら、先頭アドレスaddrDのモジュール呼出し命令に変更することを示す。
【００３１】
３行目に記載されたレコードは、対象モジュールアドレスがaddr0x0、変更モジュールアドレスがaddrC、検索開始アドレスがaddrD、検索終了アドレスがaddrE-1である。即ち、このレコードは、addrD〜addrE-1の範囲で、先頭アドレスaddr0x0のモジュール呼出し命令を検出したら、先頭アドレスaddrCのモジュール呼出し命令に変更することを示す。なお、これらのレコードは、何行あってもよい。
【００３２】
書換え設定データは、ＲＯＭ２０４に搭載されているシステムプログラムのアドレス情報からユーザによってパーソナルコンピュータ等の汎用コンピュータなどから、例えばテキストファイル形式で作成される。そして、ユーザは汎用コンピュータなどで作成した書換え設定データを外部記憶装置１２０に格納しておく。なお、書換え設定データは、テキストファイル形式でなくとも他のデータ形式で作成されてもよい。
【００３３】
実施例１において、システムプログラムは、コントロールユニット１１１の管理・制御を行うシステム制御機能部（不図示）と、ＲＡＭ２０２上に展開されたプログラムを書換えるプログラム書換え機能部（図５）を備える。即ち、上記システム制御機能部とプログラム書換え機能部は、ＲＯＭ２０４に格納される上記システムプログラムをＣＰＵ２０１が読み出して実行することにより実現されるものである。
【００３４】
以下、プログラム書換え機能部について説明を行う。
図５は、実施例１におけるプログラム書換え機能部のソフト構成図である。
図５において、４００はプログラム書換え機能部である。プログラム書換え機能部４００は、接続検出モジュール４０１と、書換え設定データ判断モジュール４０２と、書換え対象検出モジュール４０３と、命令コード変更モジュール４０４を備える。
【００３５】
接続検出モジュール４０１は、外部記憶装置の接続の有無を検出する。書換え設定データ判断モジュール４０２は、外部記憶装置に格納された情報がプログラム書換えを行うための書換え設定データであることを判断する。書換え対象検出モジュール４０３は、前記書換え設定データから書換え対象となるメモリアドレスを検出する。命令コード変更モジュール４０４は、書換え対象決定モジュールに検出されたメモリアドレスに格納されている値を書換え設定データに基づいて生成した命令コードの値に変更する。
【００３６】
プログラム書換え機能部４００は、システム制御機能部からプログラム書換え要求受けると、プログラム書換え処理を実行する。実施例１において、システム制御機能部は、ユーザによって操作部１１２においてプログラム書換え実行が選択されると、プログラム書換え機能部４００へプログラム書換え要求を行う。
【００３７】
例えば、ユーザが、操作部１１２のＬＣＤ表示部５０１に表示される不図示のメイン操作画面上の[メンテナンス]キーをタッチすると、システム制御機能部が不図示のメンテナンス画面を表示するように制御する。そして、このメンテナンス画面上の[ファームウェア書換え]キーをユーザがタッチすると、システム制御機能部は、プログラム書換え実行が選択されたと判断し、プログラム書換え機能部４００へプログラム書換え要求を行う。そして、このプログラム書換え要求に応じて、プログラム書換え機能部４００がプログラム書換え処理を実行する。
【００３８】
以下、プログラム書換え処理における各モジュールの挙動について図６を参照しながら説明する。
図６は、プログラム書換え機能部４００の行うプログラム書換え処理の流れを示すフローチャートである。なお、このフローチャートの処理は、ＲＯＭ２０４に格納される上記システムプログラムをＣＰＵ２０１が読み出して実行することにより実現されるプログラム書換え機能部４００により実行される。
【００３９】
プログラム書換え機能部４００がプログラム書換え処理を開始すると、接続検出モジュール４０１は、ステップＳ１００１において、外部記憶装置１２０の接続状態を確認する。実施例１では、接続検出モジュール４０１は、ＵＳＢ Ｉ/Ｆ２１０に接続された機器の接続状態を確認する。
【００４０】
そして、上記ステップＳ１００１において、接続検出モジュール４０１が接続された機器が記憶装置であり且つ情報の入出力が可能であることを確認できない場合、プログラム書換え機能部４００は、本プログラム書換え処理を終了させる。
一方、上記Ｓ１００１において、接続検出モジュール４０１が接続された機器が記憶装置であり且つ情報の入出力が可能であることを確認した場合、プログラム書換え機能部４００は、ステップＳ１００２に処理を進める。
【００４１】
ステップＳ１００２では、書換え設定データ判断モジュール４０２は、外部記憶装置１２０に格納された情報がシステムプログラムの書換えを行うための書換え設定データ（例えば図４）であるか否かの判断を行う。ここでは、該データのＲＡＭ２０２に展開されているシステムプログラムとの互換性の確認を行う。
【００４２】
そして、上記Ｓ１００２において、書換え設定データ判断モジュール４０２が互換性を確認できなかった場合、プログラム書換え機能部４００は、本プログラム書換え処理を終了させる。
一方、上記Ｓ１００２において、書換え設定データ判断モジュール４０２が互換性を確認できた場合、プログラム書換え機能部４００は、ステップＳ１００３に処理を進める。
【００４３】
ステップＳ１００３では、書換え対象検出モジュール４０３は、上記ステップＳ１００２で確認した書換え設定データから1レコード取得し、対象モジュールアドレスを呼出す呼出し命令をメモリアドレス空間の検索範囲で指定された範囲内で検索する。例えば、図４の２行目に記載されたレコードの場合、addrA〜addrB-1の範囲で、先頭アドレスaddrCのモジュール呼出し命令が記載されたアドレスを検索する。即ち、後述する図７のアドレスaddr1を検索する。また、図４の３行目に記載されたレコードの場合、addrD〜addrE-1の範囲で、先頭アドレスaddr0x0のモジュール呼出し命令を検索する。即ち、後述する図７のアドレスaddr2を検索する。
【００４４】
そして、上記Ｓ１００３で書換え対象検出モジュール４０３が書き換え対象となるモジュール呼出し命令が格納されたメモリアドレスを検出すると、プログラム書換え機能部４００は、ステップＳ１００４に処理を進める。
【００４５】
ステップＳ１００４では、命令コード変更モジュール４０４が、変更モジュールアドレスを呼出すための命令を、上記ステップＳ１００３で検出された全てのメモリアドレスに格納する。
【００４６】
例えば、図４の２行目に記載されたレコードの場合、addrA〜addrB-1の範囲で検出された、先頭アドレスaddrCのモジュール呼出し命令が記載されたアドレスaddr1に、先頭アドレスaddrDのモジュール呼出し命令を格納する。即ち、後述する図７の７０１を７１１のように上書きする。また、図４の３行目に記載されたレコードの場合、addrD〜addrE-1の範囲で検出された、先頭アドレスaddr0x0のモジュール呼出し命令が記載されたアドレスaddr2に、先頭アドレスaddrCのモジュール呼出し命令を格納する。即ち、後述する図７の７０２を７１２のように上書きする。
【００４７】
次に、ステップＳ１００５において、プログラム書換え機能部４００は、上記Ｓ１００３及びＳ１００４の処理を書換え設定データの全てのレコードに対し実行したか否かを判定する。
【００４８】
そして、上記Ｓ１００５において、まだ上記Ｓ１００３及びＳ１００４の処理を書換え設定データの全てのレコードに対し実行していないと判定した場合には、プログラム書換え機能部４００は、ステップＳ１００３に処理を戻す。
一方、上記Ｓ１００５において、既に上記Ｓ１００３及びＳ１００４の処理を書換え設定データの全てのレコードに対し実行したと判定した場合には、プログラム書換え機能部４００は、本プログラム書換え処理を終了させる。
【００４９】
なお、上記Ｓ１００３において、対象モジュールアドレス及び検索範囲がシステムプログラム格納領域の外にある場合には、書換え対象検出モジュール４０３は、該レコードを無視し、次のレコードを取得する。また、上記Ｓ１００４において、変更モジュールアドレスが追加プログラム格納領域の外にある場合にも、書換え対象検出モジュール４０３は、該レコードを無視し、次のレコードを取得する。
【００５０】
さらに、上記Ｓ１００３において、書換え対象検出モジュール４０３が書換え設定データに１つのレコードも存在しないと判断した場合、プログラム書換え機能部４００は、本プログラム書換え処理を終了させる。
【００５１】
図７は、実施例１におけるプログラム書換え処理前後のプログラム構造図である。
図７（ａ）において、モジュールＡは、情報処理装置１１０によりコピー機能を実行するためのモジュールである。モジュールＢは、スキャナ１１３に画像の読み取りを指示するモジュールである。モジュールＣは、プリンタ１１４に画像の出力を指示するモジュールである。各モジュールは、処理の最後に呼出し元アドレスの次のアドレスへ制御を移行するreturn命令を持つ。
【００５２】
図４に示した書換え設定データに基づいて、図６に示したプログラム書換え処理を実行して、モジュールＡ内のモジュールＣの呼出し命令（７０１）をモジュールＤの呼出し命令（７１１）に変更した。また、モジュールＤ内のアドレス「0x0」の呼出し命令（７０２）をモジュールＣの呼出し命令（７１２）に変更した。即ち、図７（ａ）に示したモジュールＡ，Ｄは図７（ｂ）に示すように変更される。このような書換えは、機器情報取得の使用例の一つである。
【００５３】
図８は、プログラム書換え前後のモジュールＡ実行時におけるシーケンス図である。
プログラム書換え前、モジュールＡでは、図８（ａ）に示すように、モジュールＢが呼び出され、モジュールＣが呼び出される。プログラム書換え後、モジュールＡでは、図８（ｂ）に示すように、モジュールＢが呼び出され、モジュールＤが呼び出される。なお、モジュールＤ内では、モジュールＣが呼び出される。
【００５４】
即ち、上記の例では、書換え設定データは、対象モジュール（第１のモジュール）の実行が指示された箇所を検出するための情報として、対象モジュールアドレス、検索開始アドレス、検索終了アドレスを含む。また、書換え設定データは、変更モジュール（第２のモジュール）の実行を指示するための情報として、変更モジュールアドレスを含む。
【００５５】
そして、プログラム書換え機能部４００は、ＲＯＭ２０４（第１記憶手段）から読み出されてＲＡＭ２０２（第２記憶手段）に展開されたプログラムを、対象モジュールの実行が指示された箇所で、対象モジュールの実行前に変更モジュールを実行するよう書換えるように制御している。より詳細には、プログラム書換え機能部４００は、対象モジュールの実行が指示された箇所で、対象モジュールの代わりに変更モジュールを実行し、変更モジュールの中で対象モジュールを実行するようプログラムを書換えるように制御している。
【００５６】
なお、変更モジュール（第２のモジュール）の例としてのモジュールＤは、デバッグ作業時に使用する情報出力用モジュールである。モジュールＤは、プログラム書換え機能部によりシステム制御機能部が書き換えられない限り、他のモジュールから呼出されることはないモジュールである。
【００５７】
図示しないが、モジュールＤは、アドレス「0x0」の呼出し命令の前後にＣＰＵ２０１のレジスタの値を外部記憶装置１２０に出力する命令をもつ。
さらに、図示しないが、モジュールＤは、アドレス「0x0」の呼出し命令の前に時間の計測を開始する命令をもち、アドレス「0x0」の呼出し命令の後に時間の計測を終了し、計測結果を外部記憶装置１２０に出力する命令をもつ。モジュールＤによって出力される情報は、外部記憶装置１２０に格納されたファイルlog_file（後述する図９に示す）に出力される。なお、アドレス「0x0」には、前述のreturn命令のみが記述されている。
【００５８】
図４の書換え設定データに基づいて、プログラムの書換え処理が実行されることにより、モジュールＡからのモジュールＣ呼出し命令実行前後における、ＣＰＵ２０１のレジスタの値及び、前記モジュールＣの処理時間の取得が可能になる。
【００５９】
図９は、書換え後にモジュールＡの処理であるコピー機能が実行された場合のlog_fileの例を示す図である。
図９において、９０１は、モジュールＣ実行前のレジスタの値、９０２はモジュールＣ実行後のレジスタの値、９０３は、モジュールＣの処理時間を示している。
もちろん、モジュールＣだけでなく、書換え設定データを変更することで、他のモジュールでも容易に同様の情報取得が可能になる。
【００６０】
このようにして、プログラムの書換えを行えば、ＲＯＭ２０４に格納されたプログラムを変更することなく、ＣＰＵ２０１の実行するＲＡＭ２０２上のプログラムを変更することができる。この方法によれば、電源を切るなどの動作によりＲＯＭ２０４に格納されたプログラムをＲＡＭ２０２に再度読み込むことで、プログラムの変更をクリアすることが出来る。これにより、ログ情報の取得など、ファームウェアに一時的な変更を加えたい場合に、ファームウェア変更のための時間を短縮することが出来る。
【００６１】
なお、パーソナルコンピュータ（ＰＣ）により書換え設定データを作成し、該作成した書換え設定データとプログラム書換え要求コマンドを情報処理装置１１０に送信するようにしてもよい。この場合、ＰＣから送信された書換え設定データとプログラム書換え要求コマンドをシステム制御機能部が受け取ると、プログラム書換え機能部４００へプログラム書換え要求を行う構成とする。
【００６２】
また、操作部１１２からプログラム書換え実行が選択されると、システム制御機能部が、予め設定されたＷｅｂサイトから書換え設定データをダウンロードし、プログラム書換え機能部４００へプログラム書換え要求を行う構成でもよい。この構成の場合、プログラム書換え機能部４００は、上記Ｗｅｂサイトからダウンロードされた設定データを用いてプログラム書換え処理を実行する。
【００６３】
さらに、プログラム書換え要求を受け取ると、プログラム書換え機能部４００が、予め設定されたＷｅｂサイトから書換え設定データをダウンロードして、プログラム書換え処理を実行する構成でもよい。
【００６４】
また、操作部１１２から、図４に示したような設定データをキー入力して、プログラム書換え実行を選択すると、システム制御機能部が、プログラム書換え機能部４００へプログラム書換え要求を行う構成でもよい。この構成の場合、プログラム書換え機能部４００は、上記操作部１１２からキー入力された設定データを用いてプログラム書換え処理を実行するものとする。
【００６５】
以上示したように、情報処理装置のＲＯＭ２０４に保存されているプログラム（ファームウェア）自体に変更を加えること無く、実際に動作するプログラムを変更することが可能である。
【００６６】
なお、本実施形態では、電源を切るなどの動作により、プログラムを格納場所から再度読み込みを行えば、変更されたプログラム情報は削除される。そのため、従来必要であった変更したファームウェアを元のファームウェアに書換える作業が無くなり、作業時間を短縮できる。
【００６７】
即ち、デバッグや市場での調査など、情報収集を目的とした場合などに、ファームウェア等のプログラムに一時的な変更を加えたい場合における、プログラム変更・復元のための作業を誤りなく、且つ、短時間に行なうことができる。
【実施例２】
【００６８】
以下、実施例２における書換え設定データについて説明する。
実施例２において、プログラム書換え処理は、書換え設定データに指定されたモジュール呼出し命令を書換え設定データで指定された他のモジュール呼出し命令に変更する処理である。ただし、実施例２では、変更後の呼出し命令により呼出されるモジュールは、外部記憶装置１２０からＲＡＭ２０２に展開された追加プログラム領域に配置されたモジュールである。
【００６９】
書換え設定データには、システムプログラムのバージョン情報と、追加プログラムのバージョン情報と、対象モジュールアドレスと、変更モジュール相対アドレスと、検索範囲が記載される。なお、変更モジュール相対アドレスは、プログラム書換え後のモジュール呼出し命令の呼出し対象となるモジュールの先頭アドレスの、追加プログラムの先頭アドレスからの相対アドレスを示す。
なお、書換え設定データは、対象モジュールアドレスと変更モジュール相対アドレスと検索範囲の情報を１つのレコードとして、複数のレコードを持つことができる。
【００７０】
図１０は、実施例２における書換え設定データの例を示した図である。
図１０の例では、書換え設定データには、１行目に互換性のあるシステムプログラムのバージョン情報、２行目に追加プログラムのバージョン情報が記載されている。
さらに、書換え設定データには、３行目以降に「対象モジュールアドレス：変更モジュール相対アドレス：検索開始アドレス：検索終了アドレス」という書式で1行に１つのレコードを記載している。
【００７１】
具体的には、３行目に記載されたレコードは、対象モジュールアドレスがaddrB、変更モジュール相対アドレスがaddrx、検索開始アドレスがaddrA、検索終了アドレスがaddrB-1である。即ち、このレコードは、addrA〜addrB-1の範囲で、先頭アドレスaddrBのモジュール呼出し命令を検出したら、追加プログラムの先頭アドレスからの相対アドレスaddrxの示すモジュール呼出し命令に変更することを示す。
【００７２】
３行目に記載されたレコードは、対象モジュールアドレスがaddrC、変更モジュール相対アドレスがaddry、検索開始アドレスがaddrA、検索終了アドレスがaddrB-1である。即ち、このレコードは、addrA〜addrB-1の範囲で、先頭アドレスaddrCのモジュール呼出し命令を検出したら、追加プログラムの先頭アドレスからの相対アドレスaddryの示すモジュール呼出し命令に変更することを示す。なお、これらのレコードは、何行あってもよい。
【００７３】
システムプログラムは、コントロールユニット１１１の管理・制御を行うシステム制御機能部（不図示）と、ＲＡＭ２０２上に展開されたプログラムを書換えるプログラム書換え機能部（図１１）を備える。即ち、上記システム制御機能部とプログラム書換え機能部は、ＲＯＭ２０４に格納される上記システムプログラムをＣＰＵ２０１が読み出して実行することにより実現されるものである。
【００７４】
以下、プログラム書換え機能部について説明を行う。
図１１は、実施例２におけるプログラム書換え機能部のソフト構成図である。
図１１において、８００はプログラム書換え機能部である。プログラム書換え機能部８００は、接続検出モジュール８０１と、追加プログラム判断モジュール８０２と、追加プログラム展開モジュール８０４と、書換え設定データ判断モジュール８０３と、書換え対象検出モジュール８０５と、命令コード変更モジュール８０６を備える。
【００７５】
接続検出モジュール８０１は、外部記憶装置１２０の接続の有無を検出する。追加プログラム判断モジュール８０２は、外部記憶装置１２０に格納された情報が追加プログラムであることを判断する。追加プログラム展開モジュール８０４は、外部記憶装置１２０に格納された情報が追加プログラムをＲＡＭ２０２上に展開する。
【００７６】
書換え設定データ判断モジュール８０３は、外部記憶装置１２０に格納された情報がプログラム書換えを行うための書換え設定データであることを判断する。書換え対象検出モジュール８０５は、前記書換え設定データから書換え対象となるメモリアドレスを検出する。命令コード変更モジュール８０６は、書換え対象決定モジュールに決定されたメモリアドレスに格納されている値を書換え設定データに基づいて生成した命令コードの値に変更する。
【００７７】
図１２は、実施例２における情報処理装置１１０の起動時のシーケンス図である。
図１２に示すように、情報処理装置１１０が起動されると、ＢＯＯＴＲＯＭ２０３に格納されたブートプログラムの命令によりＲＯＭ２０４からＲＡＭ２０２へシステムプログラムが転送される。ブートプログラムは、システムプログラムの転送が完了すると、システムプログラムのプログラム書換え機能部８００に制御を移す。プログラム書換え機能部８００は、プログラム書換え処理を実行し、プログラム書換え処理が終了すると、システム制御機能部に制御を移す。システム制御機能部は、システムの起動処理を行う。
【００７８】
以下、各モジュールの挙動について図１３を参照しながら説明する。
図１３は、プログラム書換え機能部の行うプログラム書換え処理の流れを示すフローチャートである。なお、このフローチャートの処理は、ＲＯＭ２０４に格納される上記システムプログラムをＣＰＵ２０１が読み出して実行することにより実現されるプログラム書換え機能部８００により実行される。
【００７９】
プログラム書換え機能部８００がプログラム書換え処理を開始すると、接続検出モジュール８０１は、ステップＳ２００１において、外部記憶装置１２０の接続状態を確認する。実施例２では、接続検出モジュール８０１は、ＵＳＢ Ｉ/Ｆ２１０に接続された機器の接続状態を確認する。
【００８０】
そして、上記ステップＳ２００１において、接続検出モジュール８０１が接続された機器が記憶装置であり且つ情報の入出力が可能であることを確認できない場合、プログラム書換え機能部８００は、本プログラム書換え処理を終了させる。
一方、上記Ｓ２００１において、接続検出モジュール８０１が接続された機器が記憶装置であり且つ情報の入出力が可能であることを確認した場合、プログラム書換え機能部８００は、ステップＳ２００２に処理を進める。
【００８１】
ステップＳ２００２では、追加プログラム判断モジュール８０２が、外部記憶装置に格納されたデータがシステムプログラムと互換性をもつ追加プログラムか否かの判断を行う。例えば、該データのサイズ、ファイル名、ファイルの拡張子、ボディデータの先頭部の確認処理を行って判断を行う。
【００８２】
そして、上記Ｓ２００２において、外部記憶装置に格納されたデータがシステムプログラムと互換性をもつ追加プログラムでないと判断した場合、プログラム書換え機能部８００は、本プログラム書換え処理を終了させる。
一方、上記Ｓ２００２において、外部記憶装置に格納されたデータがシステムプログラムと互換性をもつ追加プログラムであると判断した場合、プログラム書換え機能部８００は、ステップＳ２００３に処理を進める。
【００８３】
ステップＳ２００３では、書換え設定データ判断モジュール８０３は、外部記憶装置１２０に格納された情報がシステムプログラムの書換えを行うための書換え設定データ（例えば図１０）であるか否かの判断を行う。ここでは、該データのＲＡＭ２０２に展開されているシステムプログラム及びステップＳ２００２で確認した追加プログラムとの互換性の確認を行う。
【００８４】
そして、上記Ｓ２００３において、書換え設定データ判断モジュール８０３が互換性を確認できなかった場合、プログラム書換え機能部８００は、本プログラム書換え処理を終了させる。
一方、上記Ｓ２００３において、書換え設定データ判断モジュール８０３が互換性を確認できた場合、プログラム書換え機能部８００は、ステップＳ２００４に処理を進める。
【００８５】
ステップＳ２００４では、追加プログラム展開モジュール８０４が、外部記憶装置１２０からＲＡＭ２０２へ追加プログラム（図１４の１４２０）を展開する。さらに、追加プログラム展開モジュール８０４は、追加プログラムの展開先の先頭メモリアドレス（追加先メモリアドレス）を命令コード変更モジュール８０６へ通知する。そして、プログラム書換え機能部８００は、ステップＳ２００５に処理を進める。
【００８６】
ステップＳ２００５では、書換え対象検出モジュール８０５は、上記ステップＳ２００３で確認した書換え設定データから1レコード取得し、対象モジュールアドレスを呼出す呼出し命令をメモリアドレス空間の検索範囲で指定された範囲内で検索する。例えば、図１０の３行目に記載されたレコードの場合、addrA〜addrB-1の範囲で、先頭アドレスaddrBのモジュール呼出し命令が記載されたアドレスを検索する。即ち、後述する図１４のアドレスaddr1を検索する。また、図１０の４行目に記載されたレコードの場合、アドレスaddrA〜addrB-1の範囲で、先頭アドレスaddrCのモジュール呼出し命令を検索する。即ち、後述する図１４のアドレスaddr2を検索する。
【００８７】
そして、上記Ｓ２００５で書換え対象検出モジュール８０５が書き換え対象となるモジュール呼出し命令が格納されたメモリアドレスを検出すると、プログラム書換え機能部８００は、ステップＳ２００６に処理を進める。
【００８８】
ステップＳ２００６では、命令コード変更モジュール８０６が、変更モジュール相対アドレスが示すアドレスに、追加プログラム展開モジュール８０４より通知された追加先メモリアドレスを加算し、変更モジュールアドレスを生成する。なお、変更モジュールアドレスは、変更後のモジュール呼出し命令の呼出先アドレスに対応する。例えば、図１０の３行目に記載されたレコードの場合addrX、３行目に記載されたレコードの場合addrYに対応する。さらに、命令コード変更モジュール８０６は、上記変更モジュールアドレスを呼出すための命令を、上記ステップＳ２００５で検出された全てのメモリアドレスに格納する。
【００８９】
例えば、図１０の３行目に記載されたレコードの場合、上記検出された先頭アドレスaddrBのモジュール呼出し命令が記載されたアドレスaddr1に、上記生成された変更モジュールアドレスaddrXのモジュール呼出し命令を格納する。即ち、後述する図１４（ａ）の１４０１を図１４（ｂ）の１４１１のように上書きする。また、図１０の４行目に記載されたレコードの場合、上記検出された先頭アドレスaddrCのモジュール呼出し命令が記載されたアドレスaddr2に、上記生成された変更モジュールアドレスaddrYのモジュール呼出し命令を格納する。即ち、後述する図１４（ａ）の１４０２を図１４（ｂ）の１４１２のように上書きする。
【００９０】
次に、ステップＳ２００７において、プログラム書換え機能部８００は、上記Ｓ２００５及びＳ２００６の処理を書換え設定データの全てのレコードに対し実行したか否かを判定する。
【００９１】
そして、上記Ｓ２００７において、まだ上記Ｓ２００６及びＳ２００７の処理を書換え設定データの全てのレコードに対し実行していないと判定した場合には、プログラム書換え機能部８００は、ステップＳ２００５に処理を戻す。
一方、上記Ｓ２００７において、既に上記Ｓ２００５及びＳ２００６の処理を書換え設定データの全てのレコードに対し実行したと判定した場合には、プログラム書換え機能部８００は、本プログラム書換え処理を終了させる。
【００９２】
なお、上記Ｓ２００５において、対象モジュールアドレス及び検索範囲がシステムプログラム格納領域の外にある場合には、書換え対象検出モジュール８０５は、該レコードを無視し、次のレコードを取得する。また、上記Ｓ２００６において、変更モジュール相対アドレスに追加先メモリアドレスを加算したアドレスが追加プログラム格納領域の外にある場合にも、書換え対象検出モジュール８０５は、該レコードを無視し、次のレコードを取得する。
【００９３】
さらに、上記Ｓ２００５において、書換え対象検出モジュール８０５が書換え設定データに１つのレコードも存在しないと判断した場合、プログラム書換え機能部８００は、本プログラム書換え処理を終了させる。
【００９４】
図１４は、実施例２におけるプログラム書換え処理前後のプログラム構造図である。
図１４示す各モジュールは、処理の最後に呼出し元アドレスの次のアドレスへ制御を移行するreturn命令を持つ。
図１０に示した書換え設定データに基づいて、図１３に示したプログラム書換え処理を実行して、モジュールＡ内のモジュールＢの呼出し命令（１４０１）を追加モジュールａの呼出し命令（１４１１）に変更した。また、モジュールＡ内のモジュールＣの呼出し命令（１４０２）を追加モジュールｂの呼出し命令（１４１２）に変更した。即ち、図１４（ｂ）の１４２０に示すように追加プログラムが展開され、図１４（ａ）に示したモジュールＡは図１４（ｂ）に示すように変更される。
【００９５】
このようにプログラムの変更を行うことで、必要な情報が入った外部記憶装置１２０を接続した状態で情報処理装置１１０の電源を入れた場合にのみ、追加機能を利用できるなどのサービスを装置に格納されたファームウェアを変更することなく提供可能になる。
【００９６】
例えば、図１４に示した追加モジュールａは、当該追加モジュールａ内でモジュールＢを実行し、モジュールＢの実行に関わる情報をlog_fileに出力するようにプログラムされたものとする。また、図１４に示した追加モジュールｂは、当該追加モジュールｂ内でモジュールＣを実行し、モジュールＢの実行に関わる情報をlog_fileに出力するようにプログラムされたものとする。
【００９７】
また、図１４に示した追加モジュールａは、モジュールＢと同様の処理を行いつつ該処理に関わる情報をlog_fileに出力するようにプログラムされたものなどであってもよい。また、図１４に示した追加モジュールｂも、モジュールＣと同様の処理を行いつつ該処理に関わる情報をlog_fileに出力するようにプログラムされたものなどであってもよい。
【００９８】
さらに、図１４に示した追加モジュールａは、モジュールＢとは異なる処理を行うようにプログラムされたものなどであってもよい。また、図１４に示した追加モジュールｂも、モジュールＣとは異なる処理を行うようにプログラムされたものなどであってもよい。
【００９９】
なお、上述した各種データの構成及びその内容はこれに限定されるものではなく、用途や目的に応じて、様々な構成や内容で構成されることは言うまでもない。
以上、一実施形態について示したが、本発明は、例えば、システム、装置、方法、プログラム若しくは記憶媒体等としての実施態様をとることが可能である。具体的には、複数の機器から構成されるシステムに適用しても良いし、また、一つの機器からなる装置に適用しても良い。
【０１００】
以上示したように、ファームウェア等のプログラムに一時的な変更を加えたい場合における、プログラム変更・復元のための時間を短縮することができる。例えば、デバッグや市場での調査など、情報収集を目的とし、プログラム修正の必要が一時的である場合、プログラム変更・復元のための作業を誤りなく且つ短時間に行なうことができる。
【０１０１】
なお、図１では、情報処理装置１１０を複合機として説明したが、本発明の情報処理装置は複合機に限られるものではなく、ファームウェア等の不揮発性メモリに記憶されらプログラムを有する各種情報処理装置に適用可能である。
【０１０２】
以下、本発明に係る情報処理装置で読み取り可能な（コンピュータ読取り可能な）各種データ処理プログラムを格納する記憶媒体（記録媒体）について説明する。
本発明の各工程（上述した各機能）は、ネットワーク又は各種記憶媒体を介して取得したソフトウェア（プログラム）をパーソナルコンピュータ等の処理装置（ＣＰＵ，プロセッサ）にて実行することでも実現できる。
【０１０３】
また、本発明は、複数の機器から構成されるシステムに適用しても、１つの機器からなる装置に適用してもよい。また、本発明は、システム或いは装置にプログラムを供給することによって達成される場合にも適応できることは言うまでもない。この場合、本発明を達成するためのソフトウェアによって表されるプログラムを格納した記憶媒体を該システム或いは装置に読み出すことによって、そのシステム或いは装置が、本発明の効果を享受することが可能となる。
【０１０４】
本発明は上記実施例に限定されるものではなく、本発明の趣旨に基づき種々の変形（各実施例の有機的な組合せを含む）が可能であり、それらを本発明の範囲から除外するものではない。
【０１０５】
本発明の様々な例と実施例を示して説明したが、当業者であれば、本発明の趣旨と範囲は、本明細書内の特定の説明に限定されるのではない。
なお、上述した各実施例及びその変形例を組み合わせた構成も全て本発明に含まれるものである。
【符号の説明】
【０１０６】
１１０    情報処理装置
１２０    外部記憶装置
２０１    ＣＰＵ
２０２    ＲＡＭ
２０４    ＲＯＭ
４００    プログラム書換え機能部
４０１    接続検出モジュール
４０２    書換え設定データ判断モジュール
４０３    書換え対象検出モジュール
４０４    命令コード変更モジュール
【図１】
2010257103.tif 000003
【図２】
2010257103.tif 000004
【図３】
2010257103.tif 000005
【図４】
2010257103.tif 000006
【図５】
2010257103.tif 000007
【図６】
2010257103.tif 000008
【図７】
2010257103.tif 000009
【図８】
2010257103.tif 000010
【図９】
2010257103.tif 000011
【図１０】
2010257103.tif 000012
【図１１】
2010257103.tif 000013
【図１２】
2010257103.tif 000014
【図１３】
2010257103.tif 000015
【図１４】
2010257103.tif 000016