1. ホーム
  2. linux-kernel

[解決済み] Image vs zImage vs uImage

2023-01-29 15:13:52

質問

両者の違いは何ですか?

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

私が使用しているシステムは、最初にステージ 1 ローダーからブートし、その後 u-boot を呼び出します。私は、u-boot を破棄して、ステージ 1 ローダーから直接ブートしたいと思います。どのタイプのカーネルイメージを使用しなければならないのでしょうか。

どのように解決するのですか。

両者の違いは何ですか?

画像 : 一般的な Linux カーネルのバイナリイメージのファイルです。

zImage : 自己展開可能な Linux カーネルイメージの圧縮版です。

uImage : U-Boot ラッパーを持つイメージファイル ( mkimage ユーティリティによってインストールされます) を持つイメージファイルで、OS タイプとローダー情報を含んでいます。

非常に一般的な方法(例えば、典型的な Linux カーネルの Makefile)は、zImage ファイルを使用することです。 zImage ファイルは自己解凍型であるため (つまり、外部解凍器が不要)、ラッパーは、実際には圧縮されているにもかかわらず、このカーネルが "圧縮されていない" と表示することになります。


U-Boot の作者/メンテナンス担当者は、uImage の内部で zImage を使用する (広く普及している) ことは疑わしいと考えていることに留意してください。

実際、uImageの内部でzImageを使用するのはかなり愚かなことです。 それは 通常の(圧縮されていない)カーネルイメージを使用し、それをgzipで圧縮し、これをmkimageのpoayloadとして使用する方がはるかに良いです。 し、これを mkimage の poayload として使用します。 この方法では U-Boot が解凍を行うので、カーネルイメージに別の解凍器を入れる必要がありません。 この方法では、各カーネルイメージにさらに別の解凍器を含める代わりに、U-Boot が解凍を行います。

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


どのタイプのカーネルイメージを使用しなければならないのでしょうか?

あなたがプログラムしたいものを選べばいいのです。

ストレージの経済性を考えると、非圧縮のものよりも圧縮された画像を選ぶべきでしょう。

カーネル (おそらく Linux カーネル) の実行には、カーネル イメージをメモリに読み込むだけでは不十分であることに注意してください。 アーキテクチャ (例: ARM) や Linux カーネルのバージョン (例: DTB あり/なし) によって、カーネルのために準備しなければならないレジスタやメモリ バッファーがあります。 ある例では、U-Boot が実行するハードウェアの初期化もあり、これは複製する必要がありました。



追記

<ブロッククオート

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

を持つだけのU-Bootのすべてのバージョンで正確です。 bootm コマンドしかない U-Boot のすべてのバージョンに当てはまります。

しかし、より最近のバージョンの U-Boot では、このような bootz コマンドで zImage をブートすることができます。