(57)【要約】【課題】  ＥＦＩベースのファームウェアにおいてＰＥＩモジュールについてグローバル変数を利用する方法を提供する。【解決手段】  ＥＦＩ前初期化（ＰＥＩ）におけるグローバル変数の読み書き動作を可能とする方法を提供する。当該方法は、ドライバイメージを生成することを含む。ドライバイメージは、コード（つまりテキスト）セクション、データセクション、および再配置セクションを少なくとも有する。ドライバイメージに対して第１回目の修正を実施して、アドレスデータ項目すべてを不揮発性メモリ絶対アドレスで修正する。ドライバイメージに対して第２回目の修正を実施して、データセクションを指し示す、第１回目の修正で修正されたアドレスデータ項目すべてをランダムアクセスメモリ（ＲＡＭ）としてのキャッシュ絶対アドレスで修正する。修正されたドライバイメージは不揮発性メモリデバイスに焼き付けられる。不揮発性メモリデバイスのブート時に、焼き付けられたドライバイメージのデータセクションをＲＡＭとしてのキャッシュ（ＣＡＲ）に複写する。テキストセクションの実行可能コードの実行によって、スタティック変数およびグローバル変数はＣＡＲから読み書きアクセスが可能となる。【選択図】  図１【特許請求の範囲】
【請求項１】
ＥＦＩ前初期化（ＰＥＩ）におけるグローバル変数読み書き動作を可能とする方法であって、
コードセクション、データセクション、および再配置セクションを有するドライバイメージを生成する段階と、
前記ドライバイメージに対して第１回目の修正を実施して、すべてのアドレスデータ項目を不揮発性メモリ絶対アドレスによって修正する段階と、
前記ドライバイメージに対して第２回目の修正を実施して、ランダムアクセスメモリ（ＲＡＭ）としてのキャッシュ絶対アドレスによって前記データセクションを指し示す、前記第１回目の修正で修正されたすべてのアドレスデータ項目を修正する段階と、
前記修正されたドライバイメージを不揮発性メモリデバイスに焼き付ける段階と
を備え、
前記不揮発性メモリデバイスのブート時に、前記焼き付けられたドライバイメージの前記データセクションをＲＡＭとしてのキャッシュ（ＣＡＲ）に複写し、前記コードセクションの実行可能コードを実行することによって、スタティック変数およびグローバル変数は前記ＣＡＲから読み書きアクセスが可能となる
方法。
【請求項２】
前記ドライバイメージは、Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージを含む
請求項１に記載の方法。
【請求項３】
前記ドライバイメージは、前記不揮発性メモリで実行される
請求項１に記載の方法。
【請求項４】
前記不揮発性メモリは、フラッシュメモリデバイスを含む
請求項１に記載の方法。
【請求項５】
第１回目の修正を実施する段階は、
前記再配置セクション内の各ポイントを解析する段階と、
前記再配置セクション内の各ポイントに対応付けられている各アドレスデータ項目を、前記不揮発性メモリ絶対アドレスで更新する段階と
を有する
請求項１に記載の方法。
【請求項６】
第２回目の修正を実施する段階は、
前記第１回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示しているか否か判断する段階と、
前記第１回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示している場合には、前記修正されたアドレスデータ項目を前記ＣＡＲ絶対アドレスで更新する段階と
を有する
請求項１に記載の方法。
【請求項７】
ＥＦＩ前フェーズでグローバル変数を利用する方法であって、
ドライバイメージのコード部分および再配置部分からデータ部分を分離する段階と、
ランダムアクセスメモリ（ＲＡＭ）として利用されているプロセッサキャッシュの領域に前記データ部分を複写する段階と、
前記ドライバイメージを実行するために前記ドライバイメージのイメージエントリポイントに制御を移行する段階と
を備え、
前記グローバル変数は、ＲＡＭとして利用されている前記プロセッサキャッシュからアクセスされる
方法。
【請求項８】
前記ドライバイメージの前記コード部分および前記再配置部分から前記データ部分を分離する段階に先立って、
第１回目の修正および第２回目の修正を実施して前記コード部分にパッチを適用し、前記パッチが適用されたコードを不揮発性メモリに焼き付ける
請求項７に記載の方法。
【請求項９】
不揮発性メモリは、フラッシュメモリデバイスを含む
請求項８に記載の方法。
【請求項１０】
第１回目の修正を実施する段階は、前記再配置部分を用いて、特定される不揮発性メモリベースで前記ドライバイメージを修正する段階を含む
請求項８に記載の方法。
【請求項１１】
第２回目の修正を実施する段階は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間にＲＡＭとして利用される前記プロセッサキャッシュで前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する段階を含む
請求項８に記載の方法。
【請求項１２】
ＥＦＩ前初期化（ＰＥＩ）フェーズにおけるグローバル変数の利用を可能とする機構であって、
コード部分、データ部分、および再配置部分を有する実行可能ドライバイメージと、
前記実行可能ドライバイメージを格納および実行する不揮発性メモリと、
プロセッサキャッシュと
を備え、
前記コード部分は実行可能コードを含み、前記データ部分は前記実行可能コードによって利用されるデータを含み、前記再配置部分は、前記実行可能ドライバイメージの第１回目の修正時に不揮発性メモリ絶対アドレスによって更新されるアドレスデータ項目すべての情報を含み、
前記プロセッサキャッシュの領域は、ランダムアクセスメモリ（ＲＡＭ）としてのキャッシュ（ＣＡＲ）として利用され、
前記実行可能ドライバイメージの前記データ部分は、前記実行可能ドライバイメージを実行している間における前記ＣＡＲでのスタティック変数およびグローバル変数の処理を可能にするべく、前記実行可能ドライバイメージに対して前記第１回目の修正および第２回目の修正を実施した後に、前記ＣＡＲに複写される
機構。
【請求項１３】
前記実行可能ドライバイメージの前記第１回目の修正および前記第２回目の修正の後、前記実行可能ドライバイメージの実行前に、前記実行可能ドライバイメージを前記不揮発性メモリに焼き付ける
請求項１２に記載の機構。
【請求項１４】
前記不揮発性メモリは、フラッシュメモリデバイスを含む
請求項１２に記載の機構。
【請求項１５】
前記実行可能ドライバイメージの前記第２回目の修正は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間に前記ＣＡＲの前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する
請求項１２に記載の機構。
【請求項１６】
複数の機械アクセス可能命令を有する格納媒体を備える物品であって、
前記複数の機械アクセス可能命令がプロセッサによって実行されると、前記複数の機械アクセス可能命令によって、
コードセクション、データセクション、および再配置セクションを有するドライバイメージが生成され、
前記ドライバイメージに対して第１回目の修正が実施されて、アドレスデータ項目すべてが不揮発性メモリ絶対アドレスで修正され、
前記ドライバイメージに対して第２回目の修正が実施されて、前記データセクションを指し示す、前記第１回目の修正で修正されたアドレスデータ項目すべてが、ランダムアクセスメモリ（ＲＡＭ）としてのキャッシュ絶対アドレスで修正され、
前記修正されたドライバイメージが不揮発性メモリデバイスに焼き付けられて、
前記不揮発性メモリデバイスのブート時に、前記焼き付けられたドライバイメージの前記データセクションはＲＡＭとしてのキャッシュ（ＣＡＲ）に複写され、前記コードセクションの実行可能コードの実行中においてスタティック変数およびグローバル変数は前記ＣＡＲから読み書きアクセスが可能となる
物品。
【請求項１７】
前記ドライバイメージは、Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージを含む
請求項１６に記載の物品。
【請求項１８】
前記ドライバイメージは、前記不揮発性メモリで実行される
請求項１６に記載の物品。
【請求項１９】
前記不揮発性メモリは、フラッシュメモリデバイスを含む
請求項１６に記載の物品。
【請求項２０】
第１回目の修正を実施する命令は、
前記再配置セクション内の各ポイントを解析する命令と、
前記再配置セクション内の各ポイントに対応付けられている各アドレスデータ項目を、前記不揮発性メモリ絶対アドレスで更新する命令と
を有する
請求項１６に記載の物品。
【請求項２１】
第２回目の修正を実施する命令は、
前記第１回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示しているか否か判断する命令と、
前記第１回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示している場合には、前記修正されたアドレスデータ項目を前記ＣＡＲ絶対アドレスで更新する命令と
を有する
請求項１６に記載の物品。
【請求項２２】
複数の機械アクセス可能命令を有する格納媒体を備える物品であって、
前記複数の機械アクセス可能命令がプロセッサによって実行されると、前記複数の機械アクセス可能命令によって、
ドライバイメージのコード部分および再配置部分からデータ部分が分離されて、
ランダムアクセスメモリ（ＲＡＭ）として利用されているプロセッサキャッシュの領域に前記データ部分が複写されて、
前記ドライバイメージを実行するために前記ドライバイメージのイメージエントリポイントに制御が移行されて、
グローバル変数は、ＲＡＭとして利用されている前記プロセッサキャッシュからアクセスされる
物品。
【請求項２３】
前記ドライバイメージの前記コード部分および前記再配置部分から前記データ部分を分離する命令に先立って、
第１回目の修正および第２回目の修正を実施して前記コード部分にパッチを適用する命令と、
前記パッチが適用されたコードを不揮発性メモリに焼き付ける命令と
を含む
請求項２２に記載の物品。
【請求項２４】
不揮発性メモリは、フラッシュメモリデバイスを含む
請求項２３に記載の物品。
【請求項２５】
第１回目の修正を実施する命令は、前記再配置部分に基づいて、特定される不揮発性メモリベースで前記ドライバイメージを修正する命令を含む
請求項２３に記載の物品。
【請求項２６】
第２回目の修正を実施する命令は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間にＲＡＭとして利用される前記プロセッサキャッシュで前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する命令を含む
請求項２３に記載の物品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概してファームウェアに関する。具体的には、本発明は、ＥＦＩ用プラットフォーム革新フレームワーク（Ｐｌａｔｆｏｒｍ  Ｉｎｎｏｖａｔｉｏｎ  Ｆｒａｍｅｗｏｒｋ  ｆｏｒ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ（ＥＦＩ））のＥＦＩ前初期化（ｐｒｅ―ＥＦＩ  Ｉｎｉｔｉａｌｉｚａｔｉｏｎ：ＰＥＩ）フェーズ中にグローバル変数を利用する方法に関する。
【背景技術】
【０００２】
ＥＦＩ用プラットフォーム革新フレームワーク（Ｐｌａｔｆｏｒｍ  Ｉｎｎｏｖａｔｉｏｎ  Ｆｒａｍｅｗｏｒｋ  ｆｏｒ  Ｅｘｔｅｎｓｉｂｌｅ  Ｆｉｒｍｗａｒｅ  Ｉｎｔｅｒｆａｃｅ（ＥＦＩ）、以下「フレームワーク」とも呼ぶ）は、Ｉｎｔｅｌ(r)Ｃｏｒｐｏｒａｔｉｏｎ社（米国、カリフォルニア州、サンタクラーラ）によって開発されたもので、一連のロバストなアーキテクチャのインターフェースであり、Ｃ言語で実装され、パワーオンからオペレーティングシステムへの制御の移行に至るまで、プラットフォームを初期化するのに必要な処理をすべて実施するように設計されている。フレームワークは主に、２つのフェーズに分けられる。つまり、ＥＦＩ前初期化（ｐｒｅ―ＥＦＩ  Ｉｎｉｔｉａｌｉｚａｔｉｏｎ：ＰＥＩ）フェーズとドライバ実行環境（Ｄｒｉｖｅｒ  Ｅｘｅｃｕｔｉｏｎ  Ｅｎｖｉｒｏｎｍｅｎｔ：ＤＸＥ）フェーズとである。ＰＥＩフェーズでは、最小限だけプロセッサ、チップセットおよびプラットフォームを構成してメモリ発見（ｍｅｍｏｒｙ  ｄｉｓｃｏｖｅｒｙ）をサポートする。ＤＸＥフェーズでは、プラットフォーム、プロセッサおよびチップセットデバイスの初期化を完了させることによってＰＥＩフェーズを進める。
【０００３】
ＰＥＩフェーズでは、利用可能なメモリはない。利用可能なメモリはないが、プロセッサキャッシュを一時的に初期化してランダム・アクセス・メモリ（ＲＡＭ）として機能させることが可能であるので、当該キャッシュにスタックおよびヒープを格納させることができる。このため、ＰＥＩフェーズで高級言語でコンパイルされたモジュールを実行することが可能となる。
【０００４】
このフレームワークにおいては、ＰＥＩフェーズではモジュールが読み出しのみの変数としてグローバル変数を利用する点、つまり、グローバル変数を変更できない点で制約があることが知られている。ＰＥＩフェーズではメモリが利用可能でないので、データおよびコードセグメントはすべて、再配置されることなくフラッシュ（Ｆｌａｓｈ）に配置される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
フラッシュ内のデータは、他の従来のメモリデバイスに配置されるデータほど、簡単に変更できないことは良く知られている。ＰＥＩコードはフラッシュのデータセクションのグローバル変数に対する書込みアクセスを呼び出し得るが、グローバル変数を変更することはできない。このような限界があるため、ＰＥＩモジュールはいくつかの不利益をこうむっている。第一に、複数の機能間でモジュールグローバル変数を共有することができない。機能間で共有しなければならない変数はすべて、スタックまたはヒープを通してやり取りしなければならない。このため、コードサイズが大幅に増えてしまい得る。また、ＰＥＩコードはフラッシュで実行されるので、圧縮を実行できない場合がある。第二に、ブート性能が下がってしまう。コードが増加すると、復号および実行に必要なプロセッササイクルが増える。さらに、プロセッサキャッシュはこの段階ではイネーブルされておらず、実行効率が遅くなってしまう。特に、この傾向はフラッシュにあるグローバル変数に対して頻繁にアクセスする場合に見られる。第三に、ファームウェア開発者がコードを自由に開発および試験できない。
【０００６】
このため、ＥＦＩベースのファームウェアについてＥＦＩ前初期化（ＰＥＩ）環境でのグローバル変数のサポートを可能とする方法が求められている。また、ＰＥＩフェーズ中でのグローバル変数の変更を可能とする方法も求められている。
【図面の簡単な説明】
【０００７】
添付図面は、本明細書に組み込まれその一部を成すものとするが、本発明の実施形態を説明するものであって、本発明の説明と組み合わせることによって、本発明の原理が明らかになると共に、当業者は本発明を作成および利用できるようになる。図中では、同様の参照番号は概して同一の素子、機能的に類似している素子、および／または構造的に類似している素子を指すものとする。ある素子が最初に図示されている図面は、対応する参照番号の最上桁の数字で示す。
【０００８】
【図１】本発明の一実施形態に係るＰｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージの一例を示す図である。
【０００９】
【図２】本発明の一実施形態に係る、ＥＦＩ前初期化（ＰＥＩ）フェーズ中におけるグローバル変数の読み書きアクセスを可能とするべく、ＰＥ３２イメージを変更する方法の一例を示すフローチャートである。
【００１０】
【図３】本発明の一実施形態に係る、ＥＦＩ前初期化（ＰＥＩ）フェーズ中におけるグローバル変数の読み書きアクセスを可能とするための、ＰＥ３２イメージの変更の一例を示すブロック図である。
【００１１】
【図４】本発明の一実施形態に係る、第１回目の修正方法の一例を説明するフローチャートである。
【００１２】
【図５】本発明の一実施形態に係る、第２回目の修正方法の一例を説明するフローチャートである。
【発明を実施するための最良の形態】
【００１３】
特定の用途を想定した実施形態例を参照しつつ本明細書において本発明を説明するが、本発明はそのような実施形態例に限定されるわけではないと理解されたい。当業者は、本明細書の教示内容を参考にすることによって、本発明の範囲に含まれるさらなる変形、応用および実施形態、ならびに本発明の実施形態が大きな有用性を持つさらなる技術分野に想到するであろう。
【００１４】
本明細書において本発明の「一実施形態」、「実施形態」または「別の実施形態」と言う場合、当該実施形態に関連して説明されている特定の特徴、構造または特性が本発明の少なくとも１つの実施形態に含まれていることを意味する。このため、「一実施形態によると」または「実施形態によると」という表現が本明細書のさまざまな箇所で用いられているが、必ずしも同じ実施形態に言及するものではない。
【００１５】
本発明の実施形態は、ＥＦＩ前初期化（ＰＥＩ）フェーズにおいてグローバル変数の変更（つまり、読み書きアクセス）を可能とする方法に関する。この目的は、「ＲＡＭとしてのキャッシュ（Ｃａｃｈｅ  Ａｓ  ＲＡＭ（ＣＡＲ））」として知られている利用モデルとして、プロセッサキャッシュの一部を利用することによって実現される。ドライバイメージのデータセクションをフラッシュデバイスからＣＡＲの領域に再配置することによって、グローバル変数は、まるでＲＡＭにあるかのように、自由に変更され得る。
【００１６】
本発明の実施形態は、ＥＦＩベースのファームウェアのＥＦＩ前初期化（ＰＥＩ）フェーズ中にフラッシュデバイスで実装されるものとして説明される。ＥＦＩベースのファームウェアのＰＥＩフェーズでは、Ｐｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージ形式が利用される。当業者であれば、本発明がフラッシュデバイス、ＥＦＩベースファームウェアまたはＰＥ３２イメージ形式に限定されないことが分かるであろう。本発明は、グローバル変数が読み出しのみのアクセスに制限されている別のイメージ形式を要件とする別のソフトウェア／ファームウェア環境に基づく別の不揮発性ストレージデバイスでも実装され得る。
【００１７】
ＥＦＩベースのファームウェアは、標準のＰｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージ形式をサポートする。ＰＥ３２イメージ形式は、コード、データ、および例えば再配置情報等のその他の情報をセクションによって整理している。セクションは、互いに近接して連続して配置されている。イメージがローダによってロードされると、メモリ内でのイメージレイアウトはファイルイメージと略同一となる。例外と言えば、セクション間においてアラインメントが要求されるのでメモリのイメージレイアウトにおいて少しバブルが見られる点が挙げられる。多くの場合、ローダは、好ましいリンキングベースでセクションがロードされていないと、メモリイメージを修正する。
【００１８】
図１は、本発明の一実施形態に係るＰｏｒｔａｂｌｅ  Ｅｘｅｃｕｔａｂｌｅ  ３２（ＰＥ３２）イメージ１００の一例を示す図である。ＰＥ３２イメージ１００は、本明細書では実行可能ドライバモジュール１００とも呼ぶが、テキスト（．ｔｅｘｔ）セクション１０２と、データ（．ｄａｔａ）セクション１０４と、再配置（．ｒｅｌｏｃ）セクション１０６とを備える。一実施形態によると、テキストセクション１０２はコードセクション１０２とも呼ばれ得る。実施形態によると、実行可能ドライバモジュール１００は、テキストセクション１０２と、データセクション１０４と、再配置セクション１０６とに限定されない。実施形態によると、実行可能ドライバモジュール１００はより多くのセクションをさらに備えるとしてもよく、例えば、ｒデータセクション、ｒｓｒｃセクション等をさらに備えるとしてもよい。前述したように、セクション間ではアラインメントが要求されるので、セクション１０２、１０４および１０６は互いに近接して連続して配置される必要がある。
【００１９】
テキストセクション１０２は、実行可能ドライバモジュール１００用の実行可能コードを含む。データセクション１０４は、テキストセクション１０２の実行中に利用されるデータを含む。再配置セクション１０６は、絶対フラッシュアドレスによって更新されるすべてのアドレスデータ項目の情報を提供する。
【００２０】
ＰＥ３２イメージを正しく起動させるためには、セクション１０２、１０４および１０６を、連続した仮想的または物理的メモリスペースに配置しなければならない。ページング方式がイネーブルされると、セクション１０２、１０４および１０６は連続した仮想的メモリスペースに存在する必要がある。ページング方式が必要ない場合には、セクション１０２、１０４および１０６は連続する物理的メモリに存在する必要がある。ＥＦＩファームウェアの場合、ページング方式は常にディセーブルされている。このため、セクション１０２、１０４および１０６は、連続する物理的メモリスペースに配置される。このため、実行可能ドライバモジュール１００のセクション１０２、１０４および１０６は、複数の不連続のメモリ範囲に分割されることはない。実行可能モジュールが別のベースにロードされる場合には、実行可能ドライバモジュール１００のすべてのセクション（１０２、１０４および１０６）をすべて、新しいベースに再配置しなければならない。コードセクション（「テキストセクションとも呼ぶ）のみをベースに再配置して、データセクションを別の不連続の新しいベースに再配置することは認められない。
【００２１】
ＰＥＩフェーズにおいてグローバル変数を変更できるようにするという目的を達成するためには、実行可能ドライバモジュール１００のＰＥ３２セクション（１０２、１０４および１０６）を異なるメモリ範囲に分割しなければならない。例えば、テキストセクション１０２はフラッシュ空間内に保持しなければならない一方、スタティック変数および／またはグローバル変数が格納されているデータセクション１０４はＣＡＲに再配置しなければならない。フラッシュおよびＣＡＲそれぞれの空間範囲は、互いに異なるものであると同時に不連続である。
【００２２】
データセクション１０４をＣＡＲに移動させる一方でテキストセクション１０２および再配置セクション１０６をフラッシュ内に保持しながら、実行可能ドライバモジュール１００を適切に実行するためには、コードがフラッシュに焼き付けられる前に、構築ツールに基づいてテキストセクション１０２およびデータセクション１０４にパッチを適用する。これは、コードがフラッシュに入ってしまえば、当該コードはその場で修正または再配置されることなく実行されなければならないからである。このため、本発明では、再配置情報に基づいて特定のフラッシュベースでイメージを修正する第１回目の修正が必要となる。第１回目の修正では、すべてのコードをフラッシュで直接実行させ、データアクセスもすべてフラッシュで行われるので、グローバル変数への書込みアクセスはブロックされる。実行可能ドライバモジュール１００内のすべてのグローバル変数に対する書込みアクセスを可能とするためには、第２回目の修正が必要となる。第２回目の修正によると、データセクション１０４にアクセスするコードすべてとデータセクション１０４内のフィールドを指し示す関連データすべてとを、ＣＡＲから読み出してデータセクション１０４を処理するべく、更新する。これは、コードが実行される前にデータセクション１０４がフラッシュからＣＡＲに複写されるためである。
【００２３】
図２は、本発明の一実施形態に係る、ＥＦＩ前初期化（ＰＥＩ）フェーズ中におけるグローバル変数の読み書きアクセスを可能とするべく、ＰＥ３２イメージを変更する方法の一例を示すフローチャート２００である。本発明は、本明細書でフローチャート２００に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック２０２で開始され、すぐにブロック２０４に進む。
【００２４】
ブロック２０４において、実行可能ドライバモジュール１００を生成する。実行可能ドライバモジュール１００はグローバル変数を含み、当該グローバル変数は、フラッシュデバイスで実行されると、読出しアクセスのみを可能とする。続いて、ブロック２０６に進む。
【００２５】
ブロック２０６において、実行可能ドライバモジュール１００の第１回目の修正を実施する。第１回目の修正は、図４を参照しつつ詳細に後述するが、すべてのアドレスデータ項目をフラッシュ絶対アドレスで修正する。続いて、ブロック２０８に進む。
【００２６】
ブロック２０８において、実行可能ドライバモジュール１００の第２回目の修正を実施する。第２回目の修正は、図５を参照しつつ詳細に後述するが、実行可能ドライバモジュール１００のデータセクション１０４を指し示す、第１回目の修正で修正されたすべてのアドレスデータ項目に対して第２の修正を実施する。第２回目の修正は、これらのデータアドレスを、ＣＡＲ絶対アドレスで更新する。第２回目の修正において、テキストセクション１０２およびデータセクション１０４は、データアドレスを反映するべくＣＡＲ絶対アドレスで更新され得る。第２回目の修正を完了すると、フラッシュに焼き付ける準備が整った最終的なＥＦＩファームウェアイメージ（最終的な実行可能ドライバモジュール）が得られる。最終的なＥＦＩファームウェアイメージは、ＣＡＲに対するグローバル変数の読み書きアクセスを可能とするために必要なＣＡＲ絶対アドレスを含む。続いて、ブロック２１０に進む。
【００２７】
ブロック２１０において、最終的なＥＦＩファームウェアイメージ（最終的な実行可能ドライバモジュール）をフラッシュに焼き付ける。続いて、ブロック２１２に進む。
【００２８】
フラッシュをブートすると、ファームウェアローダはデータセクション１０４をフラッシュからＣＡＲに複写して、実行するべくイメージエントリポイントに制御を移行させる。この結果、データセクション１０４をＣＡＲで格納および処理しつつ、実行可能ドライバモジュール１００をフラッシュで通常通り実行することが可能となる。このようにすることによって、ＰＥＩフェーズでスタティック変数およびグローバル変数に対して自由にアクセス可能となる。つまり、このような構成とすることによって、グローバル変数はＣＡＲで読み書きアクセスを有するようになる。
【００２９】
図３は、本発明の一実施形態に係る、ＥＦＩ前初期化（ＰＥＩ）フェーズ中におけるグローバル変数の読み書きアクセスを可能とするための、ＰＥ３２イメージ（実行可能ドライバモジュール）１００の変更の一例を示すブロック図である。図３では、フラッシュ３０２、フラッシュ３０２´、およびＣＡＲ３０４（上述したようにプロセッサキャッシュの一部）を示す。
【００３０】
フラッシュ３０２は、テキストセクション１０２、データセクション１０４、および再配置セクション１０６を有する実行可能ドライバモジュール１００を備える。第１回目の修正を、フラッシュ３０２のテキストセクション１０２およびデータセクション１０４において図示する。第１回目の修正においては、再配置セクション１０６に基づいて、すべてのアドレスデータ項目をフラッシュの絶対アドレスで修正する。第２回目の修正をフラッシュ３０２´に図示する。第２回目の修正では、データセクション１０４内のフィールドを指し示す関連データはすべて、ＣＡＲ絶対アドレスで修正する。
【００３１】
図４は、本発明の一実施形態に係る、第１回目の修正方法の一例を説明するフローチャート４００である。本発明は、本明細書でフローチャート４００に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック４０２で開始され、すぐにブロック４０４に進む。
【００３２】
ＰＥ３２イメージについて、再配置セクション１０６は、ロード後に修正されるべき実行可能ドライバモジュール１００内のポイントをすべて記録している。再配置セクション１０６は一般的に、相対的な仮想アドレス（ＲＶＡ）情報を提供する。ＲＶＡは、イメージがメモリにロードされるベースアドレスからのオフセットである。ＲＶＡによって、第１回目の修正においてパッチが適用されるアドレスはすべて、実行可能ドライバモジュール１００内で特定される。パッチ適用対象のアドレスはそれぞれ、ロード用に特定されるフラッシュベースを追加することによって更新される。
【００３３】
ブロック４０４において、再配置セクション１０６内のポイントを解析する。続いてブロック４０６に進む。
【００３４】
ブロック４０６において、ブロック４０４で特定されたポイントのアドレスデータをフラッシュ絶対アドレスで更新する。続いて決定ブロック４０８に進む。
【００３５】
決定ブロック４０８では、再配置セクション１０６内にほかにも修正する必要があるポイントがあるか否かを決定する。再配置セクション１０６内にほかにも修正する必要があるポイントがあれば、ブロック４０４に戻って次のポイントを解析する。
【００３６】
決定ブロック４０８に戻って、再配置セクション１０６内には解析すべきポイントがもうないと決定されると、ブロック４１０に進んで、第１回目の修正が終了する。
【００３７】
第１回目の修正は、図３のフラッシュ３０２にも図示されている。図３のフラッシュ３０２では、再配置セクション１０６内のポイントの例と、データセクション１０４内のデータ位置Ｂおよびフラッシュの絶対アドレスＭａおよびＭｂと、テキストセクション１０２内のデータコード位置ＡおよびＣならびにフラッシュの絶対アドレスＭｃとを図示している。Ｍａは、コード位置Ａに対するフラッシュ絶対アドレスである。Ｍｂは、データ位置Ｂに対するフラッシュ絶対アドレスである。Ｍｃは、コード位置Ｃに対するフラッシュ絶対アドレスである。
【００３８】
例示されているポイントＲａ、ＲｂおよびＲｃは、再配置セクション１０６において強調して図示されている。Ｒａは、コード位置Ａ（テキストセクション１０２内にあり）を指し示す再配置情報を含む。コード位置Ａのアドレスデータは、データセクション１０４内にあるフラッシュ絶対アドレスＭａで更新される。Ｒｂは、データ位置Ｂ（データセクション１０４内にあり）を指し示す再配置情報を含む。データ位置Ｂのアドレスデータは、データセクション１０４内にあるフラッシュ絶対アドレスＭｂで更新される。最後に、Ｒｃは、コード位置Ｃ（テキストセクション１０２内にあり）を指し示す再配置情報を含む。コード位置Ｃのアドレスデータは、テキストセクション１０２内にあるフラッシュ絶対アドレスＭｃで更新される。
【００３９】
フラッシュ３０２´は、第２回目の修正方法を示している。フラッシュ３０２´は、例示されているポイントＲａ、ＲｂおよびＲｃを強調している再配置セクション１０６と、データセクション１０４´と、テキストセクション１０２´とを示す。データセクション１０４´は、データ位置ＢとＣＡＲ絶対アドレスＭｂ´およびＭａ´とを含む。テキストセクション１０２´は、位置ＡおよびＣとフラッシュ絶対アドレスＭｃとを含む。ここで、フラッシュ３０２のテキストセクション１０２はフラッシュ３０２´において変更されて（データセクション１０２´）、Ｍａ´というアドレスの変更を格納していることに留意されたい。
【００４０】
例えばフラッシュ３０２のＭｂおよびＭａのようなアドレスがデータセクション１０４で見つかると、テキストセクション１０２内のコードがスタティック変数またはグローバル変数にアクセスしていることが分かる。フラッシュ３０２´のデータセクション１０４´はＣＡＲ３０４に複写されるので、これらのアドレス（ＭｂおよびＭａ）は、フラッシュ３０２´のデータセクション１０４´に示すように、ＣＡＲ絶対アドレス（Ｍｂ´およびＭａ´）を反映するように更新されなければならない。このため、特定されるフラッシュベースとＣＡＲベースとの間のギャップを追加することによって、更なるパッチの適用が必要になる。フラッシュ３０２のデータセクション１０４またはフラッシュ３０２´のデータセクション１０４´の外に位置するほかのアドレス（例えば、テキストセクション１０２およびテキストセクション１０２´内のＭｃ）については、フラッシュにとどまるので、さらにパッチを適用する必要はない。つまり、テキストセクション１０２はフラッシュで実行される。
【００４１】
第１回目の修正で修正されたアドレスを参照すれば、アドレスがデータセクション１０４内にあるか否かは非常に簡単に判断できる。フラッシュのデータセクション１０４内のアドレスに対するアクセスはすべて、ＣＡＲ３０４のデータセクション１０４´にリダイレクトされる。フラッシュのデータセクション１０４のアドレスをリダイレクトしてデータセクション１０４´を得た後で、データセクション１０４´はフラッシュ３０２´からＣＡＲ３０４に複写される。この段階において、実行可能ドライバモジュール１００は、ＣＡＲ領域３０４で格納および処理されるデータセクション１０４´に基づいて、通常通りに実行され得る。このようにすることによって、スタティック変数およびグローバル変数のアクセスはすべて再配置後はフラッシュではなくＣＡＲ３０４で実行されるので、ブート性能が格段に改善される。このため、第１回目の修正後にデータセクション１０４を指し示しているアドレスに対してパッチをさらに適用することによって、イメージレイアウト全体からデータセクションを分離して、ほかの任意の特定アドレスに再配置することができる。データセクション１０４´をＣＡＲ３０４に配置することによって、実行可能ドライバモジュール１００はＰＥＩフェーズにおいてグローバル変数に対する読み書きアクセスを持ち得る。
【００４２】
フラッシュ３０２´に示すように、先に修正された位置Ｂのアドレスデータ（Ｍｂ）をＣＡＲ絶対アドレスＭｂ´で更新して、先に修正された位置Ａのアドレスデータ（Ｍａ）をＣＡＲ絶対アドレスＭａ´で更新する。修正された位置Ｃのアドレスデータ（Ｍｃ）はテキストセクション１０２にあり、テキストセクションはフラッシュに留まるので、修正された位置Ｃのアドレスデータ（Ｍｃ）は更新されない。
【００４３】
ＣＡＲ３０４は、データセクション１０４´が複写される、プロセッサキャッシュの一部である。前述したように、ファームウェアがフラッシュ空間に焼き付けられると、ファームウェアローダはデータセクション１０４´をフラッシュからＣＡＲに複写する。ＣＡＲ３０４にデータセクション１０４´を移すことによって、ＰＥＩのスタティック変数およびグローバル変数は、ＣＡＲ３０４を介して読み書きアクセスを持つことができるようになる。
【００４４】
図５は、本発明の一実施形態に係る、第２回目の修正方法の一例を説明するフローチャート５００である。本発明は、本明細書でフローチャート５００に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック５０２で開始され、すぐに決定ブロック５０４に進む。
【００４５】
決定ブロック５０４では、第１回目の修正で修正されたアドレスデータ項目がデータセクション１０４を指し示しているか否かを決定する。データセクション１０４を指し示している、第１回目の修正で修正されたアドレスデータ項目がある場合には、ブロック５０６において当該アドレスデータ項目が選択され、ブロック５０８に進む。データセクション１０４を指し示している、第１回目の修正で修正されたアドレスデータ項目がない場合には、ブロック５１２に進み、処理は終了する。
【００４６】
ブロック５０８において、ブロック５０６で選択されたアドレスデータ項目をＣＡＲ絶対アドレスで更新する。続いて決定ブロック５１０に進む。
【００４７】
決定ブロック５１０では、データセクション１０４を指し示している、第１回目の修正で修正されたアドレスデータ項目がほかにもあるか否かを決定する。データセクション１０４を指し示している、第１回目の修正で修正されたアドレスデータ項目がほかにもある場合には、ブロック５０６に戻り、修正すべき次のアドレスデータ項目を選択する。
【００４８】
決定ブロック５１０に戻って、データセクション１０４を指し示している、第１回目の修正で修正されたアドレスデータ項目がこれ以上ないと決定された場合には、ブロック５１２に進んで、処理は終了する。
【００４９】
本発明の実施形態は、ハードウェア、ソフトウェアまたはそれらの組み合わせを用いて実装されるとしてもよく、１以上のコンピュータシステムまたはその他の処理システムにおいて実装されるとしてもよい。本明細書で説明した技術は、どのようなコンピューティング環境、家庭用電化製品環境、または処理環境に応用されるとしてもよい。当該技術は、プロセッサと、格納媒体（揮発性および不揮発性メモリおよび／またはストレージ素子を含む）と、少なくとも１つの入力デバイスと、１以上の出力デバイスとを備える、携帯可能または固定コンピュータ、携帯情報端末（ＰＤＡ）、セットトップボックス、携帯電話およびポケットベル（登録商標）、家庭用電化製品（ＤＶＤ（デジタルビデオディスク）プレーヤー、パーソナルビデオレコーダ、パーソナルビデオプレーヤー、衛星放送受信機、ステレオ受信機、ケーブルテレビ受信機を含む）ならびにその他の電子デバイスといった、プログラム可能な機械で実行されるプログラムにおいて実装されるとしてもよい。プログラムコードは、入力デバイスを用いて入力されたデータに対して適用されて、上述した機能を実行して出力情報を生成する。出力情報は、１以上の出力デバイスに適用されるとしてもよい。当業者であれば、本発明はさまざまなシステム構成によって実施され得ることに想到し得る。そのようなシステム構成は、マルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ、独立した家庭用電化製品等である。本発明はまた、タスクまたはその一部を実行するのは通信ネットワークを介してリンクされているリモート処理デバイスである分散コンピューティング環境において実施され得る。
【００５０】
各プログラムは、高級手続きプログラミング言語またはオブジェクト指向プログラミング言語で実装されて、処理システムと通信するとしてもよい。しかし、所望される場合、プログラムはアセンブリ言語または機械言語で実装されるとしてもよい。どの場合であっても、言語はコンパイルまたは解釈され得る。
【００５１】
プログラム命令に基づいて、当該命令でプログラミングされた汎用または特定用途向け処理システムに、本明細書に記載した処理を実行させるとしてもよい。これに代えて、当該処理は、当該処理を実行するハードワイヤードロジックを備える特定のハードウェア素子によって実行されるとしてもよいし、プログラミングされたコンピュータ素子およびカスタムハードウェア素子の任意の組み合わせによって実行されるとしてもよい。本明細書に記載する方法は、処理システムまたはその他の電子デバイスをプログラミングして当該方法を実行させる命令を格納している機械アクセス可能媒体を含むコンピュータプログラム製品として提供されるとしてもよい。本明細書において「機械アクセス可能媒体」という用語は、機械で実行される命令列を格納または符号化することができ、本明細書で記載した方法のうち任意の１つを機械に実行させるものであればどのような媒体をも含むとする。したがって「機械アクセス可能媒体」という用語は、これらに限定されるものではないが、固体メモリ、光学および磁気ディスク、およびデータ信号を符号化する搬送波を含むものとする。また、ソフトウェアとは、ある形態または別の形態によって（例えば、プログラム、手続き、プロセス、アプリケーション、モジュール、ロジック等）、動作を実行するかまたは、結果を生じさせるものと認識することは当該技術分野では普通である。このような表現は、プロセッサに動作を実行させるか、または結果を生成させる処理システムによるソフトウェアの実行を簡単に説明するためのものに過ぎない。
【００５２】
本発明のさまざまな実施形態を上述したが、それらの実施形態は例示を目的としたものであって本発明を限定するものではないと理解されたい。本願特許請求の範囲で定義される本発明の精神および範囲から逸脱することなく、構造および詳細な内容をさまざまに変更し得ることは、当業者には明らかである。このため、本発明の広さおよび範囲は、前述した実施形態例のいずれによっても限定されるべきではなく、本願特許請求の範囲およびその均等物によって定義されるべきである。
【図１】
2009544085.tif 000002
【図２】
2009544085.tif 000003
【図３】
2009544085.tif 000004
【図４】
2009544085.tif 000005
【図５】
2009544085.tif 000006
【国際調査報告】
2009544085.tif 000007
2009544085.tif 000008