それらの違いは何ですか?
u-bootにはuImage形式のカーネルが必要であることを私は知っています。
私が使用するシステムは、最初にステージ1ローダーから起動し、次にu-bootを呼び出します。u-bootを破棄し、ステージ1ローダーから直接起動したい。どのタイプのカーネルイメージを使用する必要がありますか?
それらの違いは何ですか?
u-bootにはuImage形式のカーネルが必要であることを私は知っています。
私が使用するシステムは、最初にステージ1ローダーから起動し、次にu-bootを呼び出します。u-bootを破棄し、ステージ1ローダーから直接起動したい。どのタイプのカーネルイメージを使用する必要がありますか?
回答:
それらの違いは何ですか?
イメージ:一般的なLinuxカーネルのバイナリイメージファイル。
zImage:自己解凍型のLinuxカーネルイメージの圧縮バージョン。
uImage: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の有無にかかわらず)に応じて、カーネル用に準備する必要のあるレジスタとメモリバッファがあります。ある例では、U-Bootが実行したハードウェアの初期化もあり、複製する必要がありました。
補遺
u-bootにはuImage形式のカーネルが必要であることを私は知っています。
これは、bootmコマンドしかないU-Bootのすべてのバージョンで正確です。
ただし、最近のバージョンのU-Bootには、zImageを起動できるbootzコマンドが含まれている場合もあります。