JP2021111916A - 情報処理装置及びプログラム復旧方法 - Google Patents
情報処理装置及びプログラム復旧方法 Download PDFInfo
- Publication number
- JP2021111916A JP2021111916A JP2020003949A JP2020003949A JP2021111916A JP 2021111916 A JP2021111916 A JP 2021111916A JP 2020003949 A JP2020003949 A JP 2020003949A JP 2020003949 A JP2020003949 A JP 2020003949A JP 2021111916 A JP2021111916 A JP 2021111916A
- Authority
- JP
- Japan
- Prior art keywords
- program
- main cpu
- information processing
- verification
- sub cpu
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】機器の動作の安全性と、プログラムの復旧時のユーザへの情報の提供とを両立する仕組みを実現すること。【解決手段】実行手段と、第1のプログラムを記憶する第1の記憶手段と、前記第1のプログラムの正当性を検証して、前記第1のプログラムが正当であると判定される場合に前記実行手段による前記第1のプログラムの実行を可能にする検証手段と、第2のプログラムを記憶する第2の記憶手段と、を備え、前記検証手段は、前記第1のプログラムが正当ではないと判定される場合に、前記第2のプログラムの正当性を検証して、前記第2のプログラムが正当であると判定されるときに、前記実行手段による前記第2のプログラムの実行を可能にし、且つ、前記第1の記憶手段の前記第1のプログラムを復旧し、前記実行手段は、前記第2のプログラムを実行することにより、復旧に関する情報をユーザへ提示する、情報処理装置が提供される。【選択図】図7
Description
本開示は、情報処理装置及びプログラム復旧方法に関する。
情報機器に組み込まれるファームウェアが改竄されるリスクへの対策として、機器の起動時にファームウェアの正当性を検証する手法が知られている。ファームウェアの正当性を検証することは、改竄のみならずファームウェアの劣化から機器を保護する観点でも有益である。
特許文献1は、システムの起動時に実行されるブートプログラムの正当性を、ブートプログラムについて誤り検出演算を行うことで検証する手法を開示している。特許文献1の手法では、通常起動用のメモリから読出されるブートプログラムの正当性が否定された場合、バックアップ用のメモリから読出されるプログラムを用いてシステムが起動される。特許文献1は、ブートプログラムの劣化への対策として、バックアップ用のメモリから読出されるプログラムで通常起動用のメモリ内のブートプログラムを上書きすることも提案している。
特許文献2は、プログラムを主として実行するCPUとは別の補助的なCPUが主たるCPUにより実行されるプログラムの正当性を検証することで、機器による不正な動作のリスクを低減する手法を開示している。
通常起動用のブートプログラムの正当性が否定された場合に、バックアップ用のブートプログラムを用いて通常起動用のブートプログラムを復旧する処理は、ある程度の時間を要する。復旧処理の期間中、システムからユーザへ何も情報が提供されなければ、ユーザは、システムが起動しない原因を把握することができず、システムの電源をオフにしてしまうかもしれない。ユーザが一旦電源をオフにすると、ブートプログラムの復旧は一からやり直しとなる。とりわけ、補助的なCPUを用いてプログラムの正当性を検証する手法を取り入れる場合、機器の不正な動作のリスクは低減されるものの、復旧処理中に補助的なCPUがユーザへ情報を提供できないことが不都合となる。
そこで、本開示は、機器の動作の安全性と、プログラムの復旧時のユーザへの情報の提供とを両立することのできる仕組みを実現することを目的とする。
ある観点によれば、プログラムを実行する実行手段と、前記実行手段による実行のための第1のプログラムを記憶する第1の記憶手段と、前記第1のプログラムの正当性を検証して、前記第1のプログラムが正当であると判定される場合に前記実行手段による前記第1のプログラムの実行を可能にする検証手段と、前記実行手段による実行のための第2のプログラムを記憶する第2の記憶手段と、を備え、前記検証手段は、前記第1のプログラムが正当ではないと判定される場合に、前記第2のプログラムの正当性を検証して、前記第2のプログラムが正当であると判定されるときに、前記実行手段による前記第2のプログラムの実行を可能にし、且つ、前記第1の記憶手段の前記第1のプログラムを復旧し、前記実行手段は、前記第2のプログラムを実行することにより、前記第1のプログラムの復旧に関する情報をユーザへ提示する、情報処理装置が提供される。
本開示によれば、機器の動作の安全性と、プログラムの復旧時のユーザへの情報の提供とを両立することが可能となる。
以下、添付図面を参照して実施形態を詳しく説明する。なお、以下の実施形態は特許請求の範囲に係る発明を限定するものではない。実施形態には複数の特徴が記載されているが、これらの複数の特徴の全てが発明に必須のものとは限らず、また、複数の特徴は任意に組み合わせられてもよい。さらに、添付図面においては、同一若しくは同様の構成に同一の参照番号を付し、重複した説明は省略する。
<<1.装置の概要>>
本節では、本開示に係る技術がMFP(Multi-Function Peripheral)に適用される例を説明する。しかしながら、本開示に係る技術は、MFPに限定されず、例えばプリンタ、スキャナ、ファクシミリ、PC(Personal Computer)、タブレットデバイス及びスマートフォンといった、いかなる種類の情報処理装置に適用されてもよい。特に説明の無い限り、以下に説明する装置、デバイス、モジュール及びチップといった構成要素の各々は、単一のエンティティで構成されてもよく、又は物理的に異なる複数のエンティティから構成されてもよい。
本節では、本開示に係る技術がMFP(Multi-Function Peripheral)に適用される例を説明する。しかしながら、本開示に係る技術は、MFPに限定されず、例えばプリンタ、スキャナ、ファクシミリ、PC(Personal Computer)、タブレットデバイス及びスマートフォンといった、いかなる種類の情報処理装置に適用されてもよい。特に説明の無い限り、以下に説明する装置、デバイス、モジュール及びチップといった構成要素の各々は、単一のエンティティで構成されてもよく、又は物理的に異なる複数のエンティティから構成されてもよい。
図1は、一実施形態に係るMFP1の概略的な構成の一例を示すブロック図である。図1を参照すると、MFP1は、メインCPU101、DRAM102、操作I/F103、ネットワークI/F104、プリンタ105、スキャナ106、FAX107、HDD108、画像処理部109及び電源制御部112を備える。MFP1のこれら構成要素は、信号バス110を介して相互に接続される。操作I/F103は、操作部111へ接続される。
メインCPU(Central Processing Unit)101は、MFP1の機能の全般を制御するプロセッサである。DRAM(Dynamic Random Access Memory)102は、メインCPU101のための主記憶デバイスであり、メインCPU101により実行されるプログラム及び関連するデータを一時的に記憶する。操作インタフェース(I/F)103は、操作部111を信号バス110へ接続するためのインタフェースである。操作部111は、ユーザによるMFP1の操作のためのユーザインタフェースを提供するユニットである。操作部111は、例えば、ボタンの押下又はタッチパネルへのタッチといったユーザ操作を受け付けると、対応する操作信号を操作I/F103を介してメインCPU101へ送信する。また、操作部111は、例えば、操作のための情報をディスプレイ(図示せず)の画面上に表示させる。ネットワークI/F104は、MFP1による外部の装置との間の通信のためのインタフェースである。ネットワークI/F104は、例えばLAN(Local Area Network)インタフェースであってもよい。プリンタ105は、画像データにより表現される画像をシートへ印刷するユニットである。スキャナ106は、原稿の画像を光学的に読み取り、光信号を電気信号へ変換して、スキャン画像データを生成するユニットである。ファクシミリ(FAX)107は、公衆回線へ接続され、外部のファクシミリ装置との間でファクシミリ通信を行うユニットである。HDD(Hard Disk Drive)108は、いわゆる二次記憶デバイスである。HDD108は、MFP1の様々な機能により利用されるデータと、メインCPU101により実行されるプログラムのうち正当性の検証を要しないプログラムとを記憶する。HDD108は、プリントジョブ及びスキャンジョブをスプールするためのスプール領域、並びにスキャン画像データを再利用に向けて保存するための保存領域として利用されてもよい。画像処理部109は、ネットワークI/F104を介して受信されるプリントジョブの画像データを、プリンタ105による印刷に適した画像データへ変換する処理モジュールである。画像処理部109は、さらに、スキャナ106により読み取られたスキャン画像データについて、ノイズ除去、色空間の変換、回転及びデータ圧縮といった画像処理を実行し得る。さらに、画像処理部109は、HDD108に記憶される画像データについて任意の種類の画像処理を実行してよい。電源制御部112は、MFP1を構成するモジュールへの電力の供給を制御するユニットである。図中では、外部の商用AC電源からの電力の供給及びMFP1内の各モジュールへの電力の供給が太い破線の矢印で簡略的に示されている。
図1を参照すると、MFP1は、さらに、フラッシュROM120、フラッシュROM121、サブCPU122及びリセット回路123を含む。メインCPU101、フラッシュROM120、フラッシュROM121及びサブCPU122は、SPI(Serial Peripheral Interface)バス115を介して相互に接続される。
フラッシュROM120は、メインCPU101による実行のためのプログラム(例えば、第1のプログラム)と、MFP1の基本的な設定のための既定の設定値とを記憶する記憶手段である。フラッシュROM120は、例えば、メインCPU101の起動時に実行されるブートコードを記述したブートプログラムを記憶する。フラッシュROM120は、MFP1のBIOS(Basic Input Output System)プログラムをさらに記憶してもよい。フラッシュROM120に記憶されるプログラムは、サブCPU122による正当性の検証の対象とされる。
フラッシュROM121もまた、メインCPU101による実行のためのプログラム(例えば、第2のプログラム)を記憶する記憶手段である。フラッシュROM121に記憶されるプログラムは、例えば、フラッシュROM120に記憶されるブートプログラムと同様にメインCPU101を起動することができ、但し後述する復旧関連情報のユーザへの提供を可能にするブートプログラムであり得る。フラッシュROM121内のブートプログラムは、典型的には、フラッシュROM120内のブートプログラムが正当ではないと判定された場合に、バックアップとして実行される。フラッシュROM121に記憶されるプログラムもまた、サブCPU122による正当性の検証の対象とされる。
サブCPU122は、フラッシュROM120に記憶されているプログラムの正当性をメインCPU101による実行の前に検証する、補助的なプロセッサである。即ち、メインCPU101は実行手段の一例であり、サブCPU122は検証手段の一例である。プログラムが正当な開発者の意図に反して変化している場合には、検証の結果として、プログラムは正当ではないと判定され得る。一方で、そうした変化が無い場合には、プログラムは正当であると判定され得る。例えば、MFP1に不正にアクセスした第三者がプログラムを改竄した場合に、プログラムは正当性を失う。また、装置の経年劣化に起因してプログラムデータのビットが書き換わった場合にも、プログラムは正当性を失う。サブCPU122による正当性検証の手法について、後にさらに説明する。サブCPU122は、フラッシュROM120に記憶されている第1のプログラム(例えば、ブートプログラム)が検証の結果として正当であると判定される場合に、メインCPU101による第1のプログラムの実行を可能にする。また、サブCPU122は、第1のプログラムが正当ではないと判定される場合に、第1のプログラムの復旧用バージョンを用いて、正当性を否定された第1のプログラムを復旧する。第1のプログラムの復旧用バージョンは、例えば、フラッシュROM120に設けられる保護された(例えば、書換不能な)記憶領域に予め記憶され得る。
リセット回路123は、リセット信号線131を介してサブCPU122へ接続され、サブCPU122へリセット制御信号を出力する。一方、サブCPU122は、リセット信号線132を介してメインCPU101へ接続され、メインCPU101へリセット制御信号を出力する。これらリセット制御信号は、例えば、“Lo”又は“Hi”という2通りの信号レベルを有する信号である(例えば、“Lo”はゼロに相当する電気信号レベル、“Hi”は1に相当する電気信号レベルであり得る)。リセット制御信号の“Lo”レベルは信号の出力先のCPUがリセット状態(無効化状態)に維持されるべきことを、“Hi”レベルは当該CPUが通常の動作を行うべきことを意味する。
リセット回路123は、例えば、MFP1の電源が投入されると、サブCPU122へ出力されるリセット制御信号の信号レベルを“Lo”から“Hi”へ切替える。この切替えは、リセット解除の指示を意味し、それによりサブCPU122の動作が可能とされる。サブCPU122は、リセット解除の指示に応じて動作を開始し、フラッシュROM120から第1のプログラムを読出して、第1のプログラムの正当性を検証する。この間、サブCPU122からメインCPU101へ出力されるリセット制御信号の信号レベルは、“Lo”に維持される。サブCPU122は、第1のプログラムの検証に成功すると、メインCPU101へのリセット制御信号の信号レベルを“Lo”から“Hi”へ切替える。この切替えは、リセット解除の指示を意味し、それによりメインCPU101の動作が可能とされる。メインCPU101は、リセット解除の指示に応じて動作を開始し、第1のプログラムを実行する。
このように、メインCPU101がMFP1の主要なプログラムである第1のプログラムを実行する前に当該プログラムの正当性をサブCPU122が検証することで、プログラムの改竄及び劣化といったリスクからMFP1が保護される。加えて、サブCPU122が検証失敗時にプログラムを復旧する機能を有することで、MFP1のダウンタイムが短縮され、可用性が向上する。しかしながら、図1からも理解されるように、サブCPU122は、操作部111及びネットワークI/F104といった情報提供手段から分離されている。これは、サブCPU122がメインCPU101により実行されるべきプログラムを復旧している期間中、サブCPU122によりユーザへ復旧に関する情報を提供できないことを意味する。復旧処理の期間中、ユーザへの情報提供がなされなければ、ユーザは、MFP1が起動しない原因を把握することができず、MFP1の電源をオフにしてしまうかもしれない。ユーザが一旦電源をオフにすると、プログラムの復旧は一からやり直しとなる。
こうした不都合を解消するために、本実施形態では、上述したように、フラッシュROM120とは別のフラッシュROM121に、メインCPU101により実行可能なプログラムが予め記憶される。サブCPU122は、フラッシュROM120に記憶されている第1のプログラムが正当ではないと判定される場合に、フラッシュROM121に記憶されている第2のプログラム(例えば、バックアップ用のブートプログラム)の正当性を検証する。そして、サブCPU122は、第2のプログラムが正当であると判定される場合に、メインCPU101による第2のプログラムの実行を可能にし、フラッシュROM120の第1のプログラムの復旧を開始する。メインCPU101は、第2のプログラムを実行することにより、第1のプログラムの復旧に関する情報を、ユーザへ提示する。このように、復旧処理の期間中に、サブCPU122の代わりにメインCPU101が復旧に関する情報をユーザへ提示することで、MFP1が通常通り起動しない原因をユーザに知らせることができる。それにより、ユーザがむやみに電源をオフにすることが無くなり、プログラムの安全な復旧が担保される。次節より、動作の安全性とプログラム復旧時のユーザへの情報提供とを両立する上述した仕組みを備えたMFP1の各部の構成について、詳細に説明する。
<<2.各部の詳細>>
<2−1.メインCPUの構成例>
図2は、本実施形態に係るメインCPU101の具体的な構成の一例を示すブロック図である。メインCPU101は、CPUコア201、SPI I/F202、バスI/F203、リセット端子204、SRAM205及び信号バス209を含む。
<2−1.メインCPUの構成例>
図2は、本実施形態に係るメインCPU101の具体的な構成の一例を示すブロック図である。メインCPU101は、CPUコア201、SPI I/F202、バスI/F203、リセット端子204、SRAM205及び信号バス209を含む。
CPUコア201は、メインCPU101の機能を遂行するための演算を実行するプロセッサコアである。SPI I/F202は、SPIバス115を介するメインCPU101と他のSPIデバイスとの間の通信のためのインタフェース(SPIマスタともいう)である。バスI/F203は、信号バス110を介するメインCPU101と他のモジュールとの間の通信のためのインタフェースである。リセット端子204は、サブCPU122からリセット信号線132を介して入力されるリセット制御信号を受け付ける端子である。SRAM205は、メインCPU101のいわゆるキャッシュメモリであり、CPUコア201により演算用のワークメモリとして使用され得る。信号バス209は、CPUコア201、SPI I/F202、バスI/F203及びSRAM205を相互に接続する。
本実施形態において、MFP1の電源が投入された直後に、リセット端子204が受け付けるリセット制御信号のレベルは“Lo”であり、メインCPU101はリセット状態(無効化状態)に維持される。その間、サブCPU122によりプログラムの正当性の検証が行われる。サブCPU122により第1のプログラムが正当であると判定された場合、リセット制御信号のレベルが“Hi”へ切替わり、CPUコア201は動作を開始する。その動作の冒頭において、CPUコア201は、フラッシュROM120の所定のアドレスに記憶されている第1のプログラムをSPIバス115を介して読出し、読出した第1のプログラムを実行する。上述したように、第1のプログラムは、少なくともブートコードを記述したブートプログラムを含み得る。例えば、メインCPU101は、ブートプログラムを実行してメインCPU101の入出力機能を初期化した後、さらにOS、各モジュールのドライバ及びその他のアプリケーションといったプログラムを実行してMFP1の通常の動作を開始する。サブCPU122により第1のプログラムが正当ではないと判定されたものの、第2のプログラムが正当であると判定された場合にも、リセット端子204へ入力されるリセット制御信号のレベルは“Hi”へ切替わり、CPUコア201は動作を開始する。その動作の冒頭において、CPUコア201は、フラッシュROM121の所定のアドレスに記憶されている第2のプログラムをSPIバス115を介して読出し、読出した第2のプログラムを実行する。上述したように、第2のプログラムは、少なくとも第1のプログラムの復旧に関する情報をユーザへ提示するためのプログラムコードを含み得る。
本実施形態において、SPIバス115は、メインCPU101からの信号経路の接続先を、フラッシュROM120及びフラッシュROM121の間で切替可能な切替手段としてのバススイッチ(図1には示していない)をさらに備える。バススイッチによる信号経路の切替えは、後述するように、サブCPU122により制御される。サブCPU122による制御の下で、SPIバス115のバススイッチが信号経路を切替えることで、どこからプログラムを読出すべきかをメインCPU101が認識する必要性が排除される。それにより、メインCPU101の実装への影響を最小化しつつ、本実施形態の仕組みをMFP1に取り入れることが可能とされる。SPIバス115のバススイッチの具体的な構成の一例について、後にさらに説明する。
<2−2.サブCPUの構成例>
図3は、本実施形態に係るサブCPU122の具体的な構成の一例を示すブロック図である。サブCPU122は、CPUコア301、SPI I/F302、GPIO303及び304、OTP305、SRAM306、リセット端子307、暗号処理部308、信号バス309、ブートROM310及び暗号RAM311を含む。
図3は、本実施形態に係るサブCPU122の具体的な構成の一例を示すブロック図である。サブCPU122は、CPUコア301、SPI I/F302、GPIO303及び304、OTP305、SRAM306、リセット端子307、暗号処理部308、信号バス309、ブートROM310及び暗号RAM311を含む。
CPUコア301は、サブCPU122の機能を遂行するための演算を実行するプロセッサコアである。SPI I/F302は、SPIバス115を介するサブCPU122と他のSPIデバイスとの間の通信のためのインタフェース(SPIマスタともいう)である。汎用入出力端子(GPIO)303は、リセット信号線132を介してメインCPU101へ接続される端子であり、メインCPU101へのリセット制御信号の出力のために使用される。GPIO304は、切替信号線133を介してSPIバス115のバススイッチ501へ接続される端子であり、バススイッチ501への切替信号の出力のために使用される。OTP(One Time Programmable)305は、製造時に一度だけ書込みが可能であって、書換えが不能なメモリ領域である。本実施形態では、サブCPU122のファームウェアのハッシュ値を公開鍵暗号方式の秘密鍵で暗号化した暗号化済みハッシュ値(即ち、署名)及び後述するTagのアドレスが、予めOTP305に書込まれ得る。SRAM306は、サブCPU122のいわゆるキャッシュメモリであり、CPUコア301により演算用のワークメモリとして使用され得る。リセット端子307は、リセット回路123からリセット信号線131を介して入力されるリセット制御信号を受け付ける端子である。暗号処理部308は、サブCPU122による署名検証を支援する、暗号関連処理に専用のプロセッサである。例えば、暗号処理部308は、サブCPU122のファームウェア及びメインCPU101のプログラムの署名を復号することにより、それぞれの正当なハッシュ値を復元する。暗号処理部308は、プログラムデータからハッシュ値を導出するためのハッシュ計算を行ってもよい。信号バス309は、CPUコア301、SPI I/F302、GPIO303、GPIO304、OTP305、SRAM306、暗号処理部308、ブートROM310及び暗号RAM311を相互に接続する。ブートROM310は、サブCPU122のブートコードを記述したブートプログラムを予め記憶する記憶デバイスである。暗号RAM311は、暗号処理部308により処理される高い機密性の求められるデータを一時的に記憶する、暗号関連処理に専用のメモリである。
本実施形態において、MFP1の電源が投入されると、リセット端子307が受付けるリセット制御信号のレベルは“Lo”から“Hi”へ切替わり、CPUコア301は動作を開始する。その動作の冒頭において、CPUコア301は、ブートROM310から自身のブートプログラムをSRAM306へ読出し、読出したブートプログラムを実行する。そして、CPUコア301は、ブートプログラムに従って、上述したようにメインCPU101により実行されるべきプログラムの正当性の検証を開始する。
<2−3.メモリマップ>
図4は、本実施形態に係るフラッシュROM120及び121のメモリマップの一例を示す説明図である。例えば、フラッシュROM120は、メインCPU FW(例えば、ブートプログラム)401、署名402、Tag403、サブCPU FW404、署名405、ROM−ID406及び復旧用FW407を予め記憶する。メインCPUファームウェア(FW)401は、例えば、メインCPU101のブートプログラムである。メインCPU FW401は、典型的には、フラッシュROM120の先頭の記憶領域に記憶される。署名402は、メインCPU FW401の正当性検証用の署名(例えば、RSA署名)である。署名402は、(正当な)メインCPU FW401のハッシュ値を暗号化することにより予め導出され、フラッシュROM120に記憶され得る。Tag403は、サブCPU FW404が記憶されている記憶領域の先頭のアドレスを示すデータである。Tag403のアドレスは、上述したようにOTP305に記憶される。サブCPU FW404は、CPUコア301により実行されるプログラムコードを含むファームウェアである。署名405は、サブCPU FW404の正当性検証用の署名(例えば、ECDSA署名)である。署名405は、(正当な)サブCPU FW404の全体又は先頭の特定部分に基づいて予め導出され、フラッシュROM120に記憶され得る。ROM−ID406は、メインCPU FW401が記憶されている記憶領域の先頭のアドレス、その記憶領域のサイズ及び署名402のアドレスを含むデータである。復旧用FW407は、メインCPU FW401の正当性が失われた場合にメインCPU FW401に上書きされる、同一ファームウェアの復旧用バージョンである。復旧用FW407と共に、署名402の復旧用バージョンがフラッシュROM120にさらに記憶されてもよい。これら復旧用バージョンの記憶領域は、書換不能となるように保護される。例えば、書換えから保護されるべきROMの特定のアドレス範囲を指定する情報が、OTPのレジスタ領域において保持されてもよい。
図4は、本実施形態に係るフラッシュROM120及び121のメモリマップの一例を示す説明図である。例えば、フラッシュROM120は、メインCPU FW(例えば、ブートプログラム)401、署名402、Tag403、サブCPU FW404、署名405、ROM−ID406及び復旧用FW407を予め記憶する。メインCPUファームウェア(FW)401は、例えば、メインCPU101のブートプログラムである。メインCPU FW401は、典型的には、フラッシュROM120の先頭の記憶領域に記憶される。署名402は、メインCPU FW401の正当性検証用の署名(例えば、RSA署名)である。署名402は、(正当な)メインCPU FW401のハッシュ値を暗号化することにより予め導出され、フラッシュROM120に記憶され得る。Tag403は、サブCPU FW404が記憶されている記憶領域の先頭のアドレスを示すデータである。Tag403のアドレスは、上述したようにOTP305に記憶される。サブCPU FW404は、CPUコア301により実行されるプログラムコードを含むファームウェアである。署名405は、サブCPU FW404の正当性検証用の署名(例えば、ECDSA署名)である。署名405は、(正当な)サブCPU FW404の全体又は先頭の特定部分に基づいて予め導出され、フラッシュROM120に記憶され得る。ROM−ID406は、メインCPU FW401が記憶されている記憶領域の先頭のアドレス、その記憶領域のサイズ及び署名402のアドレスを含むデータである。復旧用FW407は、メインCPU FW401の正当性が失われた場合にメインCPU FW401に上書きされる、同一ファームウェアの復旧用バージョンである。復旧用FW407と共に、署名402の復旧用バージョンがフラッシュROM120にさらに記憶されてもよい。これら復旧用バージョンの記憶領域は、書換不能となるように保護される。例えば、書換えから保護されるべきROMの特定のアドレス範囲を指定する情報が、OTPのレジスタ領域において保持されてもよい。
図4には、フラッシュROM121がフラッシュROM120と同等のメモリマップで構成される例が示されている。しかしながら、本開示に係る技術は、これらROMのメモリマップが相違する例にも適用可能である。図4の例では、フラッシュROM121は、メインCPU FW411、署名412、Tag403、サブCPU FW404、署名405、ROM−ID406及び復旧用FW417を予め記憶する。メインCPU FW411は、例えば、メインCPU101のブートプログラムであり、但し、メインCPU FW401の復旧に関する情報をユーザへ提示するためのプログラムコードを含む。メインCPU FW411は、典型的には、フラッシュROM121の先頭の記憶領域に記憶される。署名412は、メインCPU FW411の正当性検証用の署名である。署名412は、(正当な)メインCPU FW411のハッシュ値を暗号化することにより予め導出され、フラッシュROM121に記憶され得る。ROM−ID416は、メインCPU FW411が記憶されている記憶領域の先頭のアドレス、その記憶領域のサイズ及び署名412のアドレスを含むデータである。復旧用FW417は、メインCPU FW411の正当性が失われた場合にメインCPU FW411に上書きされる、同一ファームウェアの復旧用バージョンである。復旧用FW417と共に、署名412の復旧用バージョンがフラッシュROM121にさらに記憶されてもよい。これら復旧用バージョンの記憶領域は、書換不能となるように保護される。例えば、書換えから保護されるべきROMの特定のアドレス範囲を指定する情報が、OTPのレジスタ領域において保持されてもよい。
なお、ここでは一例として、署名402、412がRSA署名、署名405がECDSA署名である例を説明したが、各署名は、RSA署名、DSA署名又はECDSA署名といった、いかなる種類のデジタル署名方式に基づいていてもよい。
<2−4.バススイッチの構成例>
図5は、一実施形態においてSPIバス115に設けられるバススイッチ501と他のデバイスとの間の接続関係の一例を示すブロック図である。
図5は、一実施形態においてSPIバス115に設けられるバススイッチ501と他のデバイスとの間の接続関係の一例を示すブロック図である。
SPIは、集積回路間のシリアル通信のための同期的な通信方式の一種である。SPIバスの基本的なアーキテクチャは、マスタデバイスとスレーブデバイスとの間を接続する4本の信号線からなる。それら信号線のうちの2本は、それぞれクロック信号及びスレーブ選択信号(チップ選択(CS)信号ともいう)の伝送用である。他の2本は、マスタデバイスからスレーブデバイスへ(マスタ・アウト・スレーブ・イン(MOSI))のデータ信号の伝送用、及びスレーブデバイスからマスタデバイスへ(マスタ・イン・スレーブ・アウト(MISO))のデータ信号の伝送用である。マスタデバイスは、スレーブ選択信号をアサートして通信相手のスレーブデバイスを選択することを示しつつ、クロック信号をスレーブデバイスへ供給する。すると、それらクロック信号及びスレーブ選択信号に従って、マスタデバイスから選択されたスレーブデバイスへ、又は選択されたスレーブデバイスからマスタデバイスへデータが送信される。
図5の例では、メインCPU101のSPI I/F202及びサブCPU122のSPI I/F302がマスタデバイスであり、フラッシュROM120及びフラッシュROM121がスレーブデバイスである。
サブCPU122のSPI I/F302は、スレーブ選択信号端子(CS)、クロック信号端子(CLK)、データ出力端子(MOSI)及びデータ入力端子(MISO)を有する。サブCPU122のスレーブ選択信号端子は、信号線511を介してバススイッチ501の第1選択入力端子(IN_CS_A)へ接続される。サブCPU122のクロック信号端子は、信号線512を介してバススイッチ501の第1クロック入力端子(IN_CLK_A)へ接続される。サブCPU122のデータ出力端子は、信号線513を介してバススイッチ501の第1データ入力端子(IN_MOSI_A)へ接続される。サブCPU122のデータ入力端子は、信号線514を介してバススイッチ501の第1データ出力端子(IN_MISO_A)へ接続される。サブCPU122の上述したGPIO304は、バススイッチ501の切替制御端子(SELECT)へ接続される。
メインCPU101のSPI I/F202もまた、スレーブ選択信号端子(CS)、クロック信号端子(CLK)、データ出力端子(MOSI)及びデータ入力端子(MISO)を有する。メインCPU101のスレーブ選択信号端子は、信号線521を介してバススイッチ501の第2選択入力端子(IN_CS_B)へ接続される。メインCPU101のクロック信号端子は、信号線522を介してバススイッチ501の第2クロック入力端子(IN_CLK_B)へ接続される。メインCPU101のデータ出力端子は、信号線523を介してバススイッチ501の第2データ入力端子(IN_MOSI_B)へ接続される。メインCPU101のデータ入力端子は、信号線524を介してバススイッチ501の第2データ出力端子(IN_MISO_B)へ接続される。
フラッシュROM120のSPI I/Fは、スレーブ選択信号端子(CS)、クロック信号端子(CLK)、データ入力端子(MOSI)及びデータ出力端子(MISO)を有する。フラッシュROM120のスレーブ選択信号端子は、信号線531を介してバススイッチ501の第1選択出力端子(OUT_CS_X)へ接続される。フラッシュROM120のクロック信号端子は、信号線532を介してバススイッチ501の第1クロック出力端子(OUT_CLK_X)へ接続される。フラッシュROM120のデータ入力端子は、信号線533を介してバススイッチ501の第1データ出力端子(OUT_MOSI_X)へ接続される。フラッシュROM120のデータ出力端子は、信号線534を介してバススイッチ501の第1データ入力端子(OUT_MISO_X)へ接続される。
フラッシュROM121のSPI I/Fは、スレーブ選択信号端子(CS)、クロック信号端子(CLK)、データ入力端子(MOSI)及びデータ出力端子(MISO)を有する。フラッシュROM121のスレーブ選択信号端子は、信号線541を介してバススイッチ501の第2選択出力端子(OUT_CS_Y)へ接続される。フラッシュROM121のクロック信号端子は、信号線542を介してバススイッチ501の第2クロック出力端子(OUT_CLK_Y)へ接続される。フラッシュROM121のデータ入力端子は、信号線543を介してバススイッチ501の第2データ出力端子(OUT_MOSI_Y)へ接続される。フラッシュROM121のデータ出力端子は、信号線544を介してバススイッチ501の第2データ入力端子(OUT_MISO_Y)へ接続される。
バススイッチ501は、サブCPU122から切替信号線133を介して切替制御端子へ入力される切替信号に基づいて、サブCPU122からのSPI信号経路の接続先を、フラッシュROM120及びフラッシュROM121の間で切替可能である。サブCPU122からのSPI信号経路は信号線511、512、513、514からなる。例えば、サブCPU122は、動作を開始すると、信号レベルを“Lo”へ設定した切替信号をバススイッチ501へ出力する。バススイッチ501は、切替信号が“Lo”を示すことに基づいて、サブCPU122からの信号経路をフラッシュROM120へ接続する。具体的には、サブCPU122からの信号線511、512、513及び514が、フラッシュROM120への信号線531、532、533及び534へそれぞれ接続される。それにより、サブCPU122がフラッシュROM120へアクセス可能となり、サブCPU122がスレーブ選択信号をアサートしてクロック信号を出力すると、フラッシュROM120からサブCPU122へのデータの読出しが可能となる。サブCPU122は、この状態で、第1のプログラム(例えばメインCPU FW401)をフラッシュROM120から読出して、第1のプログラムの正当性を検証する。
加えて、バススイッチ501は、サブCPU122からの上記切替信号に基づいて、メインCPU101からの信号経路の接続先を、フラッシュROM120及びフラッシュROM121の間で切替可能である。メインCPU101からの信号経路は信号線521、522、523、524からなる。例えば、サブCPU122は、検証の結果として第1のプログラムが正当であると判定すると、信号レベルを“Hi”へ設定した切替信号をバススイッチ501へ出力する。バススイッチ501は、切替信号が“Hi”を示すことに基づいて、メインCPU101からの信号経路をフラッシュROM120へ接続する。具体的には、メインCPU101からの信号線521、522、523及び524が、フラッシュROM120への信号線531、532、533及び534へそれぞれ接続される。それにより、メインCPU101がフラッシュROM120へアクセス可能となる。また、サブCPU122は、メインCPU101へのリセット制御信号の信号レベルを“Lo”から“Hi”へ切替える。それにより、メインCPU101が動作を開始する。メインCPU101は、この状態で、第1のプログラム(例えばメインCPU FW401)をフラッシュROM120から読出して、第1のプログラムを実行する。
サブCPU122は、第1のプログラムが正当ではないと判定した場合にも、信号レベルを“Hi”へ設定した切替信号をバススイッチ501へ出力する。バススイッチ501は、切替信号が“Hi”を示すことに基づいて、サブCPU122からの信号経路をフラッシュROM121へ接続する。具体的には、サブCPU122からの信号線511、512、513及び514が、フラッシュROM121への信号線541、542、543及び544へそれぞれ接続される。それにより、サブCPU122がフラッシュROM121へアクセス可能となる。サブCPU122は、この状態で、第2のプログラム(例えばメインCPU FW411)をフラッシュROM121から読出して、第2のプログラムの正当性を検証する。サブCPU122は、メインCPU101へのリセット制御信号の信号レベルを“Lo”のまま維持し、よってメインCPU101のリセット状態は解除されないため、メインCPU101は動作しない。
サブCPU122は、検証の結果として第2のプログラムが正当であると判定すると、切替信号の信号レベルを再び“Lo”へ設定した切替信号をバススイッチ501へ出力する。バススイッチ501は、切替信号が“Lo”を示すことに基づいて、メインCPU101からの信号経路をフラッシュROM121へ接続する。具体的には、メインCPU101からの信号線521、522、523及び524が、フラッシュROM121への信号線541、542、543及び544へそれぞれ接続される。それにより、メインCPU101がフラッシュROM121へアクセス可能となる。また、サブCPU122は、メインCPU101へのリセット制御信号の信号レベルを“Lo”から“Hi”へ切替える。それにより、メインCPU101が動作を開始する。メインCPU101は、この状態で、第2のプログラム(例えばメインCPU FW411)をフラッシュROM120から読出して、第2のプログラムを実行する。
バススイッチ501は、切替信号が“Lo”を示すことに基づいて、上述したようにメインCPU101からの信号経路をフラッシュROM121へ接続すると共に、サブCPU122からの信号経路をフラッシュROM120へ接続する。サブCPU122は、このようにバススイッチ501により形成される接続を介して、フラッシュROM120の第1のプログラムを、フラッシュROM120の保護領域に記憶されている復旧用バージョンで上書きすることにより復旧する。この間、メインCPU101は、上述したように第2のプログラムを実行しており、第1のプログラムの復旧に関する情報がメインCPU101によりユーザへ提示される。
図5には示していないものの、サブCPU122は、追加的な割込信号線を介してメインCPU101へ接続され得る。サブCPU122は、フラッシュROM120の第1のプログラムの復旧の完了に応じて、フラッシュROM121の第2のプログラムを実行しているメインCPU101へ割込信号を出力してもよい。また、メインCPU101は、サブCPU122からの割込信号の検知に応じて、第2のプログラムの実行を終了し、MFP1を再起動してもよい。それにより、復旧後の正当な第1のプログラムに基づくMFP1の通常の動作を開始することができる。MFP1の再起動までの間、第1のプログラムを復旧中であるという情報がユーザへ提示されるため、ユーザは、状況を適切に把握することができる。また、第1のプログラムと同等の機能又は部分的に制限された機能を第2のプログラムによってユーザへ提供することも可能である。
サブCPU122は、検証の結果として第2のプログラムもまた正当ではないと判定すると、切替信号の信号レベルを“Lo”へ設定して第1のプログラムを復旧した後、切替信号の信号レベルを“Hi”へ設定して第2のプログラムを復旧し得る。この場合、少なくとも第1のプログラムの復旧が完了するまで、メインCPU101のリセット状態は解除されなくてよい。
表1は、バススイッチ501における、切替信号の状態に基づくスレーブ選択信号の切替制御の規則を示す真理値表である。SPIバスの他の種類の信号の切替制御の規則も、同様の真理値表で表され得る。
表1の例によれば、バススイッチ501は、切替信号が“Lo”を示す場合、サブCPU122からのスレーブ選択信号の信号経路をフラッシュROM120へ、メインCPU101からのスレーブ選択信号の信号経路をフラッシュROM121へ接続する。また、バススイッチ501は、切替信号が“Hi”を示す場合、サブCPU122からのスレーブ選択信号の信号経路をフラッシュROM121へ、メインCPU101からのスレーブ選択信号の信号経路をフラッシュROM120へ接続する。但し、表1に示した規則は一例に過ぎず、他の規則が使用されてもよい(例えば、切替信号の信号レベルを逆にした規則が使用されてもよい)。
<2−5.ユーザへ提示される情報の例>
メインCPU101によるユーザへの第1のプログラムの復旧に関する情報の提示は、画面上で視覚的に行われてもよい。図6は、一実施形態において画面上に表示され得る復旧に関する情報の一例を示す模式図である。図6には、例えば操作部111の画面上に表示され得る情報通知ウィンドウ600が示されており、情報通知ウィンドウ600は、MFP1がシステムの起動に必要なプログラムを復旧中であるというメッセージを表示している。情報通知ウィンドウ600は、復旧の完了までに要すると推定される残り時間を表示してもよい。図6の例では、情報通知ウィンドウ600は、MFP1の電源をオフにしないことをユーザへ求めるメッセージをさらに表示している。ユーザは、これらメッセージを見ることで、ある程度の時間待機すればMFP1の動作が正常化する見込みであることを把握し、むやみにMFP1の電源をオフにすることを控えることができる。なお、ユーザへのこうした情報の提示は、スピーカを介した音声出力又はユーザのアカウントへのメッセージの送信といった他の手段で行われてもよい。
メインCPU101によるユーザへの第1のプログラムの復旧に関する情報の提示は、画面上で視覚的に行われてもよい。図6は、一実施形態において画面上に表示され得る復旧に関する情報の一例を示す模式図である。図6には、例えば操作部111の画面上に表示され得る情報通知ウィンドウ600が示されており、情報通知ウィンドウ600は、MFP1がシステムの起動に必要なプログラムを復旧中であるというメッセージを表示している。情報通知ウィンドウ600は、復旧の完了までに要すると推定される残り時間を表示してもよい。図6の例では、情報通知ウィンドウ600は、MFP1の電源をオフにしないことをユーザへ求めるメッセージをさらに表示している。ユーザは、これらメッセージを見ることで、ある程度の時間待機すればMFP1の動作が正常化する見込みであることを把握し、むやみにMFP1の電源をオフにすることを控えることができる。なお、ユーザへのこうした情報の提示は、スピーカを介した音声出力又はユーザのアカウントへのメッセージの送信といった他の手段で行われてもよい。
<<3.処理の流れ>>
<3−1.サブCPUの処理>
図7は、本実施形態に係るサブCPU122により実行される処理の流れの一例を示すフローチャートである。なお、以下の説明では、処理ステップをS(ステップ)と略記する。
<3−1.サブCPUの処理>
図7は、本実施形態に係るサブCPU122により実行される処理の流れの一例を示すフローチャートである。なお、以下の説明では、処理ステップをS(ステップ)と略記する。
まず、S701で、サブCPU122は、ブートROM310内のブートプログラムを実行し、サブCPU FW404及び署名405をフラッシュROM120からSRAM306へ読出す。このとき、SPIバス115のバススイッチ501は、サブCPU122からの信号経路をフラッシュROM120へ接続している。次いで、サブCPU122は、S702で、サブCPU FW404から導出されるハッシュ値と署名405との比較に基づいて、サブCPU FW404が正当であるかを判定する。その後の処理は、判定の結果に依存してS703で分岐し、サブCPU FW404が正当ではないと判定された場合には、図7の処理は終了する。サブCPU FW404が正当であると判定された場合、処理はS704へ進む。
S704で、サブCPU122は、正当であると判定したサブCPU FW404を実行し、メインCPU FWの検証を開始する。S705で、サブCPU122は、メインCPU FW401及び署名402をフラッシュROM120からSRAM306へ読出す。SPIバス115のバススイッチ501は、サブCPU122からの信号経路をフラッシュROM120へ接続したままである。次いで、サブCPU122は、S706で、メインCPU FW401から導出されるハッシュ値と署名402との比較に基づいて、メインCPU FW401が正当であるかを判定する。その後の処理は、判定の結果に依存してS707で分岐し、メインCPU FW401が正当ではないと判定された場合には、処理はS711へ進む。メインCPU FW401が正当であると判定された場合、処理はS708へ進む。
S708で、サブCPU122は、メインCPU FW401が正当であるという判定に応じて、バススイッチ501向けの切替信号の信号レベルを切替えて、バススイッチ501にメインCPU101からの信号経路をフラッシュROM120へ接続させる。次いで、S709で、サブCPU122は、“Hi”に設定したリセット制御信号をメインCPU101へ出力して、メインCPU101のリセット状態を解除し、メインCPU101によるプログラムの実行を可能にする。その後、S710で、サブCPU122は、消費電力を低減するためにスリープ状態へ移行し得る。スリープ状態においても、サブCPU122は、“Hi”に設定したリセット制御信号のメインCPU101への出力を維持する。なお、サブCPU122がプログラムの正当性検証以外の用途に再利用される場合には、サブCPU122は、スリープ状態へ移行しなくてもよく、又は一旦スリープ状態へ移行したサブCPU122が(例えば、割込信号に応じて)通常状態へ戻ってもよい。
S711で、サブCPU122は、メインCPU FW401が正当ではないという判定に応じて、バススイッチ501向けの切替信号の信号レベルを切替えて、バススイッチ501にサブCPU122からの信号経路をフラッシュROM121へ接続させる。メインCPU101はリセット状態のまま維持される。S712で、サブCPU122は、メインCPU FW411及び署名412をフラッシュROM121からSRAM306へ読出す。次いで、サブCPU122は、S713で、メインCPU FW411から導出されるハッシュ値と署名412との比較に基づいて、メインCPU FW411が正当であるかを判定する。その後の処理は、判定の結果に依存してS714で分岐し、メインCPU FW411が正当ではないと判定された場合には、処理はS721へ進む。メインCPU FW411が正当であると判定された場合、処理はS715へ進む。
S715で、サブCPU122は、メインCPU FW411が正当であるという判定に応じて、バススイッチ501向けの切替信号の信号レベルを切替えて、バススイッチ501にメインCPU101からの信号経路をフラッシュROM121へ接続させる。バススイッチ501は、この切替信号に基づいて、メインCPU101からの信号経路をフラッシュROM121へ接続すると共に、サブCPU122からの信号経路をフラッシュROM120へ接続する。次いで、S716で、サブCPU122は、“Hi”に設定したリセット制御信号をメインCPU101へ出力して、メインCPU101のリセット状態を解除し、メインCPU101によるプログラムの実行を可能にする。次いで、S717で、サブCPU122は、フラッシュROM120の先頭の記憶領域に記憶されているメインCPU FW401を、書換不能な保護領域に記憶されている復旧用バージョン407で上書きすることにより復旧する。メインCPU FW401の署名402も同様に復旧され得る。ここでのサブCPU122によるメインCPU FW401の復旧と並行して、メインCPU101は、メインCPU FW411を実行して、メインCPU FW401の復旧に関する情報をユーザへ提示し得る。サブCPU122は、メインCPU FW401の復旧を完了すると、S718で、メインCPU FW411を実行しているメインCPU101へ割込信号を出力して、メインCPU101にMFP1の再起動をトリガさせる。
S721で、サブCPU122は、メインCPU FW411も正当ではないという判定に応じて、バススイッチ501向けの切替信号の信号レベルを切替えて、バススイッチ501にサブCPU122からの信号経路をフラッシュROM120へ接続させる。メインCPU101はリセット状態のまま維持される。次いで、S722で、サブCPU122は、フラッシュROM120のメインCPU FW401を、復旧用バージョン407で上書きすることにより復旧する。メインCPU FW401の署名402も同様に復旧され得る。次いで、S723で、サブCPU122は、バススイッチ501向けの切替信号の信号レベルを切替えて、バススイッチ501にサブCPU122からの信号経路をフラッシュROM121へ接続させる。メインCPU101はリセット状態のまま維持される。次いで、S724で、サブCPU122は、フラッシュROM121のメインCPU FW411を、復旧用バージョン417で上書きすることにより復旧する。メインCPU FW411の署名412も同様に復旧され得る。次いで、S725で、サブCPU122は、例えばリセット回路123を制御して、MFP1の再起動をトリガする。
<3−2.メインCPUの処理>
図8は、本実施形態に係るメインCPU101により実行される処理の流れの一例を示すフローチャートである。
図8は、本実施形態に係るメインCPU101により実行される処理の流れの一例を示すフローチャートである。
メインCPU101は、例えば図7のS709又はS716においてリセット状態を解除されると、S801で、メインCPU FWをフラッシュROM120又はフラッシュROM121から読出す。このとき、メインCPU FW401は、同じスレーブ選択信号端子においてスレーブ選択信号をアサートして、同じクロック信号端子からクロック信号を出力するだけであり、どちらのフラッシュROMへアクセスするかを認識しなくてよい。どちらのフラッシュROMからメインCPU FWが読出されるかは、サブCPU122の制御下にあるバススイッチ501の接続状態によって決まる。次いで、S802で、メインCPU101は、読出したメインCPU FWを実行する。ここで実行されるファームウェアは、例えばブートプログラムを含み得る。次いで、S803で、メインCPU101は、HDD108からオペレーティングシステム(OS)ソフトウェアを読出す。次いで、S804で、メインCPU101は、読出したOSソフトウェアを実行して、MFP1のOSを起動する。次いで、S805で、メインCPU101は、操作I/F103、ネットワークI/F104、プリンタ105、スキャナ106、FAX107、画像処理部109及び操作部111を初期化して、MFP1をユーザにより使用可能な状態へセットアップする。
図8に示した処理は、S806で、メインCPU101がメインCPU FW411を実行しているのか否かに依存して分岐する。メインCPU101がメインCPU FW411を実行している場合、メインCPU101は、S807で、メインCPU FW401の復旧に関する(例えば、MFP1の電源をオフにしないことをユーザへ求める内容を含む)情報をユーザへ提示する。また、S808で、メインCPU101は、サブCPU122からの割込信号の入力を監視する。メインCPU101は、メインCPU FW401の復旧を完了したサブCPU122からの割込信号を検知すると、S809で、MFP1を再起動する。メインCPU101がメインCPU FW401を実行している場合には、S807〜S809は行われず、MFP1の通常の動作が提供される。
<<4.まとめ>>
ここまで、図1〜図8を用いて、本開示の実施形態について詳細に説明した。上述した実施形態では、情報処理装置のメインCPUによる実行のための第1のプログラムが第1の記憶手段に記憶され、第2のプログラムが第2の記憶手段に記憶される。そして、サブCPUにより、第1のプログラムの正当性が検証され、第1のプログラムが正当であると判定された場合に、メインCPUによる第1のプログラムの実行が可能とされる。一方、
第1のプログラムが正当ではないと判定された場合、サブCPUにより、第2のプログラムの正当性が検証され、第2のプログラムが正当であると判定された場合に、メインCPUによる第2のプログラムの実行が可能とされる。この場合、メインCPUが正当であると判定された第2のプログラムを実行し、その実行と並行して、サブCPUが第1の記憶手段の第1のプログラムを復旧する。そして、第2のプログラムを実行するメインCPUにより、第1のプログラムの復旧に関する情報がユーザへ提示される。かかる構成によれば、サブCPUにより正当であると判定されたプログラムのみがメインCPUにより実行されることで装置の動作の安全性が確保され、且つプログラムの復旧の期間中にユーザへ情報を提供することができる。このようにして、復旧処理中にユーザへ情報が提供されない不都合が解消される。また、復旧処理を行うサブCPUに代わってメインCPUが情報を提供するため、サブCPUが情報提供手段を扱う必要性が排除され、実装の複雑化が回避される。
ここまで、図1〜図8を用いて、本開示の実施形態について詳細に説明した。上述した実施形態では、情報処理装置のメインCPUによる実行のための第1のプログラムが第1の記憶手段に記憶され、第2のプログラムが第2の記憶手段に記憶される。そして、サブCPUにより、第1のプログラムの正当性が検証され、第1のプログラムが正当であると判定された場合に、メインCPUによる第1のプログラムの実行が可能とされる。一方、
第1のプログラムが正当ではないと判定された場合、サブCPUにより、第2のプログラムの正当性が検証され、第2のプログラムが正当であると判定された場合に、メインCPUによる第2のプログラムの実行が可能とされる。この場合、メインCPUが正当であると判定された第2のプログラムを実行し、その実行と並行して、サブCPUが第1の記憶手段の第1のプログラムを復旧する。そして、第2のプログラムを実行するメインCPUにより、第1のプログラムの復旧に関する情報がユーザへ提示される。かかる構成によれば、サブCPUにより正当であると判定されたプログラムのみがメインCPUにより実行されることで装置の動作の安全性が確保され、且つプログラムの復旧の期間中にユーザへ情報を提供することができる。このようにして、復旧処理中にユーザへ情報が提供されない不都合が解消される。また、復旧処理を行うサブCPUに代わってメインCPUが情報を提供するため、サブCPUが情報提供手段を扱う必要性が排除され、実装の複雑化が回避される。
また、上述した実施形態では、上記情報処理装置は、メインCPUからの信号経路の接続先を第1及び第2の記憶手段の間で切替可能な切替手段、をさらに備える。上記切替手段は、第2のプログラムが正当であるという判定に応じて、メインCPUからの信号経路を第2の記憶手段へ接続し得る。かかる構成によれば、メインCPUは、2つの記憶手段のうちのどちらのプログラムを読出して実行すべきかを認識することなく、単に接続先の記憶手段の所定のアドレスからプログラムを読出して実行すればよい。したがって、メインCPUの実装への影響を極力抑えつつ、本実施形態の仕組みを情報処理装置に取り入れることが可能である。
また、上述した実施形態では、上記切替手段は、サブCPUからの信号経路の接続先をも第1及び第2の記憶手段の間で切替可能であり、第1のプログラムが正当ではないという判定に応じて、サブCPUからの信号経路が第2の記憶手段へ接続され得る。かかる構成によれば、サブCPUは、2つの記憶手段への接続のための端子を別々に持たなくてよく、サブCPUの実装のコストが低減される。
また、上述した実施形態では、上記切替手段は、第2のプログラムが正当であるという上記判定に応じてサブCPUからの信号経路を第1の記憶手段へ接続し、当該接続を介して、サブCPUが第1の記憶手段の第1のプログラムを復旧し得る。かかる構成によれば、第2のプログラムが正当であると判定したサブCPUから上記切替手段へ単一の切替信号を出力するだけで、メインCPUによる第2のプログラムの実行とサブCPUによる第1のプログラムの復旧とを可能とすることができる。したがって、デバイス間の接続関係は複雑化せず、切替制御に要する信号線の数の増加を回避することができる。
また、上述した実施形態では、サブCPUは、第1の記憶手段の第1のプログラムの復旧の完了に応じて、第2のプログラムを実行しているメインCPUへ割込信号を出力し、メインCPUは、上記割込信号の検知に応じて上記情報処理装置を再起動し得る。かかる構成によれば、第1のプログラムの復旧の完了まで長い時間を要する場合であっても、上記情報処理装置がその復旧の期間中に第2のプログラムの実行に基づいてユーザに所要の機能を提供することができる。また、上記情報処理装置の再起動の後で、第1のプログラムが復旧していることから、上記情報処理装置の通常の動作を迅速にユーザへ提供することができる。
また、上述した実施形態では、第1のプログラムの復旧は、第1の記憶手段の保護された記憶領域に記憶されている復旧用バージョンを用いて行われ得る。かかる構成によれば、メインCPUが第2の記憶手段へアクセスして第2のプログラムを実行している最中に、サブCPUによりアクセスの競合無く第1のプログラムを復旧することができる。
また、上述した実施形態では、第1のプログラム及び第2のプログラムは、ブートプログラムを含む。これらブートプログラムの正当性がサブCPUにより保証されることで、上記情報処理装置の動作の安全性が確実化される。
<<5.変形例>>
本発明は上記実施形態に限定されず、様々な変形が可能である。例えば、上でCPUとフラッシュROMとの間の信号経路の切替えのためにSPIバスにバススイッチを設ける例を説明した。しかしながら、信号経路の切替えは、バススイッチの代わりに、FET(Field-Effect Transistor)などのトランジスタ又はロジック回路を用いて実現されてもよい。また、プログラムを記憶する記憶手段として、フラッシュROMの代わりに他の種類のメモリデバイスが使用されてもよい。
本発明は上記実施形態に限定されず、様々な変形が可能である。例えば、上でCPUとフラッシュROMとの間の信号経路の切替えのためにSPIバスにバススイッチを設ける例を説明した。しかしながら、信号経路の切替えは、バススイッチの代わりに、FET(Field-Effect Transistor)などのトランジスタ又はロジック回路を用いて実現されてもよい。また、プログラムを記憶する記憶手段として、フラッシュROMの代わりに他の種類のメモリデバイスが使用されてもよい。
<<6.その他の実施形態>>
上記実施形態は、1つ以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読み出して実行する処理の形式でも実現可能である。また、1つ以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
上記実施形態は、1つ以上の機能を実現するプログラムをネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサがプログラムを読み出して実行する処理の形式でも実現可能である。また、1つ以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
発明は上記実施形態に制限されるものではなく、発明の精神及び範囲から離脱することなく、様々な変更及び変形が可能である。従って、発明の範囲を公にするために請求項を添付する。
1:MFP(情報処理装置)、101:メインCPU(実行手段)、120:フラッシュROM(第1の記憶手段)、121:フラッシュROM(第2の記憶手段)、122:サブCPU(検証手段)、401:メインCPU FW(第1のプログラム)、411:メインCPU FW(第2のプログラム)
Claims (10)
- プログラムを実行する実行手段と、
前記実行手段による実行のための第1のプログラムを記憶する第1の記憶手段と、
前記第1のプログラムの正当性を検証して、前記第1のプログラムが正当であると判定される場合に前記実行手段による前記第1のプログラムの実行を可能にする検証手段と、
前記実行手段による実行のための第2のプログラムを記憶する第2の記憶手段と、
を備え、
前記検証手段は、前記第1のプログラムが正当ではないと判定される場合に、前記第2のプログラムの正当性を検証して、前記第2のプログラムが正当であると判定されるときに、前記実行手段による前記第2のプログラムの実行を可能にし、且つ、前記第1の記憶手段の前記第1のプログラムを復旧し、
前記実行手段は、前記第2のプログラムを実行することにより、前記第1のプログラムの復旧に関する情報をユーザへ提示する、
情報処理装置。 - 請求項1に記載の情報処理装置であって、
前記実行手段からの信号経路の接続先を、前記第1の記憶手段及び前記第2の記憶手段の間で切替可能な切替手段、をさらに備え、
前記切替手段は、前記第2のプログラムが正当であるという前記判定に応じて前記検証手段から入力される切替信号に基づいて、前記実行手段からの前記信号経路を前記第2の記憶手段へ接続する、
情報処理装置。 - 請求項2に記載の情報処理装置であって、
前記切替手段は、前記検証手段からの信号経路の接続先を、前記第1の記憶手段及び前記第2の記憶手段の間でさらに切替可能であり、
前記切替手段は、前記第1のプログラムが正当ではないという前記判定に応じて前記検証手段から入力される切替信号に基づいて、前記検証手段からの前記信号経路を前記第2の記憶手段へ接続する、
情報処理装置。 - 請求項3に記載の情報処理装置であって、前記切替手段は、前記第2のプログラムが正当であるという前記判定に応じて前記検証手段から入力される前記切替信号に基づいて、前記検証手段からの前記信号経路を前記第1の記憶手段へ接続し、前記検証手段と前記第1の記憶手段との間の当該接続を介して、前記検証手段が前記第1の記憶手段の前記第1のプログラムを復旧する、情報処理装置。
- 請求項4に記載の情報処理装置であって、
前記検証手段は、前記第1の記憶手段の前記第1のプログラムの前記復旧の完了に応じて、前記第2のプログラムを実行している前記実行手段へ割込信号を出力し、
前記実行手段は、前記割込信号の検知に応じて、前記情報処理装置を再起動する、
情報処理装置。 - 請求項1乃至5のいずれか1項に記載の情報処理装置であって、前記第1のプログラムの復旧に関する前記情報は、前記情報処理装置の電源をオフにしないことを前記ユーザへ求める内容を含む、情報処理装置。
- 請求項1乃至6のいずれか1項に記載の情報処理装置であって、前記実行手段は、前記第2のプログラムを実行することにより、前記第1のプログラムの復旧に関する前記情報を画面上に表示させる、情報処理装置。
- 請求項1乃至7のいずれか1項に記載の情報処理装置であって、
前記第1の記憶手段は、前記第1のプログラムを記憶する第1の記憶領域及び前記第1のプログラムの復旧用バージョンを記憶する第2の記憶領域を含み、
前記検証手段は、前記第1の記憶手段の前記第1の記憶領域に記憶されている前記第1のプログラムを、前記第1の記憶手段の前記第2の記憶領域に記憶されている前記復旧用バージョンを用いて復旧する、
情報処理装置。 - 請求項1乃至8のいずれか1項に記載の情報処理装置であって、前記第1のプログラム及び前記第2のプログラムは、ブートプログラムを含む、情報処理装置。
- 第1の記憶手段、第2の記憶手段、実行手段及び検証手段を備える情報処理装置により実行されるプログラム復旧方法であって、
前記検証手段により、前記第1の記憶手段に記憶されている第1のプログラムの正当性を検証することと、
前記検証手段により、前記第1のプログラムが正当であると判定された場合に、前記実行手段による前記第1のプログラムの実行を可能にすることと、
前記検証手段により、前記第1のプログラムが正当ではないと判定された場合に、前記第2の記憶手段に記憶されている第2のプログラムの正当性を検証することと、
前記検証手段により、前記第2のプログラムが正当であると判定された場合に、前記実行手段による前記第2のプログラムの実行を可能にすることと、
前記実行手段により、正当であると判定された前記第2のプログラムを実行することと、
前記実行手段による前記第2のプログラムの実行と並行して、前記検証手段により、前記第1の記憶手段の前記第1のプログラムを復旧することと、
前記第2のプログラムを実行する前記実行手段により、前記第1のプログラムの復旧に関する情報をユーザへ提示することと、
を含むプログラム復旧方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020003949A JP2021111916A (ja) | 2020-01-14 | 2020-01-14 | 情報処理装置及びプログラム復旧方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020003949A JP2021111916A (ja) | 2020-01-14 | 2020-01-14 | 情報処理装置及びプログラム復旧方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021111916A true JP2021111916A (ja) | 2021-08-02 |
Family
ID=77060279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020003949A Pending JP2021111916A (ja) | 2020-01-14 | 2020-01-14 | 情報処理装置及びプログラム復旧方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2021111916A (ja) |
-
2020
- 2020-01-14 JP JP2020003949A patent/JP2021111916A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
RU2628325C2 (ru) | Система на кристалле для выполнения безопасной начальной загрузки, использующее ее устройство формирования изображения и способ ее использования | |
US20210011660A1 (en) | Information processing apparatus and control method | |
US11657125B2 (en) | Information processing apparatus and reset control method | |
US11418671B2 (en) | Information processing apparatus, and method of controlling the same | |
US20220284103A1 (en) | Information processing apparatus, information processing method, and storage medium | |
JP2023129643A (ja) | 情報処理装置、情報処理方法およびプログラム | |
JP2020047064A5 (ja) | ||
JP2021111916A (ja) | 情報処理装置及びプログラム復旧方法 | |
JP7289641B2 (ja) | 情報処理装置、およびその制御方法 | |
KR102467636B1 (ko) | 정보 처리장치, 정보 처리장치의 제어방법, 및 기억매체 | |
JP7210238B2 (ja) | 情報処理装置、情報処理装置の制御方法、及び、プログラム | |
JP2021111231A (ja) | 情報処理装置及び情報提示方法 | |
JP2021089607A (ja) | 情報処理装置 | |
JP7465107B2 (ja) | 情報処理装置及び方法 | |
US20230103698A1 (en) | Information processing apparatus and control method therefor | |
JP2020187649A (ja) | 情報処理装置、制御方法、およびプログラム | |
JP2021051713A (ja) | 情報処理装置及びリセット制御方法 | |
US20230273798A1 (en) | Information processing apparatus and method for controlling information processing apparatus | |
US11928217B2 (en) | Information processing apparatus, control method of information processing apparatus, and storage medium | |
JP2022182837A (ja) | 情報処理装置、及びその制御方法 | |
JP7215116B2 (ja) | 情報処理装置、情報処理方法及びプログラム | |
JPH11216915A (ja) | プリンタ装置 | |
JP2023124500A (ja) | 情報処理装置、情報処理装置の制御方法およびプログラム | |
JP2020107003A (ja) | 情報処理装置と当該情報処理装置の起動方法、並びにプログラム | |
JP2023167086A (ja) | 情報処理装置及び情報処理装置の制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20210103 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210113 |