私はubootにいて、ubootが使用しているRAMアドレス範囲を知る方法を知りたいです。
ubootを実行するにはメモリが必要なため、一部のRAMを使用できます。これらのRAMアドレスを変更しないようにしたいと思います。
ubootがロードされたメモリ領域をどのように知ることができますか?
答え1
DULG デバッグ UBootページには次のようなものがあります(「再配置」と呼ぶのはフラッシュからRAMに自分自身をコピーすることです)。
U-Bootを再配置した後にデバッグするには、U-Bootが再配置されたアドレスを知る必要があります。 PRAMなどの特殊機能を使用しない場合、このアドレスは通常CONFIG_SYS_MONITOR_LENです。この例では、RAMが16MBでCONFIG_SYS_MONITOR_LEN = 192KBの場合、アドレスは0x1000000 - 0x30000 = 0xFD0000になります。
テキストをよく読むと、プロセッサやマザーボードによって異なることがわかりますので、U-Bootソースコードを確認する必要があるかもしれません。
~についてエキスパートプラグ:
RAM側では、u-Bootは最初の8MBを予約します。残りは無料です。一部の開発者はフラッシュメモリをプログラムするためにカーネルとファイルシステムを0×800000にロードします。もう1つの共通点は100MBの境界(またはオフセット0×640000)です。
U-Bootコマンドのバージョンに応じて、空きRAMのどこかに文字列を置き、残りのRAMでその文字列を見つけて、メモリ内のU-Bootのおおよその位置を表示できます。
答え2
使用しているubootバージョンを起動すると、「仮想カーネルメモリレイアウト」が自動的に表示されます。
Memory: 859068k/859068k available, 25668k reserved, 0K highmem
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
DMA : 0xf9e00000 - 0xffe00000 ( 96 MB)
vmalloc : 0xe0800000 - 0xf4000000 ( 312 MB)
lowmem : 0x80000000 - 0xe0000000 (1536 MB)
pkmap : 0x7fe00000 - 0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.init : 0x80008000 - 0x8004d000 ( 276 kB)
.text : 0x8004d000 - 0x808ad000 (8576 kB)
.data : 0x808ce000 - 0x80937a40 ( 423 kB)
実行したいさまざまなユーティリティプロセス(メモリに大容量ファイルをロードするなど)にlowmem領域を使用することは安全だと思います。理想的には、この種の作業に高いメモリを使用したいと思いますが、そのオプションはありません(私の出力に見られるように)。