web-dev-qa-db-ja.com

U-BootプロセスのLinuxロードアドレスについて

組み込みLinuxの原則を理解しようとしていますが、u-boot出力でアドレスを理解できません。

たとえば、i.MX6クワッドプロセッサをベースにしたUDOOボードを使用していて、U-Bootから次の出力を取得しました。

U-Boot 2013.10-rc3 (Jan 20 2014 - 13:33:34)

CPU:   Freescale i.MX6Q rev1.2 at 792 MHz
Reset cause: POR
Board: UDOO
DRAM:  1 GiB
MMC:   FSL_SDHC: 0
No panel detected: default to LDB-WVGA
Display: LDB-WVGA (800x480)
In:    serial
Out:   serial
Err:   serial
Net:   using phy at 6
FEC [PRIME]
Warning: FEC MAC addresses don't match:
Address in SROM is         00:c0:08:88:a5:e6
Address in environment is  00:c0:08:88:9c:ce

Hit any key to stop autoboot:  0 
Booting from mmc ...
4788388 bytes read in 303 ms (15.1 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.0.35
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4788324 Bytes = 4.6 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...

ロードアドレス0x10008000の値がわかりません。この特定のプロセッサのドキュメントによると、アドレスゾーン0x10000000-0xffffffffはメインメモリにマップされています。しかし、0x8000オフセットとは何ですか?この値の理由がわかりません。

カーネルイメージのロード元のアドレス0x12000000も理解できません。 SDカード用にマップされたメモリ領域はありますか?

これらのアドレス、またはさらに良いことに、このトピックに関するリソースへの参照について説明してください。私の目標は、u-bootとLinuxカーネルを別のボードに移植する方法を学ぶことです。

ありがとうございました!

12
Ivo Slanina

U-bootの環境変数を確認すると、カーネルイメージがブートデバイスからRAM location(ここでは、12000000)にfatloadのようなコマンドでコピーされていることがわかります。

さて、これはLOADADDRESSではありません。カーネルのコンパイル中にLOADADDRESSをコマンドラインに指定します。このアドレスの大部分は、プロセッサの物理アドレススペースのRAMの先頭からのオフセットが32Kです。

RAMは10000000にマッピングされ、カーネルLOADADDRESS10008000(32Kオフセット)です。bootmコマンドは、カーネルイメージを12000000から10008000アドレスに解凍してから、kernel entry pointを呼び出します。

12
GeekyJ

include/configsフォルダーを確認してください。すべてのボード定義が含まれています

i.MX uboot include/configs

Ubootを別のポートに移植するには、非常によく似たボードに基づいて、そこから変更します。

1
alex