web-dev-qa-db-ja.com

Image vs zImage vs uImage

それらの違いは何ですか?

U-bootにはuImage形式のカーネルが必要であることは知っています。

私が最初に使用するシステムは、ステージ1ローダーから起動し、次にu-bootを呼び出します。 u-bootを破棄し、ステージ1ローダーから直接起動したい。どのタイプのカーネルイメージを使用する必要がありますか?

69
yildizabdullah

それらの違いは何ですか?

Image:汎用Linuxカーネルバイナリイメージファイル。

zImage:自己解凍型のLinuxカーネルイメージの圧縮バージョン。

Image:OSタイプとローダー情報を含むU-Bootラッパー(mkimageユーティリティによってインストールされる)を含むイメージファイル。
非常に一般的なプラクティス(たとえば、典型的なLinuxカーネルMakefile)は、zImageファイルを使用することです。 zImageファイルは自己解凍型なので(つまり、外部の解凍プログラムは必要ありません)、ラッパーは、実際には圧縮されていてもこのカーネルが「圧縮されていない」ことを示します。


U-Bootの作成者/管理者は、uImage内でzImageを使用する(広く普及している)使用を疑問視していることに注意してください。

実際、uImage内でzImageを使用するのはかなり愚かです。通常の(非圧縮)カーネルイメージを使用し、gzipのみを使用して圧縮し、これをmkimageのpoayloadとして使用することをお勧めします。このように、U-Bootは、各カーネルイメージにさらに別の解凍プログラムを含める代わりに、解凍を行います。

https://lists.yoctoproject.org/pipermail/yocto/2013-October/016778.html から引用)


どのタイプのカーネルイメージを使用する必要がありますか?

プログラミングしたいものは何でも選択できます。
ストレージを節約するために、おそらく非圧縮イメージよりも圧縮イメージを選択する必要があります。
カーネル(おそらくLinuxカーネル)の実行には、カーネルイメージをメモリにロードするだけではないことに注意してください。アーキテクチャ(例:ARM)およびLinuxカーネルバージョン(例:DTBの有無)に応じて、カーネル用に準備する必要があるレジスタとメモリバッファーがあります。 1つの例では、U-Bootが実行するハードウェアの初期化もあり、複製する必要がありました。

補遺

U-bootにはuImage形式のカーネルが必要であることは知っています。

これは、bootmコマンドのみを持つU-Bootのすべてのバージョンで正確です。
しかし、最新バージョンのU-Bootには、zImageを起動できるbootzコマンドを含めることもできます。

100
sawdust