web-dev-qa-db-ja.com

カーネルのデバッグがシャットダウンしましたか?

私はLinux4.2.0、Ubuntu14.04用のUbuntuWily HWEカーネル(私が実行しているもの)を使用しています。

厄介なバグ MacBook 11,4および11,5モデルでは、ラップトップが実際にシャットダウンすることはなく、Power downカーネルメッセージに到達した後、ハングすることはありません。シャットオフ。このバグにより、一時停止と再開も妨げられている可能性があります。興味深いことに、rebootが呼び出されても表示されず、マシンを停止しようとした場合にのみ表示されます。

詳細はそれほど関連性がありませんが、関連しているのは、これをデバッグする方法です。カーネルのシャットダウン中にカーネルをstraceまたはデバッグして、出力を何らかの方法で観察する方法はありますか?電源オフロジックが、永久にハングし、何らかの奇妙な理由で戻ってこないシステムコールを作成していることはかなり確信しています。どのシステムコールが機能していないかを把握できれば、続けてなぜが機能していないのか、具体的にはハードウェアについてはどうなるのかを把握できます。シャットダウンが失敗する原因になっています。

カーネルのシャットダウンをデバッグするための標準的な方法はありますか?特別なハードウェアが必要ですか?カーネルのパッチを作成するのは問題ありませんが、機能していないシステムコールが見つからない限り、この問題をどこから探し始めるかさえわかりません。

4
Naftuli Kay

あなたがする必要があるかもしれないことの大まかな概要:

  1. ソースをダウンロードし、カーネルをコンパイルしてデバッグを有効にします(config-> kernel hacking)
  2. Kgdbパッチをインストールします
  3. 別のマシンからシリアルポートを介してターゲットに接続します。ターゲットは別のマシンである場合もあれば、qemuやbochsのようなエミュレーターである場合もあります。
  4. ソースコードから、シャットダウンのルーチンを特定します
  5. Gdbからブレークポイントを設定し、ハングが表示されるまでステップスルーします。

Kgdbを使用してカーネルデバッグを検索すると、これらの手順の詳細を確認できます。

この ガイド は、デバッグ環境のセットアップに役立ちます。

5
jai_s

カーネルログを確認します。

nano /var/log/kern.log

シャットダウンが適切に行われた場合、関連するすべての情報が含まれ、必要なデバッグ情報が提供されます。

Dmesgも確認できます

nano /var/log/dmesg

以前の起動/シャットダウンからのこれらのバックアップも表示され、次のように追加されます

dmesg.0 kern.log.1

そして、そこにはさらに遡るアーカイブもあります。

カーネルにオプションを追加することで、これらをより冗長にすることができます。

  • CONFIG_PRINTK_TIME-タイムスタンプをdmesgに追加します

  • CONFIG_DEBUG_KERNEL-カーネルのデバッグをオンにします

  • CONFIG_DETECT_HUNG_TASK-原因を特定するのに適しています
    カーネルのフリーズ

  • CONFIG_DEBUG_INFO-カーネルをデコードできるようにします

  • CONFIG_EARLY_PRINTK

  • CONFIG_LOG_BUF_SHIFT = 21-カーネルバッファのログサイズを
    最大のバッファー

  • CONFIG_NETCONSOLE = m-netconsoleをモジュールとしてコンパイルします

2
Jeff Coleman

ハングは、電源状態変更の呼び出しなどから戻ってこないデバイスドライバーであると推測します。したがって、printkに精通していない限り、有用なデバッグメッセージはありません。

迅速で汚いハックを使用してこれを確認するには、カーネルブートアップコマンドライン(grub.cfgに存在する)のすべての不要なドライバーをブラックリストに登録します(wi-fi、ネットワークなど)。不正なドライバコード。

1
einonm