私の ARM ベースのカスタム ボードでは、変更を行うたびに u-boot を NAND にフラッシュします。(いくつかのデバッグステートメント/変更を入れます)。uboot イメージを毎回フラッシュする代わりに、RAM メモリに直接ロードする方法はありますか?
Linux カーネル イメージの場合、メモリにロードし、bootm を使用してそのイメージを起動します。同様に、u-boot についても試しています。ご提案をお寄せください。
私の ARM ベースのカスタム ボードでは、変更を行うたびに u-boot を NAND にフラッシュします。(いくつかのデバッグステートメント/変更を入れます)。uboot イメージを毎回フラッシュする代わりに、RAM メモリに直接ロードする方法はありますか?
Linux カーネル イメージの場合、メモリにロードし、bootm を使用してそのイメージを起動します。同様に、u-boot についても試しています。ご提案をお寄せください。
Freescale の誰かが、P1022DS 評価システム (および他のいくつか) のためにこれを行いました。彼らは、ファイル ${UBOOTROOT}/doc/README.ramboot-ppc8500 (U-Boot V2010.12 内) でプロセスに関する多少役立つドキュメントを提供しています。このドキュメントは非常に簡潔で、多くの質問に答えていませんが、ボードのフラッシュ メモリが正しく動作する前に、新しいボードの U-Boot をデバッグする必要がある場合に開始するのに適切な場所であることがわかりました。
実際、フラッシュ メモリが機能しないことが、RAM で U-Boot をデバッグする理由の 1 つです。(README にリストされているいくつかの理由があり、この件に関して利用可能な他のアドバイスとは対照的に、それらはすべて私にとってかなり合理的に思えます)
私たちの状況では、初期のプロトタイプ ターゲット ボード ハードウェアに、フラッシュ メモリへのアドレス バス接続にエラーが含まれていたため、そのフラッシュ メモリを使用できなかったことが判明しました。ハードウェアの再設計と再製造が行われている間、フラッシュ メモリに依存しない U-Boot 構成の部分 (I2C、イーサネット、FPGA 構成、PCIe など) のテスト/デバッグを継続したいと考えていました。 U-Boot イメージがどこから来たのかに依存しないものがたくさんあります)。
U-Boot を JTAG インターフェイス (Codewarrior と USB TAP を使用) 経由で RAM にロードした後に実行すると、機能するフラッシュ メモリがなくても、U-Boot 起動タスクを続行できました。正しく機能するフラッシュ メモリを搭載した新しいバージョンのターゲット ボードを受け取った後、以前にテストできなかった U-Boot の部分のデバッグに戻りました。その後、U-Boot は完全に機能し、ボードが回転するのを待つ必要はありませんでした。
ブートローダのデバッグは少し難しいですが、適切なツールを使用すれば比較的簡単に実行できます。
私は PowerPC アーキテクチャを扱っており、BDI-3000 を使用すると、RAM に直接ロードしてデバッグできます (もちろん、DDR コントローラーを初期化した後)。
1 つのオプションは、オンチップ SRAM として構成できるオンチップ SRAM または L2 キャッシュがある場合です。BDI は最初に SRAM 領域にコピーできます。u-boot はそれを実行し (たとえば、DDR コントローラーを初期化します)、その後自分自身を DDR RAM に再配置します。常に低速な Flash に書き直すよりも確実に高速です。
実行するU-Bootイメージに、任意のアドレスからの実行を許可する起動コードが含まれている場合は、可能であるはずです。それがあなたのボードに当てはまるかどうかはわかりません。
スタートアップコードが現在の(PC相対)アドレスから最終実行アドレスにコードセクションをコピーすることから始まる場合(通常、これの前にこれらの領域が重複していないことを確認します)、.binファイルを次の場所にロードできます。 RAM内の任意のアドレス、およびを使用してそれを呼び出しますgo
。
私が見ることができた2番目の障害は、最初に無条件のRAMセットアップコードであり、これは多くのボードにあります。
少なくとも2004年には不可能でした。
これは、u-boot ドキュメント FAQ で読むことができるものです。
質問: 新しい U-Boot イメージが機能するかどうかわからないため、フラッシュ メモリを消去したくありません。フラッシュの代わりに RAM にロードできるように U-Boot を構成し、古いブート ローダーから起動することはできますか?
回答: いいえ。(Blackfin プロセッサまたは Socfpga ボードを使用している場合を除きますが、使用していない可能性があります。)
質問: でも、それは可能だと言われました??
回答: はい、そうです。もちろん、これは可能です。これはソフトウェアなので、すべてが可能です。しかし、それは難しく、サポートがなく、危険をはらんでいます。あなたがそれを行うことを選択した場合、あなたは自分自身です。そして、それはあなたの問題を解決するのに役立ちません。
ソース: http://www.denx.de/wiki/view/DULG/CanUBootBeConfiguredSuchThatItCanBeStartedInRAM
変更した U-Boot で構成するハードウェアに注意してください (注意してください)。U Boot は、重要なモジュールを初期化することを目的としています。一部のモジュールはオンザフライで再構成できないか、起動時に初期化/構成されたかのように動作しない場合があります。
USBブートを使用できます。TI と Freescale は、USB ブート ユーティリティを提供しています。他のメーカーは知りません。
ターゲット ボードがネットワーク ブートをサポートしている場合、ネットワーク経由でホスト マシンから RAM に uboot イメージをロードできます。
ここでの問題は、あなたがやろうとしていることは、ブートローダーとは何かという哲学に反するということです. ほとんどのプロセッサでは、コードを Flash から開始する必要があります。そのコードはブートローダーと呼ばれます。 それがU-Bootです。
ただし、U-boot を真のブートローダーにならないように変更したい場合は、好きなようにできます。それはただのソフトウェアです。ただし、上記の理由により、メインラインのサポートは期待しないでください。