2017-07-25 2 views
0

zImageとuImageの違いを知りたいと思います。 headerプラスロードアドレスとエントリポイントが含まれている(私はそれが正確に含まれているかわからない)私の理解でなぜzImageの代わりにuImageを使用するのですか?

uImageImagemkimageを実行することによって得られ、その結果として、それはU-ブートラッパーを追加し、私が知らない「余分な情報」かもしれない。

一方でzImageが圧縮Imageあり、それはロードアドレスとエントリポイントが含まれていません(私が何を考え、i'am間違ったなら、私を修正)だけでなく、U-Bootがbootzを使用して、それをロードすることができます。この場合

  • uImage代わりのzImageを使用してなぜですか?

  • zImageとuImageのフォーマットが何であるかを知りたいと思っています。参考にしてください。

答えて

1

はあなたの理解は部分的にしか正しい画像

上mkimageを実行することによって得ています。
uImageには、任意の種類のファイルを含めることができ、Linux Imageファイルに限定されません。実際には、(非圧縮の)イメージファイルではない可能性があります(これは通常のmakeオプションではありません)。

zImageのは、圧縮された画像である一方で、それは

(i'amは[原文]間違ったなら、私を修正し、私が何を考えて)ロードアドレスとエントリポイントが含まれていませんあなたが間違っている、のzImageには、カーネルのロードアドレスとエントリポイントが含まれています。カーネルイメージを適切なRAMアドレスに解凍するには、ロードアドレスが必要です。カーネルのエントリーポイントは、解凍された後でそれを実行するために必要です。
のMakefileは、物理メモリ+ 0x8000の開始に変換する必要があり

ZRELADDR == virt_to_phys(PAGE_OFFSET + TEXT_OFFSET) 

を使用し、ARM用画像とzImageのを構築します。

zImage自体(すなわち、自己抽出プログラム)は、PICの位置独立コードです。 zImageは、RAMのどこにでもロードすることができ、その最初のアドレスで実行することができます。つまり、そのエントリポイントはロードアドレスです。

この場合、なぜzImageの代わりにuImageを使用するのですか? U-ブートの古いバージョンの

bootzコマンドは、Linuxカーネルのために利用されていない可能性がありますので、選択の余地はありませんでした。
今日は主観的な選択かもしれません。

Linuxカーネルコミュニティでは、カーネルのU-Bootのサポートに多少の憤慨がありました。いくつかの人に道があるとすれば、私はあなたがメインラインソースからuImageを構築することができないという印象を受ける。

私はzImageとuImageの形式が何であるかを知りたいと思っています。

zImageのレイアウトは、基本的にそのリンカー仕様によって与えられます。
ARMの場合arch/arm/boot/compressed/vmlinux.lds.Sを参照してください。
_magic_startには意味のないロードアドレスが含まれています。これは、しかし、要件を起動ARMは、uImageのレイアウトは、単にU-ブートヘッダープラスであるラッセル・キングのDocumentation/arm/Booting

に取って代わられていることをヴィンセント・サンダースBooting ARM Linux

The zImage has a magic number and some useful information near its beginning. 

Table 2. Useful fields in zImage head code 
Offset into zImage Value  Description 
    0x24  0x016F2818  Magic number used to identify this is an ARM Linux zImage 
    0x28  start address The address the zImage starts at 
    0x2C  end address  The address the zImage ends at 

The start and end offsets can be used to determine the length of the compressed image (size = end - start). 
... 
The start address is usually 0 as the zImage code is position independent. 

ノートのセクション5に記載されていますそれが何であれ、画像ファイル。

(私が書いたうまくいけば、何もトムRiniが書いたものと矛盾しない。)

+0

1-「A uImageは、任意の種類のファイルを含めることができ、およびLinuxのイメージファイルに限定されるものではない」、あなたは一例をお願いでき、ありがとうuImageに含めることができるファイルの種類2 - "あなたは間違っている、zImageにはカーネルのロードアドレスとエントリーポイントが含まれています"、私はブートデバイスのロードアドレスではなく、カーネルロードアドレスを話していたとにかく、 zImageは、どこにロードされていようと、PICです。 – Mouin

+0

(1)ヘッダーには、イメージのタイプをエンコードするバイトがあります。 30以上の可能な値については、http://elixir.free-electrons.com/u-boot/latest/source/include/image.h#L197を参照してください。 (2)zImageにはオフセット0x28のロードアドレスが含まれています(しかし誰もそれを使用していないようです)。 – sawdust

+0

OK、クリア、ありがとう – Mouin

0

これは正しくありません。通常はuImageと呼ばれるものを作るために使われる "legacy" u-bootヘッダーは、arch/arm/boot/Imageの下にあるImageを含む何でもかまいませんが、ほとんどの場合zImageファイルです。これは、歴史的にU-BootでzImageを直接起動するサポートがなく、zImageはデータにチェックサムを提供しないため、uImageには利用可能なコンテンツのcrc32があるためです。

zImageファイルはスタンドアロンの実行可能ファイルです。従来の「uImage」形式は、U-Bootで正式に文書化されていませんが、コードを読むことで理解できます。ほとんどの場合、「uImage」を使用するのではなく、今日のFITイメージを使用することになります。これには、U-Bootソースのdoc/uImage.FITディレクトリに多数のドキュメントがあります。私の理解uImageで

関連する問題