JP2009544085A - Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法 - Google Patents

Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法 Download PDF

Info

Publication number
JP2009544085A
JP2009544085A JP2009519776A JP2009519776A JP2009544085A JP 2009544085 A JP2009544085 A JP 2009544085A JP 2009519776 A JP2009519776 A JP 2009519776A JP 2009519776 A JP2009519776 A JP 2009519776A JP 2009544085 A JP2009544085 A JP 2009544085A
Authority
JP
Japan
Prior art keywords
driver image
data
code
section
modification
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.)
Granted
Application number
JP2009519776A
Other languages
English (en)
Other versions
JP4961019B2 (ja
Inventor
マー、シャン
シャオ、フー
リウ、ジジュン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2009544085A publication Critical patent/JP2009544085A/ja
Application granted granted Critical
Publication of JP4961019B2 publication Critical patent/JP4961019B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Read Only Memory (AREA)

Abstract

【課題】 EFIベースのファームウェアにおいてPEIモジュールについてグローバル変数を利用する方法を提供する。
【解決手段】 EFI前初期化(PEI)におけるグローバル変数の読み書き動作を可能とする方法を提供する。当該方法は、ドライバイメージを生成することを含む。ドライバイメージは、コード(つまりテキスト)セクション、データセクション、および再配置セクションを少なくとも有する。ドライバイメージに対して第1回目の修正を実施して、アドレスデータ項目すべてを不揮発性メモリ絶対アドレスで修正する。ドライバイメージに対して第2回目の修正を実施して、データセクションを指し示す、第1回目の修正で修正されたアドレスデータ項目すべてをランダムアクセスメモリ(RAM)としてのキャッシュ絶対アドレスで修正する。修正されたドライバイメージは不揮発性メモリデバイスに焼き付けられる。不揮発性メモリデバイスのブート時に、焼き付けられたドライバイメージのデータセクションをRAMとしてのキャッシュ(CAR)に複写する。テキストセクションの実行可能コードの実行によって、スタティック変数およびグローバル変数はCARから読み書きアクセスが可能となる。
【選択図】 図1

Description

本発明は概してファームウェアに関する。具体的には、本発明は、EFI用プラットフォーム革新フレームワーク(Platform Innovation Framework for Extensible Firmware Interface(EFI))のEFI前初期化(pre―EFI Initialization:PEI)フェーズ中にグローバル変数を利用する方法に関する。
EFI用プラットフォーム革新フレームワーク(Platform Innovation Framework for Extensible Firmware Interface(EFI)、以下「フレームワーク」とも呼ぶ)は、Intel(r)Corporation社(米国、カリフォルニア州、サンタクラーラ)によって開発されたもので、一連のロバストなアーキテクチャのインターフェースであり、C言語で実装され、パワーオンからオペレーティングシステムへの制御の移行に至るまで、プラットフォームを初期化するのに必要な処理をすべて実施するように設計されている。フレームワークは主に、2つのフェーズに分けられる。つまり、EFI前初期化(pre―EFI Initialization:PEI)フェーズとドライバ実行環境(Driver Execution Environment:DXE)フェーズとである。PEIフェーズでは、最小限だけプロセッサ、チップセットおよびプラットフォームを構成してメモリ発見(memory discovery)をサポートする。DXEフェーズでは、プラットフォーム、プロセッサおよびチップセットデバイスの初期化を完了させることによってPEIフェーズを進める。
PEIフェーズでは、利用可能なメモリはない。利用可能なメモリはないが、プロセッサキャッシュを一時的に初期化してランダム・アクセス・メモリ(RAM)として機能させることが可能であるので、当該キャッシュにスタックおよびヒープを格納させることができる。このため、PEIフェーズで高級言語でコンパイルされたモジュールを実行することが可能となる。
このフレームワークにおいては、PEIフェーズではモジュールが読み出しのみの変数としてグローバル変数を利用する点、つまり、グローバル変数を変更できない点で制約があることが知られている。PEIフェーズではメモリが利用可能でないので、データおよびコードセグメントはすべて、再配置されることなくフラッシュ(Flash)に配置される。
フラッシュ内のデータは、他の従来のメモリデバイスに配置されるデータほど、簡単に変更できないことは良く知られている。PEIコードはフラッシュのデータセクションのグローバル変数に対する書込みアクセスを呼び出し得るが、グローバル変数を変更することはできない。このような限界があるため、PEIモジュールはいくつかの不利益をこうむっている。第一に、複数の機能間でモジュールグローバル変数を共有することができない。機能間で共有しなければならない変数はすべて、スタックまたはヒープを通してやり取りしなければならない。このため、コードサイズが大幅に増えてしまい得る。また、PEIコードはフラッシュで実行されるので、圧縮を実行できない場合がある。第二に、ブート性能が下がってしまう。コードが増加すると、復号および実行に必要なプロセッササイクルが増える。さらに、プロセッサキャッシュはこの段階ではイネーブルされておらず、実行効率が遅くなってしまう。特に、この傾向はフラッシュにあるグローバル変数に対して頻繁にアクセスする場合に見られる。第三に、ファームウェア開発者がコードを自由に開発および試験できない。
このため、EFIベースのファームウェアについてEFI前初期化(PEI)環境でのグローバル変数のサポートを可能とする方法が求められている。また、PEIフェーズ中でのグローバル変数の変更を可能とする方法も求められている。
添付図面は、本明細書に組み込まれその一部を成すものとするが、本発明の実施形態を説明するものであって、本発明の説明と組み合わせることによって、本発明の原理が明らかになると共に、当業者は本発明を作成および利用できるようになる。図中では、同様の参照番号は概して同一の素子、機能的に類似している素子、および/または構造的に類似している素子を指すものとする。ある素子が最初に図示されている図面は、対応する参照番号の最上桁の数字で示す。
本発明の一実施形態に係るPortable Executable 32(PE32)イメージの一例を示す図である。
本発明の一実施形態に係る、EFI前初期化(PEI)フェーズ中におけるグローバル変数の読み書きアクセスを可能とするべく、PE32イメージを変更する方法の一例を示すフローチャートである。
本発明の一実施形態に係る、EFI前初期化(PEI)フェーズ中におけるグローバル変数の読み書きアクセスを可能とするための、PE32イメージの変更の一例を示すブロック図である。
本発明の一実施形態に係る、第1回目の修正方法の一例を説明するフローチャートである。
本発明の一実施形態に係る、第2回目の修正方法の一例を説明するフローチャートである。
特定の用途を想定した実施形態例を参照しつつ本明細書において本発明を説明するが、本発明はそのような実施形態例に限定されるわけではないと理解されたい。当業者は、本明細書の教示内容を参考にすることによって、本発明の範囲に含まれるさらなる変形、応用および実施形態、ならびに本発明の実施形態が大きな有用性を持つさらなる技術分野に想到するであろう。
本明細書において本発明の「一実施形態」、「実施形態」または「別の実施形態」と言う場合、当該実施形態に関連して説明されている特定の特徴、構造または特性が本発明の少なくとも1つの実施形態に含まれていることを意味する。このため、「一実施形態によると」または「実施形態によると」という表現が本明細書のさまざまな箇所で用いられているが、必ずしも同じ実施形態に言及するものではない。
本発明の実施形態は、EFI前初期化(PEI)フェーズにおいてグローバル変数の変更(つまり、読み書きアクセス)を可能とする方法に関する。この目的は、「RAMとしてのキャッシュ(Cache As RAM(CAR))」として知られている利用モデルとして、プロセッサキャッシュの一部を利用することによって実現される。ドライバイメージのデータセクションをフラッシュデバイスからCARの領域に再配置することによって、グローバル変数は、まるでRAMにあるかのように、自由に変更され得る。
本発明の実施形態は、EFIベースのファームウェアのEFI前初期化(PEI)フェーズ中にフラッシュデバイスで実装されるものとして説明される。EFIベースのファームウェアのPEIフェーズでは、Portable Executable 32(PE32)イメージ形式が利用される。当業者であれば、本発明がフラッシュデバイス、EFIベースファームウェアまたはPE32イメージ形式に限定されないことが分かるであろう。本発明は、グローバル変数が読み出しのみのアクセスに制限されている別のイメージ形式を要件とする別のソフトウェア/ファームウェア環境に基づく別の不揮発性ストレージデバイスでも実装され得る。
EFIベースのファームウェアは、標準のPortable Executable 32(PE32)イメージ形式をサポートする。PE32イメージ形式は、コード、データ、および例えば再配置情報等のその他の情報をセクションによって整理している。セクションは、互いに近接して連続して配置されている。イメージがローダによってロードされると、メモリ内でのイメージレイアウトはファイルイメージと略同一となる。例外と言えば、セクション間においてアラインメントが要求されるのでメモリのイメージレイアウトにおいて少しバブルが見られる点が挙げられる。多くの場合、ローダは、好ましいリンキングベースでセクションがロードされていないと、メモリイメージを修正する。
図1は、本発明の一実施形態に係るPortable Executable 32(PE32)イメージ100の一例を示す図である。PE32イメージ100は、本明細書では実行可能ドライバモジュール100とも呼ぶが、テキスト(.text)セクション102と、データ(.data)セクション104と、再配置(.reloc)セクション106とを備える。一実施形態によると、テキストセクション102はコードセクション102とも呼ばれ得る。実施形態によると、実行可能ドライバモジュール100は、テキストセクション102と、データセクション104と、再配置セクション106とに限定されない。実施形態によると、実行可能ドライバモジュール100はより多くのセクションをさらに備えるとしてもよく、例えば、rデータセクション、rsrcセクション等をさらに備えるとしてもよい。前述したように、セクション間ではアラインメントが要求されるので、セクション102、104および106は互いに近接して連続して配置される必要がある。
テキストセクション102は、実行可能ドライバモジュール100用の実行可能コードを含む。データセクション104は、テキストセクション102の実行中に利用されるデータを含む。再配置セクション106は、絶対フラッシュアドレスによって更新されるすべてのアドレスデータ項目の情報を提供する。
PE32イメージを正しく起動させるためには、セクション102、104および106を、連続した仮想的または物理的メモリスペースに配置しなければならない。ページング方式がイネーブルされると、セクション102、104および106は連続した仮想的メモリスペースに存在する必要がある。ページング方式が必要ない場合には、セクション102、104および106は連続する物理的メモリに存在する必要がある。EFIファームウェアの場合、ページング方式は常にディセーブルされている。このため、セクション102、104および106は、連続する物理的メモリスペースに配置される。このため、実行可能ドライバモジュール100のセクション102、104および106は、複数の不連続のメモリ範囲に分割されることはない。実行可能モジュールが別のベースにロードされる場合には、実行可能ドライバモジュール100のすべてのセクション(102、104および106)をすべて、新しいベースに再配置しなければならない。コードセクション(「テキストセクションとも呼ぶ)のみをベースに再配置して、データセクションを別の不連続の新しいベースに再配置することは認められない。
PEIフェーズにおいてグローバル変数を変更できるようにするという目的を達成するためには、実行可能ドライバモジュール100のPE32セクション(102、104および106)を異なるメモリ範囲に分割しなければならない。例えば、テキストセクション102はフラッシュ空間内に保持しなければならない一方、スタティック変数および/またはグローバル変数が格納されているデータセクション104はCARに再配置しなければならない。フラッシュおよびCARそれぞれの空間範囲は、互いに異なるものであると同時に不連続である。
データセクション104をCARに移動させる一方でテキストセクション102および再配置セクション106をフラッシュ内に保持しながら、実行可能ドライバモジュール100を適切に実行するためには、コードがフラッシュに焼き付けられる前に、構築ツールに基づいてテキストセクション102およびデータセクション104にパッチを適用する。これは、コードがフラッシュに入ってしまえば、当該コードはその場で修正または再配置されることなく実行されなければならないからである。このため、本発明では、再配置情報に基づいて特定のフラッシュベースでイメージを修正する第1回目の修正が必要となる。第1回目の修正では、すべてのコードをフラッシュで直接実行させ、データアクセスもすべてフラッシュで行われるので、グローバル変数への書込みアクセスはブロックされる。実行可能ドライバモジュール100内のすべてのグローバル変数に対する書込みアクセスを可能とするためには、第2回目の修正が必要となる。第2回目の修正によると、データセクション104にアクセスするコードすべてとデータセクション104内のフィールドを指し示す関連データすべてとを、CARから読み出してデータセクション104を処理するべく、更新する。これは、コードが実行される前にデータセクション104がフラッシュからCARに複写されるためである。
図2は、本発明の一実施形態に係る、EFI前初期化(PEI)フェーズ中におけるグローバル変数の読み書きアクセスを可能とするべく、PE32イメージを変更する方法の一例を示すフローチャート200である。本発明は、本明細書でフローチャート200に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック202で開始され、すぐにブロック204に進む。
ブロック204において、実行可能ドライバモジュール100を生成する。実行可能ドライバモジュール100はグローバル変数を含み、当該グローバル変数は、フラッシュデバイスで実行されると、読出しアクセスのみを可能とする。続いて、ブロック206に進む。
ブロック206において、実行可能ドライバモジュール100の第1回目の修正を実施する。第1回目の修正は、図4を参照しつつ詳細に後述するが、すべてのアドレスデータ項目をフラッシュ絶対アドレスで修正する。続いて、ブロック208に進む。
ブロック208において、実行可能ドライバモジュール100の第2回目の修正を実施する。第2回目の修正は、図5を参照しつつ詳細に後述するが、実行可能ドライバモジュール100のデータセクション104を指し示す、第1回目の修正で修正されたすべてのアドレスデータ項目に対して第2の修正を実施する。第2回目の修正は、これらのデータアドレスを、CAR絶対アドレスで更新する。第2回目の修正において、テキストセクション102およびデータセクション104は、データアドレスを反映するべくCAR絶対アドレスで更新され得る。第2回目の修正を完了すると、フラッシュに焼き付ける準備が整った最終的なEFIファームウェアイメージ(最終的な実行可能ドライバモジュール)が得られる。最終的なEFIファームウェアイメージは、CARに対するグローバル変数の読み書きアクセスを可能とするために必要なCAR絶対アドレスを含む。続いて、ブロック210に進む。
ブロック210において、最終的なEFIファームウェアイメージ(最終的な実行可能ドライバモジュール)をフラッシュに焼き付ける。続いて、ブロック212に進む。
フラッシュをブートすると、ファームウェアローダはデータセクション104をフラッシュからCARに複写して、実行するべくイメージエントリポイントに制御を移行させる。この結果、データセクション104をCARで格納および処理しつつ、実行可能ドライバモジュール100をフラッシュで通常通り実行することが可能となる。このようにすることによって、PEIフェーズでスタティック変数およびグローバル変数に対して自由にアクセス可能となる。つまり、このような構成とすることによって、グローバル変数はCARで読み書きアクセスを有するようになる。
図3は、本発明の一実施形態に係る、EFI前初期化(PEI)フェーズ中におけるグローバル変数の読み書きアクセスを可能とするための、PE32イメージ(実行可能ドライバモジュール)100の変更の一例を示すブロック図である。図3では、フラッシュ302、フラッシュ302´、およびCAR304(上述したようにプロセッサキャッシュの一部)を示す。
フラッシュ302は、テキストセクション102、データセクション104、および再配置セクション106を有する実行可能ドライバモジュール100を備える。第1回目の修正を、フラッシュ302のテキストセクション102およびデータセクション104において図示する。第1回目の修正においては、再配置セクション106に基づいて、すべてのアドレスデータ項目をフラッシュの絶対アドレスで修正する。第2回目の修正をフラッシュ302´に図示する。第2回目の修正では、データセクション104内のフィールドを指し示す関連データはすべて、CAR絶対アドレスで修正する。
図4は、本発明の一実施形態に係る、第1回目の修正方法の一例を説明するフローチャート400である。本発明は、本明細書でフローチャート400に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック402で開始され、すぐにブロック404に進む。
PE32イメージについて、再配置セクション106は、ロード後に修正されるべき実行可能ドライバモジュール100内のポイントをすべて記録している。再配置セクション106は一般的に、相対的な仮想アドレス(RVA)情報を提供する。RVAは、イメージがメモリにロードされるベースアドレスからのオフセットである。RVAによって、第1回目の修正においてパッチが適用されるアドレスはすべて、実行可能ドライバモジュール100内で特定される。パッチ適用対象のアドレスはそれぞれ、ロード用に特定されるフラッシュベースを追加することによって更新される。
ブロック404において、再配置セクション106内のポイントを解析する。続いてブロック406に進む。
ブロック406において、ブロック404で特定されたポイントのアドレスデータをフラッシュ絶対アドレスで更新する。続いて決定ブロック408に進む。
決定ブロック408では、再配置セクション106内にほかにも修正する必要があるポイントがあるか否かを決定する。再配置セクション106内にほかにも修正する必要があるポイントがあれば、ブロック404に戻って次のポイントを解析する。
決定ブロック408に戻って、再配置セクション106内には解析すべきポイントがもうないと決定されると、ブロック410に進んで、第1回目の修正が終了する。
第1回目の修正は、図3のフラッシュ302にも図示されている。図3のフラッシュ302では、再配置セクション106内のポイントの例と、データセクション104内のデータ位置Bおよびフラッシュの絶対アドレスMaおよびMbと、テキストセクション102内のデータコード位置AおよびCならびにフラッシュの絶対アドレスMcとを図示している。Maは、コード位置Aに対するフラッシュ絶対アドレスである。Mbは、データ位置Bに対するフラッシュ絶対アドレスである。Mcは、コード位置Cに対するフラッシュ絶対アドレスである。
例示されているポイントRa、RbおよびRcは、再配置セクション106において強調して図示されている。Raは、コード位置A(テキストセクション102内にあり)を指し示す再配置情報を含む。コード位置Aのアドレスデータは、データセクション104内にあるフラッシュ絶対アドレスMaで更新される。Rbは、データ位置B(データセクション104内にあり)を指し示す再配置情報を含む。データ位置Bのアドレスデータは、データセクション104内にあるフラッシュ絶対アドレスMbで更新される。最後に、Rcは、コード位置C(テキストセクション102内にあり)を指し示す再配置情報を含む。コード位置Cのアドレスデータは、テキストセクション102内にあるフラッシュ絶対アドレスMcで更新される。
フラッシュ302´は、第2回目の修正方法を示している。フラッシュ302´は、例示されているポイントRa、RbおよびRcを強調している再配置セクション106と、データセクション104´と、テキストセクション102´とを示す。データセクション104´は、データ位置BとCAR絶対アドレスMb´およびMa´とを含む。テキストセクション102´は、位置AおよびCとフラッシュ絶対アドレスMcとを含む。ここで、フラッシュ302のテキストセクション102はフラッシュ302´において変更されて(データセクション102´)、Ma´というアドレスの変更を格納していることに留意されたい。
例えばフラッシュ302のMbおよびMaのようなアドレスがデータセクション104で見つかると、テキストセクション102内のコードがスタティック変数またはグローバル変数にアクセスしていることが分かる。フラッシュ302´のデータセクション104´はCAR304に複写されるので、これらのアドレス(MbおよびMa)は、フラッシュ302´のデータセクション104´に示すように、CAR絶対アドレス(Mb´およびMa´)を反映するように更新されなければならない。このため、特定されるフラッシュベースとCARベースとの間のギャップを追加することによって、更なるパッチの適用が必要になる。フラッシュ302のデータセクション104またはフラッシュ302´のデータセクション104´の外に位置するほかのアドレス(例えば、テキストセクション102およびテキストセクション102´内のMc)については、フラッシュにとどまるので、さらにパッチを適用する必要はない。つまり、テキストセクション102はフラッシュで実行される。
第1回目の修正で修正されたアドレスを参照すれば、アドレスがデータセクション104内にあるか否かは非常に簡単に判断できる。フラッシュのデータセクション104内のアドレスに対するアクセスはすべて、CAR304のデータセクション104´にリダイレクトされる。フラッシュのデータセクション104のアドレスをリダイレクトしてデータセクション104´を得た後で、データセクション104´はフラッシュ302´からCAR304に複写される。この段階において、実行可能ドライバモジュール100は、CAR領域304で格納および処理されるデータセクション104´に基づいて、通常通りに実行され得る。このようにすることによって、スタティック変数およびグローバル変数のアクセスはすべて再配置後はフラッシュではなくCAR304で実行されるので、ブート性能が格段に改善される。このため、第1回目の修正後にデータセクション104を指し示しているアドレスに対してパッチをさらに適用することによって、イメージレイアウト全体からデータセクションを分離して、ほかの任意の特定アドレスに再配置することができる。データセクション104´をCAR304に配置することによって、実行可能ドライバモジュール100はPEIフェーズにおいてグローバル変数に対する読み書きアクセスを持ち得る。
フラッシュ302´に示すように、先に修正された位置Bのアドレスデータ(Mb)をCAR絶対アドレスMb´で更新して、先に修正された位置Aのアドレスデータ(Ma)をCAR絶対アドレスMa´で更新する。修正された位置Cのアドレスデータ(Mc)はテキストセクション102にあり、テキストセクションはフラッシュに留まるので、修正された位置Cのアドレスデータ(Mc)は更新されない。
CAR304は、データセクション104´が複写される、プロセッサキャッシュの一部である。前述したように、ファームウェアがフラッシュ空間に焼き付けられると、ファームウェアローダはデータセクション104´をフラッシュからCARに複写する。CAR304にデータセクション104´を移すことによって、PEIのスタティック変数およびグローバル変数は、CAR304を介して読み書きアクセスを持つことができるようになる。
図5は、本発明の一実施形態に係る、第2回目の修正方法の一例を説明するフローチャート500である。本発明は、本明細書でフローチャート500に関連して説明される実施形態に限定されるものではない。本明細書の教示内容を参照すれば、ほかの機能フローチャートも本発明の範囲内に含まれることは、当業者には明らかである。処理はブロック502で開始され、すぐに決定ブロック504に進む。
決定ブロック504では、第1回目の修正で修正されたアドレスデータ項目がデータセクション104を指し示しているか否かを決定する。データセクション104を指し示している、第1回目の修正で修正されたアドレスデータ項目がある場合には、ブロック506において当該アドレスデータ項目が選択され、ブロック508に進む。データセクション104を指し示している、第1回目の修正で修正されたアドレスデータ項目がない場合には、ブロック512に進み、処理は終了する。
ブロック508において、ブロック506で選択されたアドレスデータ項目をCAR絶対アドレスで更新する。続いて決定ブロック510に進む。
決定ブロック510では、データセクション104を指し示している、第1回目の修正で修正されたアドレスデータ項目がほかにもあるか否かを決定する。データセクション104を指し示している、第1回目の修正で修正されたアドレスデータ項目がほかにもある場合には、ブロック506に戻り、修正すべき次のアドレスデータ項目を選択する。
決定ブロック510に戻って、データセクション104を指し示している、第1回目の修正で修正されたアドレスデータ項目がこれ以上ないと決定された場合には、ブロック512に進んで、処理は終了する。
本発明の実施形態は、ハードウェア、ソフトウェアまたはそれらの組み合わせを用いて実装されるとしてもよく、1以上のコンピュータシステムまたはその他の処理システムにおいて実装されるとしてもよい。本明細書で説明した技術は、どのようなコンピューティング環境、家庭用電化製品環境、または処理環境に応用されるとしてもよい。当該技術は、プロセッサと、格納媒体(揮発性および不揮発性メモリおよび/またはストレージ素子を含む)と、少なくとも1つの入力デバイスと、1以上の出力デバイスとを備える、携帯可能または固定コンピュータ、携帯情報端末(PDA)、セットトップボックス、携帯電話およびポケットベル(登録商標)、家庭用電化製品(DVD(デジタルビデオディスク)プレーヤー、パーソナルビデオレコーダ、パーソナルビデオプレーヤー、衛星放送受信機、ステレオ受信機、ケーブルテレビ受信機を含む)ならびにその他の電子デバイスといった、プログラム可能な機械で実行されるプログラムにおいて実装されるとしてもよい。プログラムコードは、入力デバイスを用いて入力されたデータに対して適用されて、上述した機能を実行して出力情報を生成する。出力情報は、1以上の出力デバイスに適用されるとしてもよい。当業者であれば、本発明はさまざまなシステム構成によって実施され得ることに想到し得る。そのようなシステム構成は、マルチプロセッサシステム、ミニコンピュータ、メインフレームコンピュータ、独立した家庭用電化製品等である。本発明はまた、タスクまたはその一部を実行するのは通信ネットワークを介してリンクされているリモート処理デバイスである分散コンピューティング環境において実施され得る。
各プログラムは、高級手続きプログラミング言語またはオブジェクト指向プログラミング言語で実装されて、処理システムと通信するとしてもよい。しかし、所望される場合、プログラムはアセンブリ言語または機械言語で実装されるとしてもよい。どの場合であっても、言語はコンパイルまたは解釈され得る。
プログラム命令に基づいて、当該命令でプログラミングされた汎用または特定用途向け処理システムに、本明細書に記載した処理を実行させるとしてもよい。これに代えて、当該処理は、当該処理を実行するハードワイヤードロジックを備える特定のハードウェア素子によって実行されるとしてもよいし、プログラミングされたコンピュータ素子およびカスタムハードウェア素子の任意の組み合わせによって実行されるとしてもよい。本明細書に記載する方法は、処理システムまたはその他の電子デバイスをプログラミングして当該方法を実行させる命令を格納している機械アクセス可能媒体を含むコンピュータプログラム製品として提供されるとしてもよい。本明細書において「機械アクセス可能媒体」という用語は、機械で実行される命令列を格納または符号化することができ、本明細書で記載した方法のうち任意の1つを機械に実行させるものであればどのような媒体をも含むとする。したがって「機械アクセス可能媒体」という用語は、これらに限定されるものではないが、固体メモリ、光学および磁気ディスク、およびデータ信号を符号化する搬送波を含むものとする。また、ソフトウェアとは、ある形態または別の形態によって(例えば、プログラム、手続き、プロセス、アプリケーション、モジュール、ロジック等)、動作を実行するかまたは、結果を生じさせるものと認識することは当該技術分野では普通である。このような表現は、プロセッサに動作を実行させるか、または結果を生成させる処理システムによるソフトウェアの実行を簡単に説明するためのものに過ぎない。
本発明のさまざまな実施形態を上述したが、それらの実施形態は例示を目的としたものであって本発明を限定するものではないと理解されたい。本願特許請求の範囲で定義される本発明の精神および範囲から逸脱することなく、構造および詳細な内容をさまざまに変更し得ることは、当業者には明らかである。このため、本発明の広さおよび範囲は、前述した実施形態例のいずれによっても限定されるべきではなく、本願特許請求の範囲およびその均等物によって定義されるべきである。

Claims (26)

  1. EFI前初期化(PEI)におけるグローバル変数読み書き動作を可能とする方法であって、
    コードセクション、データセクション、および再配置セクションを有するドライバイメージを生成する段階と、
    前記ドライバイメージに対して第1回目の修正を実施して、すべてのアドレスデータ項目を不揮発性メモリ絶対アドレスによって修正する段階と、
    前記ドライバイメージに対して第2回目の修正を実施して、ランダムアクセスメモリ(RAM)としてのキャッシュ絶対アドレスによって前記データセクションを指し示す、前記第1回目の修正で修正されたすべてのアドレスデータ項目を修正する段階と、
    前記修正されたドライバイメージを不揮発性メモリデバイスに焼き付ける段階と
    を備え、
    前記不揮発性メモリデバイスのブート時に、前記焼き付けられたドライバイメージの前記データセクションをRAMとしてのキャッシュ(CAR)に複写し、前記コードセクションの実行可能コードを実行することによって、スタティック変数およびグローバル変数は前記CARから読み書きアクセスが可能となる
    方法。
  2. 前記ドライバイメージは、Portable Executable 32(PE32)イメージを含む
    請求項1に記載の方法。
  3. 前記ドライバイメージは、前記不揮発性メモリで実行される
    請求項1に記載の方法。
  4. 前記不揮発性メモリは、フラッシュメモリデバイスを含む
    請求項1に記載の方法。
  5. 第1回目の修正を実施する段階は、
    前記再配置セクション内の各ポイントを解析する段階と、
    前記再配置セクション内の各ポイントに対応付けられている各アドレスデータ項目を、前記不揮発性メモリ絶対アドレスで更新する段階と
    を有する
    請求項1に記載の方法。
  6. 第2回目の修正を実施する段階は、
    前記第1回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示しているか否か判断する段階と、
    前記第1回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示している場合には、前記修正されたアドレスデータ項目を前記CAR絶対アドレスで更新する段階と
    を有する
    請求項1に記載の方法。
  7. EFI前フェーズでグローバル変数を利用する方法であって、
    ドライバイメージのコード部分および再配置部分からデータ部分を分離する段階と、
    ランダムアクセスメモリ(RAM)として利用されているプロセッサキャッシュの領域に前記データ部分を複写する段階と、
    前記ドライバイメージを実行するために前記ドライバイメージのイメージエントリポイントに制御を移行する段階と
    を備え、
    前記グローバル変数は、RAMとして利用されている前記プロセッサキャッシュからアクセスされる
    方法。
  8. 前記ドライバイメージの前記コード部分および前記再配置部分から前記データ部分を分離する段階に先立って、
    第1回目の修正および第2回目の修正を実施して前記コード部分にパッチを適用し、前記パッチが適用されたコードを不揮発性メモリに焼き付ける
    請求項7に記載の方法。
  9. 不揮発性メモリは、フラッシュメモリデバイスを含む
    請求項8に記載の方法。
  10. 第1回目の修正を実施する段階は、前記再配置部分を用いて、特定される不揮発性メモリベースで前記ドライバイメージを修正する段階を含む
    請求項8に記載の方法。
  11. 第2回目の修正を実施する段階は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間にRAMとして利用される前記プロセッサキャッシュで前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する段階を含む
    請求項8に記載の方法。
  12. EFI前初期化(PEI)フェーズにおけるグローバル変数の利用を可能とする機構であって、
    コード部分、データ部分、および再配置部分を有する実行可能ドライバイメージと、
    前記実行可能ドライバイメージを格納および実行する不揮発性メモリと、
    プロセッサキャッシュと
    を備え、
    前記コード部分は実行可能コードを含み、前記データ部分は前記実行可能コードによって利用されるデータを含み、前記再配置部分は、前記実行可能ドライバイメージの第1回目の修正時に不揮発性メモリ絶対アドレスによって更新されるアドレスデータ項目すべての情報を含み、
    前記プロセッサキャッシュの領域は、ランダムアクセスメモリ(RAM)としてのキャッシュ(CAR)として利用され、
    前記実行可能ドライバイメージの前記データ部分は、前記実行可能ドライバイメージを実行している間における前記CARでのスタティック変数およびグローバル変数の処理を可能にするべく、前記実行可能ドライバイメージに対して前記第1回目の修正および第2回目の修正を実施した後に、前記CARに複写される
    機構。
  13. 前記実行可能ドライバイメージの前記第1回目の修正および前記第2回目の修正の後、前記実行可能ドライバイメージの実行前に、前記実行可能ドライバイメージを前記不揮発性メモリに焼き付ける
    請求項12に記載の機構。
  14. 前記不揮発性メモリは、フラッシュメモリデバイスを含む
    請求項12に記載の機構。
  15. 前記実行可能ドライバイメージの前記第2回目の修正は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間に前記CARの前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する
    請求項12に記載の機構。
  16. 複数の機械アクセス可能命令を有する格納媒体を備える物品であって、
    前記複数の機械アクセス可能命令がプロセッサによって実行されると、前記複数の機械アクセス可能命令によって、
    コードセクション、データセクション、および再配置セクションを有するドライバイメージが生成され、
    前記ドライバイメージに対して第1回目の修正が実施されて、アドレスデータ項目すべてが不揮発性メモリ絶対アドレスで修正され、
    前記ドライバイメージに対して第2回目の修正が実施されて、前記データセクションを指し示す、前記第1回目の修正で修正されたアドレスデータ項目すべてが、ランダムアクセスメモリ(RAM)としてのキャッシュ絶対アドレスで修正され、
    前記修正されたドライバイメージが不揮発性メモリデバイスに焼き付けられて、
    前記不揮発性メモリデバイスのブート時に、前記焼き付けられたドライバイメージの前記データセクションはRAMとしてのキャッシュ(CAR)に複写され、前記コードセクションの実行可能コードの実行中においてスタティック変数およびグローバル変数は前記CARから読み書きアクセスが可能となる
    物品。
  17. 前記ドライバイメージは、Portable Executable 32(PE32)イメージを含む
    請求項16に記載の物品。
  18. 前記ドライバイメージは、前記不揮発性メモリで実行される
    請求項16に記載の物品。
  19. 前記不揮発性メモリは、フラッシュメモリデバイスを含む
    請求項16に記載の物品。
  20. 第1回目の修正を実施する命令は、
    前記再配置セクション内の各ポイントを解析する命令と、
    前記再配置セクション内の各ポイントに対応付けられている各アドレスデータ項目を、前記不揮発性メモリ絶対アドレスで更新する命令と
    を有する
    請求項16に記載の物品。
  21. 第2回目の修正を実施する命令は、
    前記第1回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示しているか否か判断する命令と、
    前記第1回目の修正において修正された前記アドレスデータ項目が前記データセクションを指し示している場合には、前記修正されたアドレスデータ項目を前記CAR絶対アドレスで更新する命令と
    を有する
    請求項16に記載の物品。
  22. 複数の機械アクセス可能命令を有する格納媒体を備える物品であって、
    前記複数の機械アクセス可能命令がプロセッサによって実行されると、前記複数の機械アクセス可能命令によって、
    ドライバイメージのコード部分および再配置部分からデータ部分が分離されて、
    ランダムアクセスメモリ(RAM)として利用されているプロセッサキャッシュの領域に前記データ部分が複写されて、
    前記ドライバイメージを実行するために前記ドライバイメージのイメージエントリポイントに制御が移行されて、
    グローバル変数は、RAMとして利用されている前記プロセッサキャッシュからアクセスされる
    物品。
  23. 前記ドライバイメージの前記コード部分および前記再配置部分から前記データ部分を分離する命令に先立って、
    第1回目の修正および第2回目の修正を実施して前記コード部分にパッチを適用する命令と、
    前記パッチが適用されたコードを不揮発性メモリに焼き付ける命令と
    を含む
    請求項22に記載の物品。
  24. 不揮発性メモリは、フラッシュメモリデバイスを含む
    請求項23に記載の物品。
  25. 第1回目の修正を実施する命令は、前記再配置部分に基づいて、特定される不揮発性メモリベースで前記ドライバイメージを修正する命令を含む
    請求項23に記載の物品。
  26. 第2回目の修正を実施する命令は、前記不揮発性メモリで前記ドライバイメージの前記コード部分を実行している間にRAMとして利用される前記プロセッサキャッシュで前記データを処理するべく、前記データ部分にアクセスする前記コード部分のコードすべてと前記データ部分を指し示す関連データすべてとを更新する命令を含む
    請求項23に記載の物品。
JP2009519776A 2006-07-18 2006-07-18 Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法 Expired - Fee Related JP4961019B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2006/001746 WO2008014635A1 (en) 2006-07-18 2006-07-18 A method to use global variables for pre-efi initialization modules in efi-based firmware

Publications (2)

Publication Number Publication Date
JP2009544085A true JP2009544085A (ja) 2009-12-10
JP4961019B2 JP4961019B2 (ja) 2012-06-27

Family

ID=38996845

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009519776A Expired - Fee Related JP4961019B2 (ja) 2006-07-18 2006-07-18 Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法

Country Status (5)

Country Link
EP (1) EP2047364A4 (ja)
JP (1) JP4961019B2 (ja)
KR (1) KR101036675B1 (ja)
CN (1) CN101484878B (ja)
WO (1) WO2008014635A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8463998B1 (en) * 2002-12-13 2013-06-11 Open Text S.A. System and method for managing page variations in a page delivery cache
CN101599043B (zh) * 2008-06-02 2013-07-17 松下电器产业株式会社 追踪文档的关联信息的方法和系统
CN105446842B (zh) * 2015-12-03 2019-01-04 南京南瑞继保电气有限公司 一种adi dsp代码在线监视方法
CN105426223B (zh) * 2015-12-25 2019-01-04 百度在线网络技术(北京)有限公司 应用加载方法和装置
CN105630559B (zh) * 2015-12-25 2018-12-28 广州视源电子科技股份有限公司 板卡固件烧录方法及其系统
CN107450953B (zh) * 2017-08-01 2020-08-04 合肥联宝信息技术有限公司 一种更新bios的方法及装置
CN110990072A (zh) * 2019-11-08 2020-04-10 杭州智控网络有限公司 价签屏幕多驱动动态加载方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59125421A (ja) * 1983-01-04 1984-07-19 Nec Corp 計算機応用機器の初期設定方式
JPH03219331A (ja) * 1989-11-17 1991-09-26 Digital Equip Corp <Dec> ファームウエアを再配置可能なフォーマットで格納する装置及び方法
JPH1153249A (ja) * 1997-08-07 1999-02-26 Sharp Corp メモリ管理方法
JP2001195258A (ja) * 2000-01-12 2001-07-19 Mitsutoyo Corp コンピュータ組み込みシステム
US20040103272A1 (en) * 2002-11-27 2004-05-27 Zimmer Vincent J. Using a processor cache as RAM during platform initialization
JP2006092544A (ja) * 2004-09-24 2006-04-06 Hewlett-Packard Development Co Lp プリオペレーティングシステム環境におけるモジュールの動的リンク

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6298440B1 (en) * 1994-04-22 2001-10-02 Microsoft Corporation Method and system for providing multiple entry point code resources
JP2004348677A (ja) * 2003-05-26 2004-12-09 Sony Corp プログラムおよび情報処理方法
KR100658918B1 (ko) * 2004-03-29 2006-12-15 주식회사 팬택앤큐리텔 블록 단위 입출력 명령어를 이용한 시스템 전역 변수초기화 장치 및 그 방법

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS59125421A (ja) * 1983-01-04 1984-07-19 Nec Corp 計算機応用機器の初期設定方式
JPH03219331A (ja) * 1989-11-17 1991-09-26 Digital Equip Corp <Dec> ファームウエアを再配置可能なフォーマットで格納する装置及び方法
JPH1153249A (ja) * 1997-08-07 1999-02-26 Sharp Corp メモリ管理方法
JP2001195258A (ja) * 2000-01-12 2001-07-19 Mitsutoyo Corp コンピュータ組み込みシステム
US20040103272A1 (en) * 2002-11-27 2004-05-27 Zimmer Vincent J. Using a processor cache as RAM during platform initialization
JP2006092544A (ja) * 2004-09-24 2006-04-06 Hewlett-Packard Development Co Lp プリオペレーティングシステム環境におけるモジュールの動的リンク

Also Published As

Publication number Publication date
WO2008014635A1 (en) 2008-02-07
EP2047364A1 (en) 2009-04-15
EP2047364A4 (en) 2009-08-05
KR20090035521A (ko) 2009-04-09
JP4961019B2 (ja) 2012-06-27
CN101484878B (zh) 2012-11-28
CN101484878A (zh) 2009-07-15
KR101036675B1 (ko) 2011-05-24

Similar Documents

Publication Publication Date Title
EP3267308B1 (en) Application loading method and device
US6876996B2 (en) Method and apparatus for using a shared library mechanism to facilitate sharing of metadata
JP4961019B2 (ja) Efiベースのファームウェアにおいてpeiモジュールについてグローバル変数を利用する方法
CN1258702C (zh) 为不同的指令集结构所编写的固件之间进行通信的方法
US7181610B2 (en) Method and system to encapsulate a driver written for an operating system (OS) runtime environment in an OS independent environment firmware extension
US20070033322A1 (en) Method for firmware variable storage with eager compression, fail-safe extraction and restart time compression scan
US10078498B2 (en) Method, apparatus, system, and non-transitory computer readable medium for extending at least one function of a package file
US9563446B2 (en) Binary file generation
US7721258B2 (en) Integrated development environment with managed platform registry
JP2005509194A (ja) プレインターナライズ済プログラムファイルの作成及び使用のための方法並びに装置
US20070011674A1 (en) Computer system and method for selectively installing one operating system among a plurality of operating systems
CN101026826B (zh) 用于提供在无线装置中使用的整体映像的系统和方法
WO2007134647A1 (en) Move data facility with user selectable address spaces
KR101059633B1 (ko) 멀티태스킹 가상 머신을 위한 힙 구성
US7581074B2 (en) Facilitating use of storage access keys to access storage
US20130055285A1 (en) Discovery and activation of application extensions
CN101490645A (zh) 用以设备虚拟化的方法及设备
WO2008054074A1 (en) Terminal device having function of interfacing compilation libraries in heterogeneous languages, method of calling api, and method of creating compile function
US7155701B1 (en) System for dynamically constructing an executable computer program
US20060230190A1 (en) Method and apparatus for executing application in system having NAND flash memory
KR100478463B1 (ko) 응용 프로그램의 동적링크 방법
TWI549056B (zh) 以函式庫作業系統達成之應用程式相容性
US20220269511A1 (en) Operating system partitioning of different users for single-user applications
CN113646744A (zh) 针对未对齐的存储器操作将存储器访问加宽至对齐的地址
WO2009017575A2 (en) Electronic device data access system and method

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111028

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111115

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120214

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120306

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120323

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150330

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees