【解決手段】電子機器のNVRAM105に格納した旧ファームウェア151を電子機器のDRAM107にロードする(B)。コンピュータがパワーオン・状態の間にNVRAMに新識別情報153aを含む新ファームウェア153を書き込む(D)。新ファームウェアの書き込みに応答してDRAMの記憶を維持しながら電子機器のプロセッサをリセットする。DRAMに新識別情報を含む新ファームウェアをロードし、新識別情報を旧識別情報151aで書き換える(D)。コンピュータがパワーオフ状態に移行する前に行われたOS53からの識別情報の要求に応じてDRAMの旧識別情報を返送する(D)。
前記電子機器がATA(Advanced Technology Attachment)の規格に適合し、前記識別情報がATAのIDENTIFY DEVICEコマンドに応じて返送するデータである請求項1から請求項10のいずれかに記載の方法。
コンピュータに接続された旧識別情報を含む旧ファームウェアを実装する電子機器が、前記コンピュータがコールド・ブートする前にオペレーティング・システムから受け取った識別情報の要求に応じて前記旧識別情報を返送するために、前記電子機器に、
パワーオン状態の前記コンピュータから新識別情報を含む新ファームウェアを受け取って前記旧ファームウェアを更新するステップと、
前記旧識別情報を前記電子機器に記憶するステップと、
前記新ファームウェアを前記揮発性メモリにロードするステップと、
を有する処理を実行させるためのファームウェア。
前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムから受け取った識別情報の要求に応答して前記旧識別情報を返送するために、前記電子機器に記憶するステップにおいて前記旧識別情報を不揮発性メモリに記憶する請求項13に記載のファームウェア。
前記返送するステップにおいて、前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムが行った識別情報の要求に応答して前記記憶した旧識別情報を返送する請求項15に記載のコンピュータ・プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0005】
HDDはパワーオン・リセット(ハードウェア・リセット)またはCPUリセット(ソフトウェア・リセット)をしたときにNVRAMに格納するファームウェアを内蔵するDRAMにロードしてCPUが実行できるようにする。OSは、コンピュータがパワーオフ状態からパワーオン状態に移行するためのいわゆるコールド・ブートのプロセスにおいて、コマンドを発行してその時点で装着されている電子機器の識別情報を取得する。
【0006】
たとえば、OSはIDENTIFY DEVICEというATA(Advanced Technology Attachment)が規定するコマンドを発行してHDDからモデル名、バージョン、更新日、シリアル番号、または容量などのHDDを特定するための情報を取得する。このように電子機器を特定する一群の情報を以後識別情報ということにする。したがって、コンピュータがコールド・ブートを完了した時点でOSは、識別情報で特定される更新前のファームウェアを実装した電子機器が接続されていると認識している。
【0007】
ユーザは、OSの動作環境下でアプリケーション・プログラムを実行して作業をしている間にHDDの動作が不調になると、ファームウェアの更新をする場合がある。このときユーザにはファームウェアを更新してただちにHDDを利用したいという希望があるため前述のこれまでの2つの更新方法では、この要求を満たすことができない。パワーオン状態でファームウェアが更新されるとHDDはただちに自らCPUリセットをして、更新されたファームウェアをDRAMにロードし実行する。これをアクティベートという。アクティベートされるとHDDは更新されたファームウェアで動作する。
【0008】
Windows(登録商標)のOSは、パワーオン状態の間にIDENTIFY DEVICEというATAコマンドを発行してコンピュータに装着している電子機器から識別情報を取得する場合がある。ファームウェアが更新された後であればHDDは、ATAコマンドに応答してDRAMにロードされている更新されたファームウェアの識別情報を返送する。OSは受け取った識別情報を、コールド・ブートのプロセスで取得していた更新前の識別情報と比較する。このときOSは両者が一致しないと、新しい電子機器がコールド・ブートを経由しないで動作していると認識して、ブルースクリーンを表示する。
【0009】
ブルースクリーンは、OSに致命的なエラーが発生したときにシステムを停止させて、青い背景画面に白い文字でエラー・メッセージを表示する画面をいう。ブルースクリーンが表示されると多くの場合に回復のためにユーザが強制的にシャットダウンをする必要があったり、システムが自動的にシャットダウンをしたりする場合がある。いずれにおいてもブルースクリーンが発生すると、それまで保存していなかったデータは消失する。
【0010】
シャットダウンの後にコールド・ブートをすると、OSはコールド・ブートの間に更新された最新のファームウェアの識別情報を取得する。そして、それ以後はコールド・ブートの間に取得した識別情報とパワーオン状態で取得した識別情報が一致するためブルースクリーンを表示しない。しかし、パワーオン状態で更新したファームウェアをコールド・ブートしないで継続して実行することを許容しないOSの動作環境下でも、パワーオン状態でファームウェアを更新した後にただちに更新されたファームウェアで電子機器を動作させたいというユーザの要求がでてきた。
【0011】
そこで本発明の目的は、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがコールド・ブートをしないで使用できるようにする方法を提供することにある。さらに本発明の目的は、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがウォーム・ブートした後も使用できるようにする方法を提供することにある。さらに本発明により、そのような方法を実現する電子機器、コンピュータ、およびコンピュータ・プログラムを提供することができた。
【課題を解決するための手段】
【0012】
本発明は、パワーオン状態の間に電子機器の旧ファームウェアを更新したコンピュータが、コールド・ブートまたはウォーム・ブートする前にOSが電子機器に識別情報の要求をしてもブルースクリーンを表示させない更新方法を提供する。本発明の第1の態様は、コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアを電子機器が更新する方法を提供する。
【0013】
パワーオン状態のコンピュータから新識別情報を含む新ファームウェアを受け取って旧ファームウェアを更新し、旧識別情報を記憶しながら新ファームウェアを実行し、コンピュータがコールド・ブートする前にOSから受け取った識別情報の要求に応答して記憶した旧識別情報を返送する。したがって、コンピュータがパワーオン状態の間にファームウェアを更新した後はコールド・ブートおよびウォーム・ブートをする前に新ファームウェアを実行することができる。
【0014】
旧識別情報は、新ファームウェアをロードするための揮発性メモリに記憶することができる。旧識別情報は、電子機器の不揮発性メモリに記憶することができる。不揮発性メモリに記憶することで、コンピュータがウォーム・ブートした後にOSから受け取った識別情報の要求に応答して記憶した旧識別情報を返送することができる。したがって、ウォーム・ブート後に更新されたファームウェアを実行してもブルースクリーンは表示されない。新ファームウェアを揮発性メモリにロードしたときに、記憶した旧識別情報で新識別情報を書き換えると、新ファームウェアは新識別情報を返送する場合と同じ手順で返送できるので新ファームウェアが旧識別情報を返送するためのコードの書き換えが不要になる。
【0015】
本発明の第2の態様では、コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアをコンピュータが更新する方法を提供する。旧識別情報をコンピュータが記憶し、パワーオン状態のコンピュータが新識別情報を含む新ファームウェアで旧ファームウェアを更新し、コンピュータがコールド・ブートする前にOSが行った識別情報の要求に応答して記憶した旧識別情報を返送する。
【0016】
旧識別情報は、コンピュータのシステム・メモリに記憶することができる。さらに旧識別情報は、コンピュータの不揮発性メモリに記憶することもできる。この場合、コンピュータがウォーム・ブートした後にOSが行った識別情報の要求に応答して記憶した旧識別情報を返送することができる。また、このとき旧ファームウェアを更新する際にコンピュータが新識別情報を記憶しておけば、さらに新しいファームウェアで更新するときに、当該新識別情報を返送することができる。
【0017】
コンピュータがコールド・ブートした後にOSが行った識別情報の要求を電子機器に転送し、電子機器から識別情報を受け取ることができる。電子機器がATA(Advanced Technology Attachment)の規格に適合する場合は、識別情報をATAのIDENTIFY DEVICEコマンドに応じて返送するデータとすることができる。電子機器は、ハードディスク・ドライブまたはソリッド・ステート・ドライブとすることができる。
【発明の効果】
【0018】
本発明により、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがコールド・ブートをしないで使用できるようにする方法を提供することができた。さらに本発明により、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがウォーム・ブートしたあとも使用できるようにする方法を提供することができた。さらに本発明により、そのような方法を実現する電子機器、コンピュータ、およびコンピュータ・プログラムを提供することができた。
【発明を実施するための形態】
【0020】
[コンピュータのパワー・ステート]
図1は、コンピュータ10のハードウェア構成の一例を説明するための機能ブロック図である。
図2は、コンピュータ10がHDD100のファームウェアを更新するために機能するソフトウェアの構成を説明するための機能ブロック図である。多くのハードウェアおよびソフトウェアの構成は周知であるため、ここでは本発明の理解に必要な範囲で説明する。最初にコンピュータ10のパワー・ステートについて説明する。コンピュータ10は、ACPI(Advanced Configuration and Power Interface)の省電力機能に対応している。ACPIでは、S1ステートからS4ステートまでの4つのスリーピング状態(省電力状態)、S0ステート(パワーオン状態)、およびS5ステート(パワーオフ状態)を定義している。
【0021】
ACPIのスリーピング・ステートのなかでコンピュータ10は、一例としてS3ステート(サスペンド状態)とS4ステート(ハイバネーション状態)だけを定義しているが他のスリーピング状態を定義してもよい。パワーオフ状態とスリーピング・ステートのときはCPU11およびHDD100の電源は必ず停止し、再起動の時にパワーオン・リセットが行われる。サスペンド状態では、システム・メモリ13の記憶を保持し、システム・メモリ13の記憶保持とコンピュータ10の電源を起動するのに必要なデバイス以外のデバイスに対する電力を停止する。
【0022】
ハイバネーション状態は、ACPIでサポートされるスリーピング状態の中で最も起動までの時間が長く、かつ消費電力が少ない状態である。コンピュータ10がパワーオン状態からハイバネーション状態に遷移する際には、OSがHDD100のハイバネーション領域などにシステム・メモリ100が記憶するハイバネーション・データを格納してから電源の起動に必要なデバイス以外のデバイスに対する電力を停止する。
【0023】
パワーオフ状態はいわゆるソフト・オフともいわれ、OSがハイバネーション・データをHDD100などに格納しない点を除いては基本的に電力を供給するデバイスの範囲はハイバネーション状態と同じである。なお、本発明におけるハイバネーション状態には、OSがサスペンド状態に遷移させてから所定の時間が経過したときにUEFI(Unified Extensible Firmware Interface)が自動的にハイバネーション状態に遷移させるパワー・ステートも含む。この場合は、OSはシステムがサスペンド状態に遷移していると認識するが、実際のパワー・ステートはハイバネーション状態となる。
【0024】
コンピュータ10は、さらにパワーオン状態のときに、プロセッサの消費電力を極力低減し、かつ、HDD100を含む特定の電子機器をパワーオフ状態に遷移させるランタイムD3またはランタイム・アイドル状態検出というパワー・ステートを採用してもよい。パワーオフ状態とパワーオン状態以外のパワー・ステートが実行されると、ファームウェアが更新された後にHDD100がパワーオン・リセットされ、かつシステムがコールド・ブートしない状態が発生する場合がある。
【0025】
[コンピュータのハードウェアとソフトウェアの構成]
チップ・セットとして構成されるプラットフォーム・コントロール・ハブ(PCH)17にはCPU11、無線LANモジュール19、HDD100、ファームウェアROM21、オーディオ・デバイス23などの電子機器とエンベデッド・コントローラ(EC)25が接続されている。CPU11にはシステム・メモリ13およびLCD15が接続されている。
【0026】
PCH17は、さまざまな規格のインターフェース機能を備えており、
図1では代表的にSATAコントローラにHDD100が接続され、PCIeコントローラに無線LANモジュール19が接続され、SPIコントローラにファームウェアROM21が接続され、HDMI(登録商標)コントローラにオーディオ・デバイス23が接続されLPCコントローラにEC25が接続されている。
【0027】
ファームウェアROM21は、不揮発性で記憶内容の電気的な書き替えが可能なメモリで複数のコード群で構成されたUEFI56を格納する。UEFI56はUEFIフォーラムが策定したBIOSに代わってまたはBIOSに加えて使用する新しい仕様のシステム・ファームウェアである。UEFI56は、コンピュータ10がパワーオフ状態またはスリーピング状態からパワーオン状態にレジュームする際に、CPU11がパワーオン・リセットされると必ず最初に実行される。
【0028】
UEFI56は、レジュームする際に自身のコードに対する改変の有無を検査したり、パスワード認証をしたりデバイスを初期化したりするいわゆるPOSTを実行する。UEFI56はシステムがレジュームするときの遷移元のパワー・ステートに応じてPOSTの内容を変えることができる。たとえば、パワーオフ状態からレジュームする際には、すべてのデバイスからパラメータを取得してインターフェースに設定する完全なPOSTを実行し、ハイバネーション状態からレジュームする際には一部のデバイスのPOSTをOS53に委ねたり以前に設定していたパラメータをインターフェースにリストアしたりしてPOST時間を短縮する。サスペンド状態からレジュームするときは短時間で終了できるようにより簡素なPOSTを実行する。
【0029】
以後において、システムがパワーオフ状態からレジュームすることをコールド・ブートといい、ハイバネーション状態またはサスペンド状態からレジュームすることをウォーム・ブートという。コールド・ブートはUEFI56が完全なPOSTを実行してからブートするためシステムの安全性および動作の確実性を重点にした起動方法といえ、ウォーム・ブートはコールド・ブートに比べてシステムの安全性や確実性よりもレジューム時間の短縮に重点をおいた起動方法といえる。
【0030】
OS53はコールド・ブートの間にコンピュータ10に装着されている電子機器の識別情報を取得し、HDD100を含む特定の電子機器が、パワーオフ状態に移行する前に交換されたり、ファームウェアが更新されたりすることを検出したときにブルースクリーンを表示する。OS53は、ファームウェアが更新された特定の電子機器が接続された状態でコールド・ブートが完了したときには、コールド・ブートの間に当該電子機器の識別情報を取得して動作を認める。
【0031】
PCH17は、ACPIレジスタ31を含む。ACPIレジスタ31はパワーオフ状態およびスリーピング状態の間も電力が供給される。ACPIレジスタ31は、ACPIに規定するSLP_TYPレジスタおよびSLP_ENレジスタに相当する。ACPIレジスタ31はパワーオン状態からパワーオフ状態またはスリーピング状態に遷移する際にOS53により設定される。OS53は、システムがパワーオフ状態またはスリーピング状態に遷移する準備が完了したときにACPIレジスタ31に遷移先のパワー・ステートを設定する。ACPIレジスタ31に遷移先のパワー・ステートが設定されるとPCH17はEC25を通じてコンピュータ10を設定されたパワー・ステートに遷移させる。
【0032】
UEFI56はパワーオフ状態またはスリーピング状態からレジュームする際にACPIレジスタ31を参照し、遷移元のパワー・ステートに応じてPOSTの実行パスを決定する。UEFI56は、遷移元のパワー・ステートがパワーオフ状態のときにコールド・ブートの実行パスを選択し、サスペンド状態またはハイバネーション状態のときはウォーム・ブートの実行パスを選択する。
【0033】
EC25は、CPU、ROM、RAMなどで構成されたマイクロ・コンピュータである。EC25は、コンピュータ10の内部の動作環境の管理にかかるプログラムをCPU11とは独立して実行することができる。EC25は、図示しないDC/DCコンバータ、電池パックの充電器、放熱ファンなどの動作を制御する。EC25は、入力コントローラを含み、キーボードやポインティング・デバイスなどの入力デバイス27が接続される。
【0034】
図2で、更新プログラム51は、OS53のサービスを受けて動作するアプリケーション・プログラムである。更新プログラム51は、DOWLOAD MICROCODEといったATAのコマンドを発行して、WLANモジュール19を通じて受け取ったり、記録媒体を通じて受け取ったりした新ファームウェアでコンピュータ10がパワーオン状態の間にHDD100の旧ファームウェアを更新する。
【0035】
OS53は、一例としてWindows(登録商標)であるが、本実施の形態で定義するパワーオン更新をしたときにブルースクリーンを表示するOSであれば、これに限定する必要はない。ここにパワーオン更新とは、コンピュータ10がパワーオン状態の間に、HDD100を接続した状態でHDD100のNVRAM105(
図3)が格納する旧ファームウェアを新ファームウェアで更新してからコンピュータ10がパワーオフ状態に移行する前にアクティベートすることをいう。更新の際にはNVRAM105の旧ファームウェアを残しても上書きしてもよい。デバイス・ドライバ55は、HDD100の動作を制御するプログラムである。
【0036】
[HDDの構成]
図3は、HDD100の構成を説明するための図である。
図3(A)はHDD100の全体構成を示し、
図3(B)はNVRAM105のデータ構造を示している。HDD100は、PCH17に接続するSATAインターフェース101、CPU103、NVRAM105、ファームウェアをロードするDRAM107、CPU103がリセットされたときに最初に実行するマイクロ・コードを格納するROM109、磁気ディスク111、およびサスペンションやスピンドル・モータなどの機械機構113を含んでいる。これらのハードウェアの構造は周知であるため説明は省略する。
【0037】
磁気ディスク111は、
図2に示したプログラムを格納する。HDD100はブート・ドライブでコンピュータ10が起動するときにロードされるブート・ファイルを格納している。NVRAM105のファームウェア領域161には、更新の対象となるファームウェアを構成する識別情報とコード本体が格納される。また、退避領域には、ファームウェアの更新の際に、旧ファームウェアの旧識別情報が格納される。なお、更新の対象となるファームウェアを構成する識別情報とコード本体は、ROM109または磁気ディスク111に格納することもできる。また、本発明によるファームウェアの更新はHDD100に代えてSSDに適用することもできる。
【0038】
[更新方法1]
つぎに、
図4、
図5を参照して、HDD100がファームウェアをパワーオン更新する手順を説明する。
図4はコンピュータ10の動作手順を示すフローチャートで、
図5はNVRAM105、DRAM107およびOS53が保有する識別情報の状態を示すブロック図である。OS53は、識別情報をシステム・メモリ13に記憶する。したがって、OSが保有する識別情報は、システム・メモリ13の電源が停止すると消失する。ただし、ハイバネーション状態に移行する際に消失した識別情報は、レジュームの際に再びシステム・メモリ13に復帰される。
【0039】
ブロック201では、コンピュータ10がパワーオフ状態で、NVRAM105は過去に更新された旧ファームウェア151を格納している(
図5(A))。旧ファームウェア151は、識別情報151aとコード本体151bで構成されている。HDD100がパワーオフ状態であるため、DRAM107にはファームウェアがロードされておらず、また、システム側でもOS53がシステム・メモリ13にロードされていない。
【0040】
ブロック203で、コンピュータ10に電源を投入するとCPU11がUEFI56を実行してコールド・ブートを開始する。コールド・ブートでは、UEFI56がすべてのデバイスの検出、検査、および構成を行う完全なPOSTを行ってからOSやアプリケーション・プログラムのロードを開始する。ブロック205で電源が投入されたHDD100はパワーオン・リセットをする。パワーオン・リセットしたCPU103は、ROM109のマイクロ・コードを実行して、ブロック207でDRAM107の所定のアドレスに旧ファームウェア151をロードする。
【0041】
ロードした旧ファームウェア151にCPU103の制御権が渡ると旧ファームウェア151がアクティベートされて実行状態になる。ブートが完了する前に、システム・メモリ13にロードされたOS53はHDD100にIDENTIFY DEVICEコマンドを送る。コマンドを受け取ったコード本体151bは、ブロック209で旧識別情報151aをOS5に返送する(
図5(B))。OS53は受け取った旧識別情報151aを、以後、HDD100がパワーオン状態で交換されたか否かを判断するためにシステム・メモリ13に記憶する。ブロック211でブートが終了してシステムはパワーオン状態に遷移する。
【0042】
この状態では、DRAM107が記憶する識別情報151aとOS53がコールド・ブートの間に取得した識別情報151aが一致するため、コールド・ブートの完了後にOS53がIDENTIFY DEVICEコマンドを発行して識別情報を取得しても、コールド・ブートの際に装着されていたHDD100が変更されていないと認識するため、ブルースクリーンを表示することはない。
【0043】
ブロック213でユーザが更新プログラム51を実行して、ネットワークまたは記録媒体を通じて取得した新ファームウェア153で旧ファームウェア151を更新する作業を開始する。ブロック215で更新プログラム51は、DOWNLOAD MICROCODEというATAコマンドを発行する。ATAコマンドを受け取ったDRAM107で実行中の旧コード本体151bは、旧識別情報151aをDRAM107の所定のアドレスに退避してから(
図5(C))NVRAM105のファームウェア領域161に新ファームウェア153を書き込む。なお、退避と書き込みの順番は逆でもよい。
【0044】
新ファームウェア153は旧ファームウェア151を上書きするように書き込んでもよいし、旧ファームウェア151を残すように異なる領域に書き込んでもよい(
図5(D))。ブロック217で書き込みが終わった旧コード本体153aは、CPU103にリセット信号を送ってCPUリセットを行う。CPUリセットは、パワーオン・リセットとは異なりDRAM107がリセットされないため、DRAM107にロードされた旧ファームウェア151の記憶は維持される。
【0045】
リセットされたCPU103はブロック219で、ROM109のマイクロ・コードを実行してDRAM107の旧ファームウェア151がロードされていた所定のアドレスに新ファームウェア153をロードする。ロードが完了するとCPU103の制御権が新ファームウェア150bに移ってアクティベートされる。新ファームウェア153の新本体コード153bは、ブロック221でDRAM107の所定のアドレスに退避しておいた旧識別情報151aで新識別情報153aを上書きする。
【0046】
新識別情報153aを旧識別情報151aで書き換えることにより、新コード本体153bはOS53から識別情報の要求があったときに、新識別情報153aを返送するのと同じ手順で旧識別情報151aを返送することができる。ただし、この例に限らず、新本体コード153bは、DRAM107に退避した旧識別情報151aが記憶されている限り、OS53の要求に対して退避した旧識別情報151aを返送するようにしてもよい。この場合は、DRAM107のリセットの前後で新本体コード153bがOS53に返送する識別情報のアドレスを変更する必要がでてくる。
【0047】
ブロック223でその後システムがサスペンド状態またはハイバネーション状態に遷移してからレジュームする状態が発生したときはブロック251に移行し、発生しないときはブロック225に移行する。ブロック225でOS53が、HDD100にATAコマンドを送って識別情報を要求する。ATAコマンドを受け取った新コード本体153bは、ブロック227でOS53に旧識別情報151aを返送する(
図5(D))。この状態では、OS53が保有する旧識別情報151aと新コード本体153bが返送する旧識別情報151aが一致するため、OS53はコールド・ブート時のHDD100は変更されていないと認識する。
【0048】
ここで、HDD100は、旧識別情報151aと新コード本体153bからなるファームウェアを実行することになるが、ファームウェアの更新はOS53の動作に影響を与えることがない部分に限って行うことがHDDのメーカによって保証されているためコンピュータ10の動作が不調になることはない。ブロック251では、システムがウォーム・ブートすると、HDD100はパワーオン・リセットされる。
【0049】
ウォーム・ブートの際にHDD100のDRAM107が記憶しているファームウェアは消失するが、OS53がブロック209で取得した旧識別情報153aは、システム・メモリ13に維持されているかまたはレジュームしたときにリストアされる。ブロック253でパワーオン・リセットしたCPU103は、ROM109のマイクロ・コードを実行して新ファームウェア153をロードする。ブロック255でOS53が識別情報を要求すると、ブロック257で新本体コード153bはOS53に新識別情報153bを返送する。
【0050】
ブロック259で、OS53が保有する旧識別情報151aと新コード本体153bが返送する新識別情報153aは一致しないため、OS53はコールド・ブート時に認識したHDD100が変更されたと判断してブルースクリーンを表示する(
図5(E))。なお、ブロック223では、ウォーム・ブートにだけ言及したが、パワーオン状態でHDD100がパワーオン・リセットされるランタイムD3や、OS53はサスペンド状態に遷移していると認識しているが実際にはハイバネーション状態に遷移しているような他のパワー・ステートからのレジュームについてもウォーム・ブートと同様に処理する。ブロック227またはブロック259に続くブロック203でコードル・ブートが行われると、新ファームウェア153がロードされ(
図5(F))、OS53もブート期間中に新識別情報153bを取得する。
【0051】
[更新方法2]
更新方法1では、ウォーム・ブートに対応することができないが、つぎに、ウォーム・ブートにも対応できる他の更新方法を説明する。
図6はコンピュータ10の動作手順を示すフローチャートで、
図7はNVRAM105、DRAM107およびOS53が保有する識別情報の状態を示すブロック図である。
図6の手順は
図4の手順と多くの点で共通するため、異なる点を中心に説明する。
図7(A)〜(F)は、
図5(A)〜(F)に対応する。
【0052】
ブロック301では、NVRAM105がファームウェア領域161に過去に更新した旧ファームウェア151を格納し、退避領域163にさらにそれより1回前に更新したファームウェアの旧旧識別情報155aを格納している(
図7(A))。ブロック303からブロック313までは、旧旧識別情報155aは関連しないため、
図4のブロック203からブロック213までの手順と同じである(
図7(B))。ブロック315で更新プログラム51は、DOWNLOAD MICROCODEというATAコマンドを発行する。
【0053】
ATAコマンドを受け取った実行中の旧コード本体151bは、NVRAM105の退避領域163を旧識別情報151aで上書きし、さらに旧識別情報151aをDRAM107の所定のアドレスに退避してから、ブロック317でシステムから受け取った新ファームウェア153をファームウェア領域161に書き込む(
図7(C))。なお、退避領域163は、NVRAM105とは異なる記憶媒体に設けてもよい。また、旧識別情報151aは、NVRAM105の退避領域163にも退避しているため、必ずしもDRAM107には退避しないでもよい。
【0054】
ブロック319からブロック329までの手順は、
図4のブロック217から227までの手順と同じである(
図7(D)、(F))。ブロック331では、コールド・ブートが発生しない限りブロック325に戻り、コールド・ブートが発生するとブロック303に戻る。ブロック351でHDD100はパワーオン・リセットされ、ブロック353でROM109のマイクロ・コードがファームウェア領域161に格納された新ファームウェア153をDRAM107にロードする。リセットされたシステムのCPU11は、HDD100の動作と並行してUEFI56を実行しウォーム・ブートを開始する。HDD100のデバイス・ドライバ55は、HDD100がシステムからのアクセスの可能な状態になると、UEFI56にレディ信号を送る。
【0055】
デバイス・ドライバ55からレディ信号を受け取ったUEFI56はブロック355で、ACPIレジスタ31を参照してウォーム・ブートであることを認識してHDD100にウォーム・ブートを示す所定のコマンドまたはイベント情報を送る。ウォーム・ブートを示すイベント情報を受け取った新ファームウェア153は、ブロック357で退避領域163に退避していた旧識別情報151aを、新識別情報153aを上書きするようにロードする(
図7(E))。その結果ブロック359でOS53から、識別情報の要求を受けてもブロック361で新本体コード153bは、旧識別情報151bを返送するため、ブルースクリーンが表示されることはない。更新方法1および更新方法2は、ファームウェアとUEFI56の一部を変更するだけでパワーオン更新の実現ができる。
【0056】
上記の手順では、新ファームウェア153に更新された後でブロック331からブロック303に戻ったときに、退避領域163には旧識別情報151aが書き込まれている(
図7(F))。その結果、ブロック301では、退避領域163に1世代古い旧旧識別情報155aが書き込まれている(
図7(A))。この手順に限らず新ファームウェア153は、コールド・ブートが発生したときには、退避領域163を新識別情報153aで書き換えるようにしてもよい。その場合は、ブロック301で退避領域163には旧識別情報151aが書き込まれていることになる。この手順によりコールド・ブートの後は、ファームウェア領域161の識別情報と退避領域163の識別情報は一致するため、ブロック315で行った退避領域163の識別情報の書き換え手順を省くことができる。
【0057】
[更新方法3]
つぎに
図8〜
図10を参照して、パワーオン更新をシステム側で実現する方法を説明する。
図8は、パワーオン更新を実現するコンピュータ10のソフトウェアの構成を説明する図である。
図9はフローチャートで、
図10は、システムのNVRAM41およびHDD100のNVRAM105における識別情報の格納状態を示している。
図8は
図2に対して、デバイス・ドライバ55の下層に中間ドライバ61を設け、さらに中間ドライバ61がアクセスできる、PCH17に接続された不揮発性メモリ(NVRAM)41を設けた点が異なる。なお、OS53およびデバイス・ドライバ55は変更する必要がなく、また、中間ドライバ61はデバイス・ドライバ55とOS53の間に挿入してもよい。
【0058】
NVRAM41は、フラグ領域42と、2つの格納領域43、45を備えている。フラグ領域42には更新フラグ42aと切換フラグ43a、45aを設定し、格納領域43、45にはHDD100のファームウェアの識別情報を格納する。切換フラグ43a、45aは対応する格納領域43、45が格納する識別情報の相対的な新しさを示す。中間ドライバ61は、更新プログラム51が発行したファームウェアを更新するATAコマンドを検出したときに更新フラグ42aを設定し、ブート期間中にUEFIからコールド・ブートの通知を受け取ったときに更新フラグ42aを解除する。
【0059】
格納領域43、45は、一方にHDD100のNVRAM105が現在格納しているファームウェアの識別情報を格納し、他方にそれより1回前に更新したファームウェアの識別情報を格納する。中間ドライバ61は、更新フラグ42aを設定する際に、ATAコマンドに続いて送られてくる新ファームウェアの新識別情報を切換フラグが設定されてない格納領域に書き込み、書き込んだ格納領域に対応する切換フラグを設定し、他方の格納領域に対応する切換フラグを解除する。
【0060】
結果として、相対的に新しい識別情報を格納するいずれかの格納領域43、45に対応する一方の切換フラグ43a、45aだけが設定される。中間ドライバ61は、更新フラグ42aが設定されていないときは、システムとHDD100の間で交換されるコマンドやデータに対しては一切の処理をしないで通過させる。中間ドライバ61は、更新フラグ42aが設定されている間にOSから受け取った識別情報を要求するATAコマンドをHDD100に渡さないで、NVRAM41を参照して自らが返送する。
【0061】
つぎに、HDD100のファームウェアをシステムがパワーオン更新する方法を
図9のフローチャートを参照して説明する。ブロック401では、コンピュータ10がパワーオフ状態のときにHDD100のNVRAM105に、旧ファームウェアが格納されている。格納領域43には旧ファームウェアの識別情報が格納され、格納領域45にはそれより前に更新されたファームウェアの識別情報が格納されているものとする。識別情報の新しさに対応して切換フラグ43aが設定され切換フラグ45aが解除されているが、更新フラグ42aはコールド・ブートの前後で状態が異なる場合があるため不定とする(
図10(A))。
【0062】
ブロック403でシステムは、コールド・ブートを実行してパワーオン状態に遷移する。中間ドライバ61は、UEFI56からコールド・ブートの通知を受け取ると、更新フラグ42aが設定されていれば解除する。ブロック405でOS53が発行した識別情報を取得するためのATAコマンドを検出した中間ドライバ61は、更新フラグ42aが解除されていることを確認して、ブロック451でHDD100にATAコマンドを送る。HDD100が応答して旧識別情報を返送すると、OS53がコールド・ブートの間に取得した識別情報とブート完了後にHDD100から受け取った識別情報が一致するため、ブルースクリーンは表示されない。
【0063】
ブロック407で更新プログラム51が、ファームウェアの更新を開始する。ブロック409で中間ドライバ61はATAコマンドと新ファームウェアをHDD100に送るが、みずからは、更新を示すATAコマンドを検出すると続いて送られてくる識別情報を切換フラグ45aが解除されている格納領域45に上書きし、切換フラグ43aを解除して切換フラグ45aを設定する。さらに中間ドライバ61は、更新フラグ42aを設定する。
【0064】
ブロック411で、ATAコマンドを受け取ったHDD100はファームウェアを更新する。格納領域45の識別情報は、HDD100が格納する新ファームウェアの新識別情報に一致する(
図10(B))。ブロック413でOS53が識別情報を取得するために発行したATAコマンドを検出した中間ドライバ61は、更新フラグ42aが設定されていることを確認すると、ATAコマンドをHDD100に渡さないで、ブロック453で切換フラグ43aが設定されていない格納領域43の旧識別情報を返送する。コールド・ブートの間にOS53が取得した識別情報とブート完了後にOS53が取得した識別情報が一致するため、ブルースクリーンは表示されない。
【0065】
ブロック415でシステムがウォーム・ブートを実行する。中間ドライバ61は、ウォーム・ブートのときにはUEFI56からコールド・ブートの通知を受け取らないため、更新フラグ42aを解除しない(
図10(C))。したがって、ウォーム・ブートが完了してからOS53がHDD100に識別情報を要求しても中間ドライバ61が応答するためブルースクリーンを表示しない。ブロック419で、再び更新が発生すると、旧識別情報を格納する格納領域43にさらに更新されたファームウェアの識別情報が格納され、切換フラグ43aが設定され、さらに切換フラグ45aが解除される(
図10(D))。
【0066】
以上では、NVRAM41を利用してシステムがパワーオン更新をする方法を説明したが、NVRAM41を使用しないでシステム・メモリ13に更新フラグおよび格納領域を設けて実現することもできる。そして、システム・メモリ13の格納領域には、更新の際にデバイス・ドライバ55から旧識別情報を取得して記憶する。この場合は、更新後にウォーム・ブートが発生してもシステム・メモリ13の記憶は維持されるため、旧識別情報を返送することができる。また、コールド・ブートが発生したときは更新フラグが解除されて識別情報の返送に中間ドライバ61は関与しないが、すでに説明したようにブルースクリーンは表示されない。
【0067】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。