web-dev-qa-db-ja.com

initramfs(ARM)なしでカーネルを起動するとkexecがクラッシュする

まず、セットアップに関するいくつかの詳細:

  • Linux-3.14.1
  • ARMam335xチップ
  • U-Bootブートローダー

私が達成しようとしていること:

  1. U-Bootは、initramfsを含むカーネルをロードします(このカーネルを1と呼びます)。
  2. U-Bootはこのカーネルを実行します。
  3. カーネル1は、組み込みのinitramfsを含まないカーネル2をロードします。 NFSルートを使用します。
  4. カーネル1はカーネル2を実行します。

問題:

カーネル1はカーネル2の実行に失敗します。これは私が見る最後のものです:

[    8.819174] Starting new kernel [    8.822539] Bye!

キーポイント:

  • カーネル1とカーネル2はどちらも、initramfs関連の設定を除いて同じ構成になっています。どちらもkexecが有効になっています。
  • カーネル1は別のカーネル1をkexecでき、これは正常にブートループできます。
  • カーネル2は、U-Bootから直接正常に起動できます。
  • カーネル1と2は同じデバイスツリーを使用します。

考えられる問題:

  • NFSルートのカーネルコマンドラインオプションが間違っている可能性があります。ただし、これらはほとんどU-Bootで動作するものからコピーされました。
  • ルートファイルシステムに問題があった場合、コンソールに少なくとも何かが表示されると思います。

さらなる考え:

  • 多分それはカーネルサイズの大きな違い(k1 = 4523344、k2 = 2859240)と関係があります。

どんな助けでも大歓迎です。

3
Phil Williams

問題は、kexecがzlibなしでコンパイルされたため、uImageカーネルを処理できないことでした。生の「イメージ」カーネル2は正常に起動しました。

2
Phil Williams