私の組み込みデバイスでセキュアブートを正常に有効にしました。問題は、このモードで起動すると、次の行以降にプロセスが中断されるようです。
Starting kernel ...
U-bootがカーネルをメモリにコピーし、bootm
コマンドを実行すると。
デバッガでは、PCがyield
コマンドに停止し、割り当てにかかることをキャッチできました。pc = pc-4
つまり、本質的にループです。
私は以前はそれほど低レベルのLinuxにさらされたことがなかったので、どこから見るべきかわかりません。ただし、セーフモードでない場合でもカーネルイメージを正常に起動できることがわかりました。
1) 通常、スイッチングステップを実行するU-bootの診断情報はどこにありますか?
2)実行はいつカーネルに完全に渡されますか?つまり、U-bootはいつ期限切れになりますか?
答え1
おそらく、次の手順を使用してLinux初期印刷のメモリをダンプできます。その理由は、カーネルが起動中ですが、コンソールが初期化される前に停止するためです。また、ubootのカーネルエントリポイントにコンテンツを印刷し、制御がカーネルに送信されたことを確認します。
ファイルを見つけますSystem.map
。log_buf
アドレスを識別するには、次のコマンドを使用します。
grep __log_buf System.map
これは次のように出力されます
c0352d88 B __log_buf
ボードをウォームブートします(RAMの内容は削除しないでください)。
Ubootのメモリダンプ(c0352d88)__log_buf
。カーネルコンソールの印刷をダンプします。これにより、停止が発生した場所を正確に確認できます。
答え2
私はかつて同じ問題に直面し、解決策を見つけました。問題は、u-boot structure field
保存されたものの1つが圧縮されていないサイズでフィールドを埋めるのではなく、後でそのサイズを使用してsize
サイズuncompressed linux kernel.
を変更するため、システムが未定義のままになることです。u-boot
linux kernel
stack
u-boot
このメッセージが印刷されると、u-bootがaを呼び出してカーネルに実行を引き継ぎ、おそらくこのフィールドを見つけた後にStarting kernel...
次のメッセージを表示する必要があります。基本ベースのシステムを使用している場合、解凍は次のファイルディレクトリにあります。Uncompressing Linux... done, booting the kernel
SMM Handler
kernel
x86
arch/x86/boot/uncompressed/head_32.S
arch/x86/boot/uncompressed/piggy.S
解決策は、ここで最新のu-bootを使用することです。https://github.com/andy-shev/u-boot
ただし、カスタムu-bootを使用している場合は、このフィールドを見つける必要があります。
答え3
x86?を使用earlycon=efifb
または開始してくださいearlyprintk=vga
。コミット69c1f396f25b805aeff08f06d2e992c315ee5b1e中にearlyprintkからearlyconに変更があったので、両方を言及しました。