JP2004348677A - プログラムおよび情報処理方法 - Google Patents
プログラムおよび情報処理方法 Download PDFInfo
- Publication number
- JP2004348677A JP2004348677A JP2003148085A JP2003148085A JP2004348677A JP 2004348677 A JP2004348677 A JP 2004348677A JP 2003148085 A JP2003148085 A JP 2003148085A JP 2003148085 A JP2003148085 A JP 2003148085A JP 2004348677 A JP2004348677 A JP 2004348677A
- Authority
- JP
- Japan
- Prior art keywords
- area
- cpu
- address
- application program
- bootstrap
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4403—Processor initialisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
【解決手段】ブートストラップ本体にジャンプされると、CPUコンフィグやタイマーの初期化、データキャッシュの初期化などが行われる。そして、キャッシュRAM上で、処理が実行されていない場合や外部モードやROMレスの状態で処理が実行されている場合、ROMからRAMへデータのコピーが行われた後、キャッシュRAM領域へと処理がジャンプされる。その後、スタックの初期化、割込ベクタの設定、ヒープの初期化などの処理が順次行われる。本発明は、システムLSIの開発などを行う装置に適用できる。
【選択図】 図7
Description
【発明の属する技術分野】
本発明はプログラムおよび情報処理方法に関し、特に、CPUに内蔵または外部接続されたROMから自律起動する自律ブートと、外部ホストまたはデバッガからの制御によってファームウエアをRAMにコピーし起動する他律ブートの両方のブート方法に対応し、プログラムを変更すること無しに、開発時や商品化時に一貫して用いることが好適なプログラムおよび情報処理方法に関する。
【0002】
【従来の技術】
近年、さまざまな装置にシステムLSI(Large Scale Integration)が組み込まれている。そのようなシステムLSIは、基本的に、CPU(Central Processing Unit)、メモリ(例えば、ROM(Read Only Memory)やRAM(Random Access Memory))、およびI/O(Input/Output)(入出力部)などの回路が、1個のLSIに収められた構成とされている。
【0003】
システムLSIは、上述したようにさまざまな装置に組み込まれているが、例えば、家電製品、AV機器、OA機器、産業用機器、自動車などに組み込まれて、システムの制御やネットワーク制御、ユーザインターフェースの制御などに利用されている。システムLSIに内蔵すべき機能は用途によって異なるため、特定用途向けの性格が強く、各種の用途に応じてきわめて多品種のシステムLSIが開発されている。
【0004】
一方では、汎用性の高い高機能CPUコアにメモリおよび汎用的なI/Oや周辺回路を組み合わせてワンチップ化し、かつ、外付けメモリや外付けI/Oによるシステムの拡張を可能にした高機能なシステムLSIも作られている。
【0005】
いずれのタイプのシステムLSIにしても、パラレルI/O、シリアルI/O、コンパレータ付き入力ポート、カウンタ/タイマ、A/D(Analog/Digital)変換器、DMA(Direct Memory Access)コントローラ、割り込みコントローラ、バスコントローラなどの汎用的な回路機能の他、PWM(Pulse Width Modulation)コントローラ、ステッピングモータ・コントローラ、液晶表示器コントローラ、DTMF(Dial Tone Multi Frequency)回路などの特定用途向けの周辺回路機能が必要に応じてCPUおよびメモリとともにワンチップに組み込まれていることが多い。
【0006】
CPUチップ、メモリチップ、および、複数の周辺回路チップを配線ボード上で組み合わせたボード・コンピュータと比較すると、システムLSIの方が小型で低価格の装置を実現できることが多く、そのために、システムLSIが使用されることが多い。
【0007】
システムLSIが動作する上で必要となるプログラムの記憶などに関することは、特許文献1に開示されている。
【0008】
【特許文献1】
特開平5−257696号公報
【0009】
【発明が解決しようとする課題】
システムLSIにおいては、CPUに内蔵または外部接続されたROMから自律起動する自律ブートと、外部ホストまたはデバッガからの制御によってファームウエアをRAMにコピーし起動する他律ブートなどがあるが、開発時や商品化時で、そのようなブート方式などの設計変更などがあると、再度の検証や性能評価などを行わなくてはならないといった課題があった。
【0010】
本発明はこのような状況に鑑みてなされたものであり、設計変更などがあっても、再度の検証や性能評価などを行わなくても良いようにすることを目的とする。
【0011】
【課題を解決するための手段】
本発明は、少なくとも1つのCPUと、リセットベクタが含まれるブート用メモリ領域を含み、CPUとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、CPUの外部から書き換えが可能で、CPUからメモリコントローラの初期化及び読み書きが可能で、必要に応じCPUとは異なる部分からメモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリとを備え、オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置により作成されるプログラムまたは作成装置の情報処理方法であって、アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、リンク先のファイルを入力とし、エントリポイント、ブートストラップ、アプリケーションプログラムが、アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、レイアウトの際、アプリケーション実行用メモリ領域のアドレスは、CPUによってキャッシュされる領域、または、キャッシュされない領域であり、実行ファイルは、レイアウトされたアドレスと、レイアウトされるアプリケーションプログラム及びブートストラップが含まれ、アプリケーションプログラムが、ブート用メモリ領域に初期配置される場合、実行ファイルのエントリポイントが対応するブート用メモリ領域のリセットベクタへマップされるように、レイアウトされたアドレスをロードすべきアドレスへ、実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、アプリケーションプログラムがアプリケーション実行用メモリ領域に初期配置され、その配置される領域がCPUによってキャッシュされない領域である場合、実行ファイルをそのままロード用イメージファイルとして出力し、実行ファイルがレイアウトされたアドレスとレイアウトされるアプリケーションプログラムが、アプリケーション実行用メモリ領域に初期配置され、その配置される領域がCPUによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にRAMへロードするため、実行ファイルのエントリポイントがこの領域に対応するCPUの非キャッシュ領域へマップされるように、レイアウトされたアドレスをロードすべきアドレスへ、実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、ロード用イメージファイルにはロードすべきアドレスと、ロードされるアプリケーションプログラム及びブートストラップが含まれ、ロード用イメージファイルとは異なるファイル形式が必要とされる場合、ロード用イメージファイルを入力として、必要とされる形式へ変換することを特徴とする。
【0012】
前記実行ファイルが、レイアウトされたアドレスとレイアウトされるアプリケーションプログラム及びブートストラップを別々のファイルに分割されて格納され、ロード用イメージファイルが、ロードすべきアドレスとロードされるアプリケーションプログラム及びブートストラップを別々のファイルに分割されて格納されているようにすることができる。
【0013】
前記アプリケーションプログラムをアプリケーション実行用メモリ領域に初期配置する場合、必要に応じてCPUとは異なる部分から初期化を行い、初期配置すべきアドレスと初期配置すべきデータは、ロード用イメージファイルに格納されているロードすべきアドレスと、ロードされるアプリケーションプログラム及びブートストラップを利用し、ロード用イメージファイルを初期配置する領域へロードするようにすることができる。
【0014】
前記アプリケーションプログラムが、ブート用メモリ領域にロードされている場合、そのままCPUのリセットを解除し、アプリケーションプログラムが、アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされたエントリポイントを指すように書き換え、CPUの実行を開始し、アプリケーションプログラムが、アプリケーション実行用メモリ領域にロードされ、プログラムカウンタの書き換えが行えない場合、ロードされたエントリポイントへジャンプする命令をリセットベクタ中に書き込み、CPUのリセットを解除するようにすることができる。
【0015】
前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、非リロケータブルコード領域へジャンプし、非リロケータブルコードを実行し、リロケータブルコードでは、CPUの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、アプリケーションプログラムは、ブート用メモリ領域からブート可能で、起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、アプリケーションプログラムのコード部及び初期化データをブート用メモリ領域からアプリケーション実行用メモリ領域へコピーを行い、また、アプリケーションプログラムは、CPUの非キャッシュ領域としてマップされるアプリケーション実行用メモリ領域からもブート可能で、起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、さらに、アプリケーションプログラムは、CPUのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブート可能で、起動するメモリ領域の違いによる処理としては何も行わず、非リロケータブルコードでは、スタック領域の初期化、C/C++非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、C++の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、ブートストラップのリロケータブルコードにおいて、ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、ブートストラップのリロケータブルコードにおいて、ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、CPUのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、CPUのキャッシュ領域としてマップされるアプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つようにすることができる。
【0016】
本発明においては、ブート方法のいずれにおいてもアプリケーションプログラム及びブートストラップを変更すること無しに、開発時・商品化時に利用でき、アプリケーションの実行装置及び実行環境を満たしていれば、ブート用メモリ領域に対応する物理デバイスが不揮発性または揮発性のどちらが決定する前であっても、アプリケーションプログラムの開発が行え、ブートメモリ領域がROMである場合、ROMを書き換えるかROM ICEを利用するなどしないと通常ファームウエアの変更が出来ないが、これらの煩雑な作業無しに、アプリケーション実行用メモリ領域からブート可能になるようなプログラムが作成される
【0017】
【発明の実施の形態】
以下に、本発明の実施の形態について図面を参照して説明する。本発明は、複数の構成に対して1つのプログラムで対応できることを1つの特徴とする。まず、その複数の構成について説明する。ここで、複数の構成とは、システムLSI(Large Scale Integration)を中心とした構成であり、システムLSIの開発時から実用時までのことを考慮すると、図1乃至図6に示すような構成が考えられる。
【0018】
システムLSIのプログラムは、通常、CPUと同一のチップに収められた内蔵又は外付けROM(Read Only Memory)(プログラムメモリなどと称される場合がある)に格納され、電源投入とともに、そのROM内のプログラムがリセットベクタ(または始動アドレス)から順に実行される。そこでまず、システムLSIに対してROMが内蔵されているか否かで、その構成を分けることができる。
【0019】
以下の説明において“内蔵”とは、システムLSIと同一のチップ内に備えられている場合を意味し、“外付け”または“外部”とは、システムLSIのチップとは別に設けられていることを意味する。
【0020】
図1乃至図3は、内蔵ROM型の構成をそれぞれ示し、図4乃至図6は、外付けROM型のそれぞれ構成を示すブロック図である。
【0021】
図1に示したシステムLSI1−1は、CPU(Central Processing Unit)2―1、RAM3−1、I/O(Input/Output)4−1、および、ROM5−1を内蔵した構成とされている。
【0022】
システムLSI1―1は、ホストコンピュータ11と外部バス12−1を介してデータの授受を行えるように構成されている。また、システムLSI1―1は、外部バス12−2を介して、外部RAM13(システムLSI1−1に内蔵されているROM5−1と区別するために、“外部”という文字を付す)と、データやアドレスデータの授受を行えるように構成されている。
【0023】
図2に示したシステムLSI1−2も、図1と同様に、CPU2―2、RAM3−2、I/O4−2、および、ROM5−2を内蔵した構成とされている。そして、ホストコンピュータ11と外部バス12−1を介してデータの授受が行えるように構成されている。また、システムLSI1−2は、外部バス12−1を介して、外部RAM21や外部ROM22と、データやアドレスデータの授受を行える構成とされている。
【0024】
また、図2に示した構成においては、モード切替スイッチ23とモード切替制御装置24が設けられており、そのモード切替スイッチ23の操作に基づいて、モード切替制御装置24がモードの切替を行うように構成されている。なお、モードについては後述する。
【0025】
図3に示した構成においても、モードの切替が行える構成とされている。その構成について説明するに、図3に示した構成におけるシステムLSI1−3は、図1や図2に示した構成と同様に、CPU2―3、RAM3−3、I/O4−3、および、ROM5−3を内蔵した構成とされている。
【0026】
図3に示した構成においても、モードの切替が行える構成とされているが、モードが、モード切替スイッチ23とモード切替制御装置24の制御により切り換えられるとき、アドレスデータは、メモリマッピング変換回路31の制御により生成される構成とされている。また、図3に示した構成においては、外部バス12−2を介して、ICE(In − Circuit Emulator )32などと称されているマイクロコンピュータ開発支援装置とデータの授受が行える構成とされている。
【0027】
なお、図3においては、ICE32とデータの授受が行える構成としたが、ICE32の代わりに(開発が終了し、実用化される時点で)、ホストコンピュータ11とデータの授受が行える構成に変更されても良い。
【0028】
図4は、内蔵ROMを有しない構成とされている。具体的には、システムLSI1−4は、CPU2−4、RAM3−4、および、I/O4−4を備えるが、ROMを備えていない構成とされている。また、システムLSI1−4は、外部バス12−2を介して外部RAM21や外部ROM22とデータの授受などを行えるように構成されている。
【0029】
図5に示した構成のうちシステムLSI1−5の構成は、図4と同様に、CPU2−5、RAM3−5、および、I/O4−5から構成されている。図5に示した構成では、モード変換を行うためのモード切替スイッチ23、モード切替制御装置24を備える。また、モード切替制御装置24の制御に基づき、外部RAM21との間で用いられるアドレスデータの生成を行うメモリマッピング変換回路41と、外部ROM22との間で用いられるアドレスデータの生成を行うメモリマッピング変換回路42を備える。
【0030】
図6に示した構成は、図1に示した構成と比較し、システムLSI1−6が、内蔵ROMを備えない構成とされている(ROM5−1を削除された構成とされている)他は、基本的に同様である。また、図6に示した構成では、システムLSI1−6が外部バス12−2を介してICE32(またはホストコンピュータ11)とデータの授受を行える構成とされている。
【0031】
このような図1乃至図6に示したような構成が考えられるが、それらの構成は、以下に示すような状況を鑑みて、適宜使い分けられる。
【0032】
民生機器などの量産品に組み込まれるシステムLSIは、マスクROMを内蔵するタイプ(例えば、図1のROM5−1がマスクROMとされる)、又は、マスクROMが外付されているタイプ(例えば、図4に示すような内蔵ROMを備えない構成)であり、開発評価済みのプログラムがマスクROMの形でチップ製造時に内蔵または外部に固定化されるのが一般的である。
【0033】
一方、開発評価段階ではプログラムROMの書き込みや消去ができることが必要なので、書き込みや消去が可能なEPROM(Erasable And Programmable ROM)内蔵タイプ(例えば、図1のROM5−1がEPROMとされる)、または、内蔵ROMを取り除き代替のEPROMやRAM(Random Access Memory)を外付けするROMレスタイプ(例えば、図4や図6に示した構成とされる)が使用されている。少量生産品の場合、マスクROMにせずに、EPROM内蔵タイプやROMレスタイプのシステムLSIが最終製品として使用されることもある。
【0034】
システムLSIの供給メーカは、多くの場合、マスクROM内蔵タイプに付随したシリーズ製品として、EPROM内蔵タイプ、あるいは、ROMレスタイプの製品を用意している。プログラムメモリが内部にあるか外部にあるかに関わりなく、電源投入リセット時にプログラムメモリのリセットベクタがアクセスされ、そこにある先頭命令からプログラムが実行される。
【0035】
主記憶を外部に拡張できる高機能システムLSIでは、起動時に内蔵ROMのプログラムを実行する通常の動作モード(以下、内部モードと記述する)の他に、外部モードと称する動作モードに切り替えられる機種がある。外部モードが選択されると内蔵ROMが無効とされ、内部モードでは内蔵ROMに割り付けられていたアドレス空間も外部メモリに解放される。
【0036】
すなわち、外部モードにされて起動されると、上述したROMレスタイプと同様に、外付けされたプログラムメモリのリセットベクタにアクセスされ、そこにある先頭命令からプログラムが実行される。例えば、図2や図3に示した構成において、ROM5−2またはROM5−3にアクセスされるのではなく、外部RAM21にアクセスされるような処理が行われる。
【0037】
従って、外部モードでプログラムの開発評価が行なわれ、プログラムが完成した段階でそのプログラムを内蔵ROMに固定化し内部モードで動作させる、といった使い方が行われるときもある。
【0038】
一方、ROMレスタイプにおいても、外部ROMの書き換えが行えないPROM(Programmable ROM)が利用されている場合や、書き換えが容易でない場合は、外部バス上にメモリマップ変換回路が接続され、上述の内部/外部モードの切替を実現されるようになっている(例えば、図5に示した構成において実現される)。
【0039】
ここで、さらに、システムLSI1―1乃至1−6(以下の説明において、システムLSI1−1乃至1−6を、個々に区別する必要がない場合、単に、システムLSI1と記述する。他の部分に関しても同様に記述する)におけるソフトウェアの開発環境について説明する。
【0040】
プログラミングは、一般的に、アセンブラ言語あるいはコンパイラ言語を使用して行われ、ソースプログラムは、一般的に、パーソナルコンピュータ上で動作するクロス・アセンブラ、あるいは、コンパイラによって機種ごとのオブジェクトプログラムに変換される。
【0041】
開発されたプログラムのテストおよびデバッグは、ホスト・コンピュータの統括下においてターゲットモニタ、ICE(インサーキット・エミュレータ)、統合開発環境デバッガなどが用いられて行なわれる。このような開発ツールは、個々のシステムLSI1の機種ごとに、メーカやサードパーティなどから提供される。
【0042】
UNIX(R)などのオペレーティング・システムを組み込んだアプリケーションプログラムの開発と異なり、システムLSI1の場合、電源投入リセット時に実行される最初の命令(エントリポイント)から論理的に連続した形のメインプログラム全体が作成されることになる。もちろん、リロケータブル形式のサブルーチンが多数使用されてメインプログラムが開発されるが、最終的には、クロス・アセンブラ、または、コンパイラにより各ルーチンがリンクされて、プログラムメモリの前記リセットベクタに、先頭命令を合せたアブソリュート形式のメインプログラムが作成される。
【0043】
コンピュータ・システムは、コールド・スタート後にプログラムの実行を開始するために、何らかの手段を持っていなければならない。通常、CPU2のハードウエア・アーキテクチャは、全てのハードウエア回路を既知の電気的な状態に設定するリセット処理を備えている。しかしながら、CPU2に所望のプログラムの実行を開始させることは必要である。
【0044】
例えば、開始時にいくつかのコンピュータ・システムは、「ブートストラップ」又は「ブートストラップ・ローダー」プログラムや「BIOS」プログラムを読み込むように構成されることになっている。このブートストラップ・プログラムは、所望のアプリケーションプログラムの先頭にある他のシーケンスの命令をロードし、その実行を開始させる簡単なプログラムである。ブートストラップ・プログラムは単に「ブート」ソフトウエアと称されるときもある。
【0045】
例えば、インテル社(商標)のインテル80x86系マイクロプロセッサは、ハードウエア・リセットの後、特定のメモリアドレスからプログラムの実行を開始するようにされている。即ち、マイクロプロセッサは、そのメモリ位置(アドレス)の内容を読み出し、そこで検出するビットを、マイクロプロセッサ命令として実行しようとする。
【0046】
80x86ファミリにより用いられる特定メモリ位置は、XXXFFFF0h、即ち、メモリ空間の先頭からの16ビットである。他のマイクロプロセッサでは、異なる開始アドレスを用いることもできるが、同様の原則が適用できる。従って、マイクロプロセッサは、このアドレスに分岐(又は条件分岐)命令を見つけると、どのようなアドレスが指定されようとも、そのプログラムの実行を継続する。従って、この初期目標アドレスは、あらゆる使用セッションのためのエントリポイントであり、以下の説明においては、これをリセットベクタと、適宜、記述する。
【0047】
通常、このリセットベクタはコンピュータを使用する度に実行が必要であり、このリセットベクタには、ブートストラップのエントリポイントが割り当てられる。
【0048】
図1乃至図6に示したように、システムLSI1を含む構成としてはさまざまな構成が考えられ、それらの構成は、ソフトウェアの開発環境などを考慮した上で必要とされるわけだが、そのようなさまざまな構成を有することになると、以下のような問題点がある。本発明は、そのような問題点を解決する方法を提供することを1つの目的としている。以下に、問題点とあわせて、本発明についてさらに説明を加える。
【0049】
まず、以下に説明を加える本発明で実現できることについて説明する。本発明を適用することにより、豊富な周辺回路を含んだ超小型で安価なシステムLSIをパーソナルコンピュータのような環境で動作させ、フラッシュメモリやメモリカードあるいはフロッピー(R)ディスク装置といった大容量の補助記憶装置から各種のアプリケーションプログラムを随時読み込んで実行できるようにしたコンピュータ装置を実現する。
【0050】
使用されるシステムLSI1専用の既存の開発ツールによって作成された前述のアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能にする。
【0051】
それに加えて、図1乃至図3に示した構成のように、システムLSI1に内蔵されているROM5から、自律起動する「自律ブート」と、図4乃至図6に示した構成のように、システムLSI1にROMを含まないROMレスタイプまたは外部モード時に外部ホストやデバッガからの制御によってファームウエアをRAMにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに利用できる。
【0052】
これは同時に、システムLSI1のプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発が出来るだけでなく、開発時のコードを変更することなく商品に利用できることを意味する。このように本発明を適用することにより、システムLSI1とアプリケーションの協調設計がシームレスに行えるようになる。
【0053】
また、ブートメモリ領域がROM5である場合、ROM5を書き換えるかROM ICEを利用するなどしないと、通常、ファームウエアの変更が出来ない。特にEPROMを内蔵しているようなタイプの場合、ROM ICEが利用できないため、ROM5の内容を書き換える煩雑な作業が必要であるが、本発明を適用することによりファームウエアの変更無しに他律ブートが利用でき、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応することができる。
【0054】
このようなことを実現するためには、フローチャートなどを参照して説明する本発明を適用しなくても、システムLSIの一般的な利用方式の延長上として、以下に記載するような形で実現することも考えられるが、問題点があり現実的でない。しかしながら、本発明との差異を明らかにするため、また、本発明の利点を説明するために、ここで、システムLSIの一般的な利用方式の延長上として実現した場合についての説明と、その問題点について記載する。
【0055】
例えば、ハードウエアとしては、メモリやI/Oを外部に拡張可能な高機能システムLSIを使用し、これに相当容量のRAMを外付けして主記憶を拡張するとともに(外付けした主記憶RAMを外部RAMとする)、不揮発性で大容量の補助記憶装置としてフラッシュメモリなどを結合する(例えば、図2に示しような構成となる)。
【0056】
また、ワンチップ・マイコンの内蔵ROMには、つぎのようなオペレーティング・システム(OS)的な機能をもったシステム・プログラムを格納しておく。ここでのOS的な機能とは、補助記憶装置からアプリケーションプログラムを読み出して前記外部RAMに転送した後、外部RAM上のそのアプリケーションプログラムにジャンプする機能である。この機能をアプリケーションプログラム・ローダと、以下、適宜称する。
【0057】
以上の構成において、アプリケーションプログラムは、別のプロセスにより前記補助記憶装置の所定エリアに予め格納しておく。前記のシステムLSI装置に電源を投入すると、内蔵ROMの前記システム・プログラムが、リセットベクタ(0番地とする)から実行され、まず、必要なイニシャライズ・ルーチンが実行される。その後、自動的に(継続動作として)、あるいは、外部からの指令信号を待って前記アプリケーションプログラム・ローダが実行される。
【0058】
そのような処理が実行されると、補助記憶装置内の所定のアプリケーションプログラムが外部RAMに転送された後、自動的または外部指令信号を待って、外部RAM上のアプリケーションプログラムにジャンプされる。このことによりアプリケーションプログラムが実行されることになる。アプリケーションプログラムには前記システム・プログラムに適時復帰する機能を持たせておく。
【0059】
しかしながら、このようなシステムでは、CPUのアドレス空間における0番地(リセットベクタアドレス)から連続した一定の領域に、内蔵ROMが格納されている(システム・プログラムの先頭命令が0番地にセットされている)。このシステム・プログラム中のアプリケーションプログラム・ローダの実行によって補助記憶装置から外部RAMに転送されるアプリケーションプログラムのCPUのアドレス空間上の位置は、当然ながらシステム・プログラムの格納領域(内蔵ROM領域)ではなく、外部拡張領域(外部RAM領域)である。
【0060】
すなわち、アプリケーションプログラムは外部拡張領域のx番地以降に書き込まれ、x番地にセットされている先頭命令にジャンプすることで当該アプリケーションプログラムが実行される。
【0061】
従って、アプリケーションプログラムは、先頭命令を0番地に合せたアブソリュート形式ではなくて、主記憶上の位置を特定していないリロケータブル形式で作成されているか、0番地とは異なる特定のx番地に先頭命令を合せたアブソリュート形式で作成されていなければならない。リロケータブル形式を作成する場合については、システムLSIの各機種ごとに用意されている専用開発ツールで作成したアプリケーションプログラムをそのまま利用できないことを意味している。
【0062】
それにもかかわらず任意のx番地以降に置いて正常に動作するリロケータブル形式の任意のアプリケーションプログラムを作成することはもちろん可能である。ただし、メーカーから供給されている各ワンチップ・マイコン専用の開発ツールで作成したプログラムはそのままでは使えない。あえて使おうとするのであれば、プログラム中のアドレス関連情報をすべて改変する必要がある。これをアプリケーションプログラム全体に対して正確に行うことは非常に難しいし、膨大な作業時間を要する。
【0063】
また、開発ツールを改変するか新規に作れば、任意のx番地に置いて正常に動作する形式のプログラムを作成できるが、システムLSIの1ユーザが開発ツール自体を作るなどということは、手間がかかりすぎるなど、現実的な問題の解決方法とはならない。さらに、既存の開発ツールで作成されて使用実績のあるシステムLSI用プログラムをライブラリー化しておき、それらを前記のアプリケーションプログラムとして再利用することが、前記と同じ理由でできない。このことは、利便性の低下、アプリケーションプログラムの開発力の低下などを引き起こし、好ましくない。
【0064】
一方、0番地とは異なる特定のx番地に先頭命令を合せたアブソリュート形式のアプリケーションプログラムを作成することについては、多くの開発ツールで行うことが可能であるが、このような場合においても、開発中のプログラムを商品化するにあたり変更が必要となるために、サイズ再見積もりや検証のやり直しが必要となり、効率的ではない。
【0065】
例えば、開発の初期ではROMレスタイプを利用して開発を進めていることが多いが、途中でEPROM内蔵タイプやマスクROM内蔵タイプに変更されることがある。このような場合、単に0番地とは異なる特定のx番地に先頭命令を合せただけのアブソリュート形式でアプリケーションプログラムを作成した場合、ブート用メモリ領域であるROM領域のレイアウト変更に伴って、アプリケーションプログラムについてもレイアウトし直すなどの変更が加わる。そのため実行ファイルにおいて、分岐先アドレスの変更、ROMからRAMへのコピーを行うコードの追加、レイアウト順序の変更など予期しない変更が加わる。そのため、一般的には検証や性能評価をやり直さなければならない。
【0066】
しかしながら、以下に説明を加える本発明を適用することにより、このような問題を解決しつつ、上述したような目的を達成することができる。
【0067】
図7のフローチャートを参照し、本発明におけるアプリケーションのブート方式(ブートストラップの処理)について説明する。なお、簡便に全体的な流れを説明し、その後図1乃至図6に示した各構成において、どのように動作するかを、具体的に説明する。
【0068】
ステップS11において、エントリポイントからの実行が開始される。このステップS11における処理としては、ブートストラップのエントリポイント(Reset)から実行が開始される場合(以下、適宜、通常の処理と記述する)の他に、さらに2つの処理がオプション(必ずしも実行されなくても良く、適宜、必要に応じて実行されれば良いという意味で“オプション”と記述する)として実行される処理がある。
【0069】
1つ目のオプション(以下、適宜、オプション1と記述する)として、非キャッシュRAM領域(0xA0000000)へジャンプした後、ブートストラップのエントリポイントから実行が開始されるようにしても良い。ジャンプするだけのコードをブート領域に配置することにより実現することが可能である。このようなオプション1の処理は、ICE等がなくPC(Program Counter)に対して変更が施せない場合などに必要とされる処理である。
【0070】
2つ目のオプション(以下、適宜、オプション2と記述する)として、非キャッシュRAM領域(0xA0000000)へジャンプした後、ブートストラップのエントリポイントから実行が開始されるようにしても良い。非キャッシュRAM領域(0xA0000000)へPCをセットすることにより実現することが可能である。このようなオプション2の処理は、ホストCPUがなく、ICEが備えらているような場合などに必要とされる処理である。
【0071】
なお、このステップS11の処理が行われる前提条件として、本ブートストラップを含むプログラム全体がROM領域へ事前にロード、または、ROMにプログラムされている必要がある。但し、上述したオプション1またはオプション2が実行される場合、ROM領域ではなくRAM領域へロードされる必要がある。
【0072】
また、オプション1またはオプション2は、ブートストラップ本体で行われる処理ではない(本体で行われなくても良い)。よって、オプション1またはオプション2による処理は、図7のフローチャートの処理としては図示していない。次の2つの場合分けで、オプション1またはオプション2の処理が、実行可能な場合と不可能な場合に分ける。
【0073】
まず、実行可能な場合について説明する。実行可能な場合、リセットベクタとプログラム領域が(異なるまたは同一の)物理デバイスの異なるアドレスにマップされるときである。高速ブートを行う場合や、ROM領域への煩雑なプログラミングを省略するために用いられる。そのような目的がない場合、CPU(図1乃至図6においてはCPU2―1乃至2−6)本来のリセットベクタから処理が開始される(上述した通常の処理:オプション1,2ではない処理)。
【0074】
実行が不可能な場合は、リセットベクタとプログラム領域が物理的に同一のデバイスにマップされ、2つの領域が物理デバイス上の同一のアドレスにマップされるときである。このようなときには無限にジャンプすることになるので実行してはならない。CPU2本来のリセットベクタから処理が開始される(すなわち、上述した通常の処理)必要がある。
【0075】
本発明では、リセットベクタとプログラム領域が物理的に同一のデバイスにマップされる場合にも適用できる。
【0076】
ステップS12の処理として、ブートストラップ本体(_reset)へジャンプの処理が実行される。このステップS12における処理では、リセットベクタとプログラム領域が物理的に重複する/しないに応じてプログラム上は、条件コンパイルで2通りの処理が選択される
【0077】
1つの処理として、リセットベクタとプログラム領域が物理的に重複しない場合は、PC相対アドレス分岐命令が利用され、実行がリンクされた仮想アドレス空間のセグメントに移行させない。すなわち、PC+0x400へジャンプされる。
【0078】
他の処理として、リセットベクタとプログラム領域が物理的に重複する場合は、絶対アドレス分岐命令が利用され、実行がリンクされた仮想アドレス空間の非キャッシュセグメント、すなわち、非キャッシュRAM領域(0xA0000400)へ移行させる。
【0079】
ステップS13の処理として、CPU2が初期化される。このステップS13の処理としては、CPUコンフィグ (config)、SW割込みクリア (cause)、CPU Timer初期化 (compare)、および、割込み禁止、BEV=1 (cause)という処理が含まれる。
【0080】
ステップS14の処理として、データキャッシュの初期化が行われる。そして、ステップS15の処理として、キャッシュRAM上で実行されているか否かが判断される。ステップS15において、キャッシュRAM上で実行されていると判断された場合、ステップS21に処理が進められ、キャッシュRAM上で実行されていないと判断された場合、ステップS16に処理が進められる。
【0081】
ステップS16において、命令キャッシュの初期化が行われ、ステップS17において、非キャッシュRAM上で実行されているか否かが判断される。ステップS17において、非キャッシュRAM上で実行されていると判断された場合、ステップS21に処理が進められ、非キャッシュRAM上で実行されていないと判断された場合、ステップS18に処理が進められる。
【0082】
なお、ステップS16とステップS17の処理は、非キャッシュROMまたは非キャッシュRAMで実行される。
【0083】
ステップS18において、ROMレスタイプであるか否か、または、外部モードであるか否かが判断される。ステップS18における判断は、結果的には、システムLSI1内のROM5上で、処理が実行されているか否かの判断が行われることになる。ステップS18において、ROMレスタイプである、または、外部モードであると判断された場合、ステップS20に処理が進められ、ROMレスタイプではなく、また、外部モードではない(内部モードである)と判断された場合、ステップS19に処理が進められる。
【0084】
ステップS19において、DRAM(Dynamic RAM) Controller の初期化が行われる。なお、ステップS19の処理は、ステップS18においてROMレスタイプである、または、外部モードであると判断されたときには行われないが、ROMレスタイプまたは外部モードのときには、モードをCPU2が判別できるように構成されている必要はある。
【0085】
ステップS20において、ROMからRAMへのデータのコピーが行われる。コピーされるデータとしては、プログラムコード(.text)、C/C++初期化データ(.rodata .data, .sdata)などである。ステップS20において行われるデータのコピーの方法は、2通りある。そして、その方法は、プリプロセッサマクロで指定可能である。
【0086】
高速な方法としては、コピー先のRAMをキャッシュ領域(フラッシュ付)とする方法があり、一般的な方法としては、コピー先のRAMを非キャッシュ領域とする方法(デフォルト)がある。
【0087】
ステップS21において、キャッシュRAM領域へジャンプするための処理が行われる。このステップS21以降の処理は、キャッシュRAMで実行される。ステップS22において、スタックの初期化やデータの初期化が行われる。具体的には、GPレジスタの初期化、スタック領域の初期化、スタックポインタレジスタの初期化、C/C++非初期化データ(.sbss, .bss)をゼロで初期化するなどの処理が行われる。
【0088】
なお、スタック領域の初期化は、デフォルトでは省略されるがデバッグ目的で行なわれるようにしても良い。また、C/C++非初期化データ(.sbss, .bss)をゼロで初期化は、本ブートストラップ実行前に.sbss, .bss領域をゼロ初期化している場合は省略することが可能な処理である。
【0089】
ステップS23において、ブートストラップ終了後のための例外や割込みに対するベクタの設定が行われる。そして、ステップS24において、ヒープ領域がゼロで初期化される。ステップS25において、C++の全広域変数のためのコンストラクタとイニシャライザが実行され、ステップS26において、全データのキャッシュがフラッシュされる。
【0090】
ステップS27において、全命令のキャッシュがクリアされ、ステップS28において、ブートストラップ終了(BEV=0)され、割込みが許可された状態にされ、ステップS29において、カーネル初期化、または、メインへのジャンプが行われる。
【0091】
このようなブートストラップ処理が行われる。このようなブ−トストラップの処理を実行するアプリケーションプログラム(実行ファイル)の構成について、図8を参照して説明する。
【0092】
実行ファイル51は、ブートストラップ部52とアプリケーション部53とに分けられる。ブートストラップ部52は、リロケータブルコード部54と非リロケータブルコード部55から構成される。アプリケーション部56は、非リロケータブルコード部56から構成される。なお、リロケータブルコードと非リロケータブルコードのどちらもアブソリュート形式でコンパイルされたものでよい。
【0093】
ブートストラップ部52のリロケータブルコード部54は、エントリポイント57、ジャンプ・アクセスコード58,59、ブートストラップ内サブルーチン60、および、ジャンプコード61を含む。
【0094】
エントリポイント57は、リセットベクタ(LMA)とRAM領域の先頭(VMA)のデータを含む。ジャンプ・アクセスコード58は、ブートストラップ部52内のアドレスをPC(プログラムカウンタ)相対により解決し、ジャンプし、アクセスするためのコードである。ジャンプ・アクセスコード59は、ブートストラップ部52外のアドレスを解決し、ジャンプし、アクセスするためのコードである。
【0095】
このジャンプ・アクセスコード59のブートストラップ部52外のアドレスの解決は、JAL()マクロと、LA()マクロが用いられる。JAL()マクロは、次式(1)または次式(2)で表される。
jump_adr_ads=VMA(jump_adr)―VMA(PC)+PC
JAL(jump_adr)=JUMP(jump_adr_ads)・・・(1)
式(1)において、VMA()は、仮想メモリアドレスを求めることを示し、JUMP()は、絶対アドレス分岐命令であることを示す。
【0096】
jump_adr_ads=VMA(jump_adr)―VMA(entry_adr)+LMA(entry_adr)
JAL(jump_adr)=JUMP(jump_adr_ads)・・・(2)
式(2)において、VMA()とJUMP()は、式(1)と同じ意味であり、LMA()は、ロードメモリアドレスを求めることを示している。
【0097】
JAL()マクロは、式(1)または式(2)に示す計算式によりジャンプ先アドレスjump_adr_absを計算し、絶対アドレス分岐命令によってジャンプするためのマクロである。
【0098】
LA()マクロは、次式(3)または次式(4)で表される。
Load_adr_ads=VMA(load_adr)―VMA(PC)+PC
LA(reg,load_adr)=LOAD(reg,load_adr_ads)・・・(3)
式(3)において、VMA()は、仮想メモリアドレスを求めることを示している。LOAD()は、絶対アドレスロード命令を示している。
【0099】
Load_adr_ads=VMA(load_adr)―VMA(entry_adr)+LMA(entry_adr)
LA(reg,load_adr)=LOAD(reg,load_adr_ads)・・・(4)
式(4)において、VMA()とLOAD()は、式(3)と同じ意味であり、LMA()は、ロードメモリアドレスを求めることを示している。
【0100】
LA()マクロは、式(3)または式(4)に示した計算式によりロードアドレスload_adr_absを計算し、ロード命令によって指定レジスタへメモリ内容をロードするためのマクロである。
【0101】
ブートストラップ内サブルーチン60(図8)は、ブートストラップ部52内で、繰り返し行われる機能などが書き込まれる。ジャンプコード61は、ブートストラップ部52の非リロケータブルコード部55のジャンプアクセスコード62にジャンプするためのコードが書き込まれる。
【0102】
このようなデータから構成されるリロケータブルコード部54は、少なくとも、ステップS11乃至S21までの処理において、全てリロケータブルなコードになるように分岐命令がコーディングされているようにする。また、ブートストラップ本体(crt0.s)内の分岐、関数呼び出し、シンボル参照は、上述したように、PC相対アドレス分岐命令が利用される。
【0103】
ブートストラップ本体(crt0.s)外の関数呼び出し・シンボル参照は、全ての外部シンボル・関数はリンクアドレスになるため、リロケータブルコード部54内では、実行アドレスとリンクアドレスのオフセットを加算して分岐やシンボル参照が行なわれる。これを実現するためには、既に説明したJAL()マクロ、LA()マクロが利用される。
【0104】
ステップS21における処理(=キャッシュRAM領域への移行の処理)より後の処理は、非リロケータブルコードの処理となる。そのため、この領域へ突入する際には絶対アドレス分岐命令を利用して、ジャンプしなければならない。その処理を行うためのコードが、上述したジャンプコード61である。
【0105】
図8の説明に戻り、ブートストラップ部52の非リロケータブルコード部55は、ジャンプアクセスコード62とジャンプコード63とから構成されている。ジャンプアクセスコード62は、ブートストラップ部52外のアドレスを、VMA(Valid Memory Address )により解決し、ジャンプし、アクセスするためのコードである。ジャンプコード63は、アプリケーション部53にジャンプするためのコードである。
【0106】
非リロケータブルコード部55は、C言語やC++言語、アセンブラなど通常の言語でプログラミングが可能な部分である。
【0107】
アプリケーション部53の非リロケータブルコード部56は、エントリポイント64、コード・データ66,66、および、例外・割込みベクタ67から構成されている。エントリポイント64は、ジャンプコード63によるジャンプ先であることを示す部分である。
【0108】
コード・データ65は、ブートストラップ部52から呼ばれるコードやデータであり、コード・データ66は、ブートストラップ部から呼ばれないコードやデータである。例外・割込ベクタ67は、所定の処理が行われているときに、何らかの異常が発生したときなど、例外的に行われる処理などについてのデータである。
【0109】
このような構成を有するプログラムにより、図7に示したようなフローチャートの処理が実行されるわけだが、その処理の特徴についてここで記載する。まず、キャッシュ・コヒーレンシ(Cache Coherence)について説明する。図7のステップS20の直後にキャッシュ・コヒーレンシを保つため、該当個所について命令キャッシュのクリアが必要である。図7に示したフローチャートだと、ステップS20とステップS21の間で行なわれることになるが、ステップS16で初期化の処理が行われているので、ステップS20とステップS21の間で同じような処理が繰り返される必要はない。
【0110】
ステップS23の例外・割込みベクタがコピーされるという処理の後でも同様にキャッシュコヒーレンシを保つ必要があるが、例外処理と割り込み処理は、ブートストラップが終了するまで実行されることが無い。そのためにステップS26における、データキャッシュフラッシュと、ステップS27における、命令キャッシュクリアは、ステップS25の処理のあとで行っている。
【0111】
また、ステップS26におけるデータキャッシュフラッシュは、これ以外にステップS22、ステップS24、およびステップS25で行なわれるRAMへの書き込みを確実に行うための処理(後述のマルチプロセッサ対応)も兼ねている。
【0112】
次にマルチプロセッサ対応について説明する。ステップS26の処理として行われる、全データキャッシュフラッシュは、1つのCPUに着目している場合、上述のキャッシュ・コヒーレンシにかかわる部位以外(ステップS22,24,25)については別段と必要とされない。しかしながら、これらのデータ部が他のCPUと共有される場合を考慮し、確実に書き込みが行なわれるようにするために、フラッシュする。
【0113】
次に、アプリケーションのロードイメージ作成方法について説明する。まず実行ファイルについて説明する。対象とされるユーザのアプリケーションプログラムとブートストラップは、図8に示したように、単一の実行ファイルとしてコンパイル、リンクされる必要がある。この実行ファイルはELF/DWARF形式になっているのが一般的であるが、ICE、ホストデバッガが扱える形式ならその他の形式を用いることも可能である。
【0114】
実行ファイルのリンクアドレスについて説明する。対象とされるユーザのアプリケーションプログラムが、実際に実行させたいアドレスでリンクされ(一般に、この実行させたいアドレスのことをVMA:仮想メモリアドレスと呼ぶ)、レイアウトされる(一般に、このレイアウトするアドレスのことをLMA:ロードメモリアドレスと呼ぶ)。但し、前記アプリケーションの実行装置、実行環境で上げた領域以外は無効である。
【0115】
次に、ロード用イメージへの変換について説明する。ロード用イメージのファイルとしては、例えば、Motorol−S形式があるが、ICEやホストローダーが扱えるならその他の形式でも良い。Motorol−S形式が利用される場合、実行ファイル(ELF/DWARF形式)から変換される。
【0116】
対象とされるアプリケーションプログラムが、ROM領域や非キャッシュRAM領域に配置される場合、エントリポイントが、その領域へマップされるようにオフセット値が加えられたMotorol−S形式やELF/DWARF形式などのロード用イメージファイルが作成される。
【0117】
対象とされるアプリケーションプログラムがキャッシュRAM領域に配置される場合、そこに対応する非キャッシュRAM領域へマップされるようにオフセット値が加えられたMotorol−S形式やELF/DWARF形式のファイルをロード用イメージとして作成される。これはロードの際キャッシュの状態と関係なく、確実にRAMへロードするためである。
【0118】
実行環境が別の形式を必要とする場合、Motorol−S形式やELF/DWARF形式として一旦作成されたファイルがさらに変換されて利用される。例えば、VCSが利用される場合、必要に応じてdat形式へ変換されればよい。
【0119】
次に、ロード前に行う処理についてだが、キャッシュまたは非キャッシュのRAMからブートする場合、DRAMの初期化が必要なときは、ロードが行なわれる前に外部から初期化される。そして、ロードの方法だが、上述したロード用イメージ全体を対象とするブート領域に全てロードされる。これは、非キャッシュROM領域からブートする場合も同様に行われる。
【0120】
キャッシュまたは非キャッシュのRAMからブートする場合、上述した方法で生成されたロード用イメージファイル、例えば、Motorola−S形式等のファイルが利用可能である。ロードするアドレス(LMA)及びロードされるアプリケーションプログラム及びブートストラップは、これに含まれている。
【0121】
ロードを行う主体は、ホストCPU、ICE、JTAG−ICE等が利用された自ホストデバッガ、または、シミュレーション環境のローダー(VCSのreadmemh等)、これらのいずれの場合でも可能である。
【0122】
そして、ロード後に行なわれる処理だが、デバッガが利用されてシンボリックデバッグが行なわれる場合、実行ファイルからシンボルがロードされる。
【0123】
次に、アプリケーションの実行方式や装置について説明する。リセットから実行される場合(通常の処理の場合)、通常どおり、CPUのリセットが解除されCPUの実行が開始される。
【0124】
自ホストデバッガ以外から実行制御する場合(オプション1の場合)、他ホストデバッガ、ホストCPU、VCSなど自ホストデバッガ以外から実行させたい場合、自CPUのリセットベクタ上に、ロードされているエントリポイントのアドレスへのジャンプコードが置かれ、CPUの実行が開始される。例えば、非キャッシュRAMの場合、
li t0, 0xA0000000
jr t0
nop
とされる。
【0125】
自ホストデバッガから実行が制御される場合(オプション2の場合)、ICE、JTAG−ICEが利用されるとき、プログラム実行前にPCがロードされているエントリポイントのアドレスにセットされ、CPUの実行が開始される。
【0126】
処理のルーチン化、自動化(特別な処理、特にユーザ側の処理がなくても行われること)について、ロードイメージ作成は、Makefileを利用することによって、ブートストラップのロードイメージ作成方法を自動化できる。また、ロード・実行は、自・他ホストデバッガが利用される場合、ICEのバッチ処理機能を利用することによってブートストラップのロード、実行が自動化できる。
【0127】
ブート条件をまとめると、図9に示したようになる。図9において、2重まるの印は、推奨を示し、まるの印は、ブートが可能なことを示し、三角の印はキャッシュのフラッシュが必要であることを示し、ばつの印は、ブートが不可能なことを示す。
【0128】
次に、図10乃至図15を参照して、図7に示したフローチャートにおける処理について、さらに説明する。図10乃至図15には、擬似的に、ROM領域とRAM領域を示し、それらの間で行われるデータの授受などの処理を、図7に示したフローチャートの各処理と対応付けて図示してある。また、ROM領域やRAM領域は、例えば、8MBである。また、図中、[]書きのアドレスは、Logical Addressを示し、その他のアドレスは、Phsical Addressを示す。
【0129】
図10は、図1乃至図5に示した構成のシステムにおいて、自律ブートで、ステップS11(図7)の処理として、通常の処理から処理が開始される場合、すなわち、ブートストラップのエントリポイントから処理が開始される場合の処理の流れを示してる。図10におけるROM領域は、図1乃至図3においては、ROM5−1乃至5−3であり、図4,5においては、外部ROM22である。また、図10におけるRAM領域は、図1乃至図5においては、RAM3−1乃至3−5である。
【0130】
ステップS11の処理として、ROM領域のエントリーポイント(Entry Point)から処理が実行される。そして、ステップS12乃至S19の処理が、ROM領域のプログラムに従って、順次実行され、ステップS21の処理として、ROM領域のプログラムが、RAM領域へとコピーされる。その後、そのようにしてRAM領域にコピーされたプログラムに従って、処理が行われる。
【0131】
図11は、図3、図5、または、図6に示した構成のシステム、換言すれば、リセットベクタをプログラム領域と重複しないRAM領域として構成したシステムにおいて、他律ブートで、通常の処理により処理が開始される場合、すなわちブートストラップのエントリポイントから処理が開始される場合の処理の流れを示している。
【0132】
図11における図中、上側に図示したRAM領域は、図3,5,6における外部RAM13に対応し、下側に図示したRAM領域は、図3,5,6におけるRAM3−3,3−5,3−6に対応する。図11に示した状況は、ステップS11の処理が行われる前の時点で、Host CPU(ホストコンピュータ11)またはICE32から、コード全体が外部RAM21にコピーされる。
【0133】
このようにして外部RAM21にコピーされたコードに従って、ステップS11以下の処理が、図10に示した状況と同様に実行される。図10に示した状況と図11に示した状況は、自律ブートであるか他律ブートであるかの違いであり、そのために、コード全体が、システムLSI1内のROM5に記憶されている状態から処理が開始されるか、システムLSI1外の外部RAM21に記憶された状態から処理が開始されるかの違いが生じるだけで、その後の処理は、基本的に同様に行われる。
【0134】
図12は、図3、図5、または、図6に示した構成のシステム、換言すれば、リセットベクタをプログラム領域と重複するRAM領域として構成したシステムにおいて、他律ブートで、通常の処理により処理が開始される場合、すなわち、ブートストラップのエントリポイントから処理が開始される場合の処理の流れを示している。
【0135】
この場合、図11に示した状況と同様に、Host CPUまたはICEから、コード全体が供給され、そのコード全体が、システムLSI1内のRAM3の領域、非キャッシュRAM領域、および、外部RAM21の領域に、それぞれコピーされる。ステップS11の処理としてエントリーポイントからの処理が開始されるが、そのエントリーポイントは、RAM領域(この場合、外部RAM21の領域)に設定されている。ステップS12の処理として、ブートストラップ本体、この場合、非キャッシュRAM領域にジャンプされる。
【0136】
そして、非キャッシュRAM上での処理が実行されていると、ステップS17の処理として、非キャッシュRAM上で処理が実行されていると判断されるため、ステップS21に処理が進められる。その結果、キャッシュRAM領域にジャンプ、すなわちこの場合、外部RAM21のRAM領域へとジャンプされる。その後の処理は、ジャンプ先のRAM領域のプログラムに従って行われる。
【0137】
図13は、図1乃至図5に示した構成のシステムにおいて、他律ブートで、オプション1により処理が開始される場合、すなわち、非キャッシュRAM領域へジャンプした後、ブートストラップのエントリポイントから処理が開始される場合で、ICE32などがなく、PCが変更することができない場合の処理の流れを示している。
【0138】
この場合、ROM領域、非キャッシュRAM領域、RAM領域の間において処理が実行されるわけだが、ROM領域(システムLSI1内のROM5またはシステムLSI1外の外部ROM22)には、ジャンプコードが記憶されており、そのジャンプコードにより、非キャッシュRAMにジャンプされる。このようにすることで、システムLSI1内にROMが備えられている場合でも、備えられていないROMレスのタイプでも、適切にブートが行われることになる。また、外部モードであっても内部モードであっても、問題なくブート処理が行われる。
【0139】
非キャッシュRAMにジャンプした後、さらにステップS12の処理として、ブートストラップ本体にジャンプされるが、ブートストラップ本体は、非キャッシュRAM領域内なので、非キャッシュRAM内でのジャンプの処理が行われる。その後の処理は、図12に示した状況と同様に行われる。
【0140】
図14は、図3、図5、または、図6に示した構成、換言すれば、リセットベクタをプログラム領域と重複しないRAM領域として構成したシステムにおいて、他律ブートで、オプション1により処理が開始される場合、すなわち、非キャッシュRAM領域へジャンプした後、ブートストラップのエントリポイントから処理が開始される場合で、ICE32などがなく、PCが変更することができない場合の処理の流れを示している。
【0141】
この場合、Host CPUまたはICEからは、ジャンプコードが、外部RAM21の領域にコピーされ、コード全体は、非キャッシュRAM領域とシステムLSI1のRAM3の領域にコピーされる。図13に示した状況は、外部RAM21の領域にコピーされたジャンプコードに従って、非キャッシュRAM領域にジャンプした後は、図13に示した状況のときと、同様の流れで処理が行われる。
【0142】
図15は、図1乃至図5に示したシステム構成において、または、図3、図5、または、図6に示した構成で、リセットベクタをプログラム領域と重複しないRAM領域として構成したシステムにおいて、他律ブートで、オプション2により処理が開始される場合、すなわち、非キャッシュRAM領域へジャンプした後、ブートストラップのエントリポイントから実行が開始される場合の処理の流れを示している。
【0143】
この場合、Host CPUまたはICEからは、非キャッシュRAM領域とRAM領域に、コード全体がコピーされる。そしてこの場合、ステップS11の処理としては、非キャッシュRAMから処理が開始される。その後の処理は、基本的に、図14に示した状況と同様に行われる。
【0144】
このようにブートが行われることにより、以下のような利点がある。アブソリュート形式のままアプリケーションプログラムとして利用可能となる。すなわち、使用されるシステムLSI専用の既存の開発ツールによって作成されたアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能となる。
【0145】
ファームウエアの変更無しに他律ブート、自律ブートの両方が可能となる。すなわち、ROMから自律起動する「自律ブート」と、外部モード時に外部ホストまたはデバッガからの制御によってファームウエアをRAMにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに、開発時・商品化時に利用することができる。
【0146】
ブートメモリ領域に対するデバイス選定の前にファームウエア開発が可能となる。すなわち、システムLSIのプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発ができ、システムLSIとアプリケーションの協調設計がシームレスに行えるようになる。
【0147】
ブートメモリ領域がROMであっても、ICEなどが必要とせず、煩雑なROMの書き換え作業が不要となる。すなわち、ブートメモリ領域がROMである場合、ROMを書き換えるかROM ICEを利用するなどしないと通常、ファームウエアの変更が出来ない。特に、EPROM内蔵タイプの場合、ROM ICEが利用できないため、ROMを書き換える煩雑な作業が必要であるが、本発明を適用することにより、ファームウエアの変更無しに他律ブートを利用し、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応できるようになる。
【0148】
上述した一連の処理を行うプログラムを記録媒体に記録し、配布するといったことも可能である。そのようにした場合の記録媒体について説明する。一連の処理をソフトウェア(プログラム)により実行させる場合には、そのソフトウェアを構成するプログラムが専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【0149】
図16は、汎用のパーソナルコンピュータの内部構成例を示す図である。パーソナルコンピュータのCPU(Central Processing Unit)101は、ROM(Read Only Memory)102に記憶されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)103には、CPU101が各種の処理を実行する上において必要なデータやプログラムなどが適宜記憶される。入出力インタフェース105は、キーボードやマウスから構成される入力部106が接続され、入力部106に入力された信号をCPU101に出力する。また、入出力インタフェース105には、ディスプレイやスピーカなどから構成される出力部107も接続されている。
【0150】
さらに、入出力インタフェース105には、ハードディスクなどから構成される記憶部108、および、インターネットなどのネットワークを介して他の装置とデータの授受を行う通信部109も接続されている。ドライブ110は、磁気ディスク121、光ディスク122、光磁気ディスク123、半導体メモリ124などの記録媒体からデータを読み出したり、データを書き込んだりするときに用いられる。
【0151】
記録媒体は、図16に示すように、パーソナルコンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク121(フレキシブルディスクを含む)、光ディスク122(CD−ROM(Compact Disc−Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク123(MD(Mini−Disc)(登録商標)を含む)、若しくは半導体メモリ124などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記憶されているROM102や記憶部108が含まれるハードディスクなどで構成される。
【0152】
なお、本明細書において、媒体により提供されるプログラムを記述するステップは、記載された順序に従って、時系列的に行われる処理は勿論、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【0153】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【0154】
【発明の効果】
本発明によれば、使用されるシステムLSI専用の既存の開発ツールによって作成されたアブソリュート形式のメインプログラムを、そのままアプリケーションプログラムとして利用可能となる。
【0155】
また、本発明によれば、ROMから自律起動する「自律ブート」と、外部モード時に外部ホストまたはデバッガからの制御によってファームウエアをRAMにコピーし起動する「他律ブート」の両方のブート方法を、プログラムを変更すること無しに、開発時・商品化時に利用することができる。
【0156】
また、本発明によれば、システムLSIのプログラムメモリやブート用メモリ領域に対するデバイスの決定する前の段階からアプリケーションの開発ができ、システムLSIとアプリケーションの協調設計がシームレスに行えるようになる。
【0157】
さらに本発明によれば、ブートメモリ領域がROMである場合、ROMを書き換えるかROM ICEを利用するなどしないと通常、ファームウエアの変更が出来ない。特に、EPROM内蔵タイプの場合、ROM ICEが利用できないため、ROMを書き換える煩雑な作業が必要であるが、本発明を適用することにより、ファームウエアの変更無しに他律ブートを利用し、セット開発時のファームウエアやデバイスの初期化コード修正など、頻繁なファームウェアイメージの変更に柔軟に対応できるようになる。
【図面の簡単な説明】
【図1】システムLSIを含む構成を示す図である。
【図2】システムLSIを含む構成を示す図である。
【図3】システムLSIを含む構成を示す図である。
【図4】システムLSIを含む構成を示す図である。
【図5】システムLSIを含む構成を示す図である。
【図6】システムLSIを含む構成を示す図である。
【図7】ブート処理について説明するためのフローチャートである。
【図8】実行ファイルについて説明するための図である。
【図9】ブート可能条件について説明するための図である。
【図10】処理の流れを説明するための図である。
【図11】処理の流れを説明するための図である。
【図12】処理の流れを説明するための図である。
【図13】処理の流れを説明するための図である。
【図14】処理の流れを説明するための図である。
【図15】処理の流れを説明するための図である。
【図16】媒体を説明する図である。
【符号の説明】
1 システムLSI, 2 CPU, 3 RAM, 4 I/O, 5 ROM, 11 ホストコンピュータ, 12 外部バス, 13 外部RAM,21 外部RAM, 22 外部ROM, 23 モード切替スイッチ, 24 モード切替制御装置, 31 メモリマッピング変換回路, 32 ICE
Claims (10)
- 少なくとも1つのCPUと、
リセットベクタが含まれるブート用メモリ領域を含み、前記CPUとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、
キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、前記CPUの外部から書き換えが可能で、前記CPUからメモリコントローラの初期化及び読み書きが可能で、必要に応じ前記CPUとは異なる部分から前記メモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリと
を備え、
オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置により作成されるプログラムおいて、
アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、
前記リンク先のファイルを入力とし、前記エントリポイント、前記ブートストラップ、前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、
前記レイアウトの際、前記アプリケーション実行用メモリ領域のアドレスは、前記CPUによってキャッシュされる領域、または、キャッシュされない領域であり、
前記実行ファイルは、前記レイアウトされたアドレスと、レイアウトされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記アプリケーションプログラムが、前記ブート用メモリ領域に初期配置される場合、前記実行ファイルの前記エントリポイントが対応する前記ブート用メモリ領域の前記リセットベクタへマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記アプリケーションプログラムが前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記CPUによってキャッシュされない領域である場合、前記実行ファイルをそのままロード用イメージファイルとして出力し、
前記実行ファイルが前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記CPUによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にRAMへロードするため、前記実行ファイルの前記エントリポイントがこの領域に対応する前記CPUの非キャッシュ領域へマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記ロード用イメージファイルには前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記ロード用イメージファイルとは異なるファイル形式が必要とされる場合、前記ロード用イメージファイルを入力として、前記必要とされる形式へ変換する
ことを特徴とするプログラム。 - 前記実行ファイルが、前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納され、
前記ロード用イメージファイルが、前記ロードすべきアドレスとロードされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納されている
ことを特徴とする請求項1に記載のプログラム。 - 前記アプリケーションプログラムを前記アプリケーション実行用メモリ領域に初期配置する場合、必要に応じて前記CPUとは異なる部分から初期化を行い、
初期配置すべきアドレスと初期配置すべきデータは、前記ロード用イメージファイルに格納されている前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップを利用し、前記ロード用イメージファイルを初期配置する領域へロードする
ことを特徴とする請求項1に記載のプログラム。 - 前記アプリケーションプログラムが、前記ブート用メモリ領域にロードされている場合、そのまま前記CPUのリセットを解除し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされた前記エントリポイントを指すように書き換え、前記CPUの実行を開始し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、前記プログラムカウンタの書き換えが行えない場合、ロードされた前記エントリポイントへジャンプする命令を前記リセットベクタ中に書き込み、前記CPUのリセットを解除する
ことを特徴とする請求項1に記載のプログラム。 - 前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、
前記ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、前記リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、前記非リロケータブルコード領域へジャンプし、前記非リロケータブルコードを実行し、
前記リロケータブルコードでは、CPUの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、
前記アプリケーションプログラムは、前記ブート用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、前記アプリケーションプログラムのコード部及び初期化データを前記ブート用メモリ領域から前記アプリケーション実行用メモリ領域へコピーを行い、
また、前記アプリケーションプログラムは、前記CPUの非キャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からもブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、
さらに、前記アプリケーションプログラムは、前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理としては何も行わず、
前記非リロケータブルコードでは、スタック領域の初期化、C/C++非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、C++の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、
前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、
前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つ
ことを特徴とする請求項1に記載のプログラム。 - 少なくとも1つのCPUと、
リセットベクタが含まれるブート用メモリ領域を含み、前記CPUとは異なる部分から書き換えが可能な揮発性メモリ、または、置き換えが可能な不揮発性メモリと、
キャッシュ実行可能または非キャッシュ実行可能なアプリケーション実行用メモリ領域を含み、前記CPUの外部から書き換えが可能で、前記CPUからメモリコントローラの初期化及び読み書きが可能で、必要に応じ前記CPUとは異なる部分から前記メモリコントローラの初期化が可能である揮発性メモリ、または、初期化不可能又は不要な不揮発性メモリと
を備え、
オペレーションシステム、及び、オペレーションシステムを利用したアプリケーションが実行可能で、オペレーションシステムを使用しないフリースタンディングのアプリケーションも実行可能である装置に対するアプリケーションを作成する作成装置の情報処理方法おいて、
アプリケーションプログラム及びブートストラップは、ブートストラップのエントリポイントが、実行ファイルのエントリポイントとなるように、単一の実行ファイルとしてリンクし、
前記リンク先のファイルを入力とし、前記エントリポイント、前記ブートストラップ、前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域のアドレスにマップされるようにレイアウトを行い、実行ファイルを生成し、
前記レイアウトの際、前記アプリケーション実行用メモリ領域のアドレスは、前記CPUによってキャッシュされる領域、または、キャッシュされない領域であり、
前記実行ファイルは、前記レイアウトされたアドレスと、レイアウトされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記アプリケーションプログラムが、前記ブート用メモリ領域に初期配置される場合、前記実行ファイルの前記エントリポイントが対応する前記ブート用メモリ領域の前記リセットベクタへマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記アプリケーションプログラムが前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記CPUによってキャッシュされない領域である場合、前記実行ファイルをそのままロード用イメージファイルとして出力し、
前記実行ファイルが前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域に初期配置され、その配置される領域が前記CPUによってキャッシュされる領域である場合、ロードの際キャッシュの状態と関係なく確実にRAMへロードするため、前記実行ファイルの前記エントリポイントがこの領域に対応する前記CPUの非キャッシュ領域へマップされるように、前記レイアウトされたアドレスをロードすべきアドレスへ、前記実行ファイルが入力となり、ロード用イメージファイルを出力するようオフセット変換し、
前記ロード用イメージファイルには前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップが含まれ、
前記ロード用イメージファイルとは異なるファイル形式が必要とされる場合、前記ロード用イメージファイルを入力として、前記必要とされる形式へ変換する
ことを特徴とする情報処理方法。 - 前記実行ファイルが、前記レイアウトされたアドレスとレイアウトされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納され、
前記ロード用イメージファイルが、前記ロードすべきアドレスとロードされる前記アプリケーションプログラム及び前記ブートストラップを別々のファイルに分割されて格納されている
ことを特徴とする請求項6に記載の情報処理方法。 - 前記アプリケーションプログラムを前記アプリケーション実行用メモリ領域に初期配置する場合、必要に応じて前記CPUとは異なる部分から初期化を行い、
初期配置すべきアドレスと初期配置すべきデータは、前記ロード用イメージファイルに格納されている前記ロードすべきアドレスと、ロードされる前記アプリケーションプログラム及び前記ブートストラップを利用し、前記ロード用イメージファイルを初期配置する領域へロードする
ことを特徴とする請求項6に記載の情報処理方法。 - 前記アプリケーションプログラムが、前記ブート用メモリ領域にロードされている場合、そのまま前記CPUのリセットを解除し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、ブート領域以外からソフトウエアを起動できる場合、プログラムカウンタがロードされた前記エントリポイントを指すように書き換え、前記CPUの実行を開始し、
前記アプリケーションプログラムが、前記アプリケーション実行用メモリ領域にロードされ、前記プログラムカウンタの書き換えが行えない場合、ロードされた前記エントリポイントへジャンプする命令を前記リセットベクタ中に書き込み、前記CPUのリセットを解除する
ことを特徴とする請求項6に記載の情報処理方法。 - 前記アプリケーションプログラムは、高級言語やアセンブラによりプログラミングされ、アブソリュート形式である非リロケータブルコードで構成され、
前記ブートストラップは、アブソリュート形式であるリロケータブルコードと非リロケータブルコードから構成され、前記リロケータブルコードから開始し、絶対アドレス分岐命令を利用して、前記非リロケータブルコード領域へジャンプし、前記非リロケータブルコードを実行し、
前記リロケータブルコードでは、CPUの初期化、データキャッシュの初期化と、起動するメモリ領域の違いに応じた処理を行い、
前記アプリケーションプログラムは、前記ブート用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化、メモリコントローラの初期化、前記アプリケーションプログラムのコード部及び初期化データを前記ブート用メモリ領域から前記アプリケーション実行用メモリ領域へコピーを行い、
また、前記アプリケーションプログラムは、前記CPUの非キャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からもブート可能で、前記起動するメモリ領域の違いによる処理として命令キャッシュの初期化を行い、
さらに、前記アプリケーションプログラムは、前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブート可能で、前記起動するメモリ領域の違いによる処理としては何も行わず、
前記非リロケータブルコードでは、スタック領域の初期化、C/C++非初期化データのゼロ初期化、例外・割込みベクタ設定、ヒープ領域の初期化、C++の全広域変数のためのコンストラクタとイニシャライザの実行、全データキャッシュフラッシュ、全命令キャッシュクリアという処理系に合わせた初期化処理を行い、メインルーチン又はオペレーションシステムの初期化ルーチンへジャンプし、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ内の分岐・関数呼び出し・シンボル参照についてはプログラムカウンタの相対アドレス分岐命令を利用し、
前記ブートストラップの前記リロケータブルコードにおいて、前記ブートストラップ外の関数呼び出し・シンボル参照は、実行アドレスとリンクアドレスのオフセットを加算して分岐先・戻りアドレス計算、シンボル参照を行い、
前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合、命令キャッシュとデータキャッシュのコヒーレンシを保ち、
前記CPUのキャッシュ領域としてマップされる前記アプリケーション実行用メモリ領域からブートする場合で、マルチプロセッサであるとき、プロセッサ間のメモリコヒーレンシを保つ
ことを特徴とする請求項6に記載の情報処理方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003148085A JP2004348677A (ja) | 2003-05-26 | 2003-05-26 | プログラムおよび情報処理方法 |
US10/854,665 US7331046B2 (en) | 2003-05-26 | 2004-05-26 | Program and information processing method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003148085A JP2004348677A (ja) | 2003-05-26 | 2003-05-26 | プログラムおよび情報処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004348677A true JP2004348677A (ja) | 2004-12-09 |
Family
ID=33534421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003148085A Pending JP2004348677A (ja) | 2003-05-26 | 2003-05-26 | プログラムおよび情報処理方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7331046B2 (ja) |
JP (1) | JP2004348677A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2409311A (en) * | 2003-12-15 | 2005-06-22 | Hewlett Packard Development Co | A platform independent method for establishing a run-time data area for a firmware module |
JP2008015725A (ja) * | 2006-07-05 | 2008-01-24 | Alpine Electronics Inc | 情報処理装置およびプログラム起動方法 |
JP2011527777A (ja) * | 2008-02-29 | 2011-11-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 安全な起動メカニズムを備えたコンピュータシステム |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040103272A1 (en) * | 2002-11-27 | 2004-05-27 | Zimmer Vincent J. | Using a processor cache as RAM during platform initialization |
US8010734B2 (en) * | 2004-06-04 | 2011-08-30 | Broadcom Corporation | Method and system for reading instructions from NAND flash memory and writing them into SRAM for execution by a processing device |
JP2006323739A (ja) * | 2005-05-20 | 2006-11-30 | Renesas Technology Corp | メモリモジュール、メモリシステム、及び情報機器 |
US7640424B2 (en) * | 2005-10-13 | 2009-12-29 | Sandisk Corporation | Initialization of flash storage via an embedded controller |
JP2007115002A (ja) * | 2005-10-20 | 2007-05-10 | Fujitsu Ltd | 半導体回路装置の検証方法及びその検証方法を実施するためのcad装置 |
KR100734303B1 (ko) * | 2006-01-14 | 2007-07-02 | 삼성전자주식회사 | 시스템 프로그램 다운로드 방법 |
CN100504779C (zh) * | 2006-06-30 | 2009-06-24 | 联想(北京)有限公司 | 一种加速bios运行的方法 |
CN100375030C (zh) * | 2006-07-14 | 2008-03-12 | 杭州国芯科技有限公司 | 一种电子系统程序加载方法 |
WO2008014635A1 (en) | 2006-07-18 | 2008-02-07 | Intel Corporation | A method to use global variables for pre-efi initialization modules in efi-based firmware |
US7797523B2 (en) * | 2006-09-25 | 2010-09-14 | Hewlett-Packard Development Company, L.P. | Method and system of executing stack-based memory reference code |
KR100825786B1 (ko) * | 2006-10-26 | 2008-04-29 | 삼성전자주식회사 | 메모리 카드 및 메모리 카드의 디버깅 방법 |
US7987348B2 (en) * | 2007-03-30 | 2011-07-26 | Intel Corporation | Instant on video |
US8510788B2 (en) * | 2009-11-12 | 2013-08-13 | Echostar Technologies L.L.C. | Build profile for a set-top box |
US8504875B2 (en) * | 2009-12-28 | 2013-08-06 | International Business Machines Corporation | Debugging module to load error decoding logic from firmware and to execute logic in response to an error |
KR101636870B1 (ko) * | 2010-02-26 | 2016-07-06 | 삼성전자주식회사 | 최소 부트 이미지의 생성 방법 및 장치 |
US10394570B2 (en) | 2010-02-26 | 2019-08-27 | Hp Printing Korea Co., Ltd. | Method of generating boot image for fast booting and image forming apparatus for performing the method, and method of performing fast booting and image forming apparatus for performing the method |
GB2493340A (en) * | 2011-07-28 | 2013-02-06 | St Microelectronics Res & Dev | Address mapping of boot transactions between dies in a system in package |
WO2013055044A1 (en) * | 2011-10-14 | 2013-04-18 | Samsung Electronics Co., Ltd. | Method of generating boot image for fast booting and image forming apparatus for performing the method, and method of performing fast booting and image forming apparatus for performing the method |
KR101959359B1 (ko) | 2012-11-06 | 2019-03-18 | 에이치피프린팅코리아 유한회사 | 빠른 부팅을 위한 부트 이미지를 업데이트하는 방법 및 이를 수행하는 화상형성장치 |
US9189409B2 (en) * | 2013-02-19 | 2015-11-17 | Avago Technologies General Ip (Singapore) Pte. Ltd. | Reducing writes to solid state drive cache memories of storage controllers |
US9690582B2 (en) * | 2013-12-30 | 2017-06-27 | Intel Corporation | Instruction and logic for cache-based speculative vectorization |
US10372616B2 (en) * | 2015-06-03 | 2019-08-06 | Renesas Electronics America Inc. | Microcontroller performing address translations using address offsets in memory where selected absolute addressing based programs are stored |
US9678682B2 (en) | 2015-10-13 | 2017-06-13 | International Business Machines Corporation | Backup storage of vital debug information |
US10503931B2 (en) * | 2016-05-09 | 2019-12-10 | Arris Enterprises Llc | Method and apparatus for dynamic executable verification |
JP2019040571A (ja) * | 2017-08-29 | 2019-03-14 | オンキヨー株式会社 | 電子機器 |
CN113467797B (zh) * | 2020-03-30 | 2024-03-15 | 西安诺瓦星云科技股份有限公司 | 程序更新方法、装置和系统以及计算机可读存储介质 |
CN111796839B (zh) * | 2020-07-07 | 2024-04-09 | 北京经纬恒润科技股份有限公司 | 控制器程序管理方法和装置 |
CN114489800A (zh) * | 2022-01-12 | 2022-05-13 | 珠海格力电器股份有限公司 | 中断处理方法、装置、电子设备及存储介质 |
CN117170753B (zh) * | 2023-08-18 | 2024-04-09 | 新汽有限公司 | 程序处理方法、程序处理装置、车辆和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09138747A (ja) * | 1995-11-14 | 1997-05-27 | Advanced Circuit Technol:Kk | 超小型コンピュータ装置 |
JP2000056984A (ja) * | 1998-08-13 | 2000-02-25 | Mitsubishi Electric Corp | メモリ内蔵マイクロコンピュータ及びマイクロコンピュータのリセット方法 |
JP2000172380A (ja) * | 1998-12-03 | 2000-06-23 | Mitsubishi Electric Corp | マイクロコンピュータ |
JP2001256044A (ja) * | 2000-03-14 | 2001-09-21 | Sony Corp | データ処理装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5307497A (en) | 1990-06-25 | 1994-04-26 | International Business Machines Corp. | Disk operating system loadable from read only memory using installable file system interface |
US6052778A (en) * | 1997-01-13 | 2000-04-18 | International Business Machines Corporation | Embedded system having dynamically linked dynamic loader and method for linking dynamic loader shared libraries and application programs |
US6098158A (en) * | 1997-12-18 | 2000-08-01 | International Business Machines Corporation | Software-enabled fast boot |
JPH11265289A (ja) * | 1998-03-16 | 1999-09-28 | Mitsubishi Electric Corp | 情報処理装置および情報処理装置の高速初期起動方法 |
US6279109B1 (en) * | 1999-01-07 | 2001-08-21 | Dell U.S.A., L.P. | Computing system and operating method for booting and running a graphical user interface (GUI) with r/w hard drive partition unavailable |
-
2003
- 2003-05-26 JP JP2003148085A patent/JP2004348677A/ja active Pending
-
2004
- 2004-05-26 US US10/854,665 patent/US7331046B2/en not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH09138747A (ja) * | 1995-11-14 | 1997-05-27 | Advanced Circuit Technol:Kk | 超小型コンピュータ装置 |
JP2000056984A (ja) * | 1998-08-13 | 2000-02-25 | Mitsubishi Electric Corp | メモリ内蔵マイクロコンピュータ及びマイクロコンピュータのリセット方法 |
JP2000172380A (ja) * | 1998-12-03 | 2000-06-23 | Mitsubishi Electric Corp | マイクロコンピュータ |
JP2001256044A (ja) * | 2000-03-14 | 2001-09-21 | Sony Corp | データ処理装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2409311A (en) * | 2003-12-15 | 2005-06-22 | Hewlett Packard Development Co | A platform independent method for establishing a run-time data area for a firmware module |
GB2409311B (en) * | 2003-12-15 | 2007-02-28 | Hewlett Packard Development Co | A platform independent method for establishing a run-time data area |
JP2008015725A (ja) * | 2006-07-05 | 2008-01-24 | Alpine Electronics Inc | 情報処理装置およびプログラム起動方法 |
JP2011527777A (ja) * | 2008-02-29 | 2011-11-04 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド | 安全な起動メカニズムを備えたコンピュータシステム |
Also Published As
Publication number | Publication date |
---|---|
US20050015582A1 (en) | 2005-01-20 |
US7331046B2 (en) | 2008-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2004348677A (ja) | プログラムおよび情報処理方法 | |
TWI407366B (zh) | 具有微代碼之微處理器、在微處理器中儲存資料的方法、以及使用於計算裝置之電腦程式產品 | |
CN1318979C (zh) | 更新光盘系统固件的方法 | |
US9720704B2 (en) | Data driven hardware chips initialization via hardware procedure framework | |
JP3186905B2 (ja) | コンピュータブート用両エンディアンファームウェアシステム | |
JP3786644B2 (ja) | バイトコンパイルされたJava(R)コードを実行するためのマイクロプロセッサ | |
JP2008536240A (ja) | レジスタファイルとしてのオペランドスタックへの、ネイティブな命令を用いた、マイクロプロセッサのアクセス | |
EP1522013A1 (en) | Automatic configuration of a microprocessor | |
US6745320B1 (en) | Data processing apparatus | |
JPH08272736A (ja) | 互換性のない中央処理装置をコンピュータシステムに使用する装置及び方法 | |
JPH11219299A (ja) | マイクロコンピュータ | |
JP2006313561A (ja) | データ処理装置 | |
JP2004086837A (ja) | データ処理装置 | |
JPH0651981A (ja) | データ処理装置 | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 | |
US20220147343A1 (en) | Tranistionary firmware packages | |
JP3839835B2 (ja) | データ処理装置及びマイクロコンピュータ | |
JP3539951B2 (ja) | データ処理装置 | |
Banik et al. | Payload | |
van der Wijst | An Accelerator based on the ρ-VEX Processor: an Exploration using OpenCL | |
Montini | Boot Firmware for Heterogeneous Systems running Linux | |
JP2731618B2 (ja) | エミュレータ | |
JP3006487B2 (ja) | エミュレーション装置 | |
Cores | IAR C/C++ Compiler | |
Wan et al. | Analysis and Design of Boot Loader on Embedded Electric power steering system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060428 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20090526 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20090728 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090918 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091020 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091214 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100202 |