私はUbuntu Wily HWEカーネルでLinux 4.2.0、Ubuntu 14.04を使用しています(これは私が実行しているものです)。
持つ不快なミスMacBook 11,4および11,5モデルでは、ラップトップは実際にはシャットダウンされず、Power down
カーネルメッセージに到達してからシャットダウンせずにフリーズするようです。このエラーにより、一時停止と再開ができなくなる可能性があります。興味深いことにreboot
、呼び出すときは表示されず、マシンを停止しようとしたときにのみ表示されます。
詳細はあまり関係ありませんが、何ですか?はい重要なのはデバッグ方法です。strace
カーネルのシャットダウン中にカーネルをデバッグし、何とか出力を観察する方法はありますか?電源遮断ロジックが原因でシステムコールが永久に中断され、奇妙な理由で返されないことが保証されます。どのシステムコールが機能していないかを把握できれば、引き続き把握できます。なぜ動作しません。シャットダウン障害を引き起こすハードウェアは正確に何ですか?
カーネル終了デバッグのための標準的な慣行はありますか?特別なハードウェアが必要ですか?カーネルのパッチを作成できますが、機能しないシステムコールが見つからない場合は、この問題をどこから見つけるべきかさえわかりません。
答え1
実行すべき作業の概要は次のとおりです。
- ソースコードをダウンロードし、カーネルをコンパイルしてデバッグを有効にします(設定 - >カーネルハッキング)。
- kgdbパッチのインストール
- 別のコンピュータのシリアルポートを介してターゲットに接続します。ターゲットは他のマシンでも、qemuやbochsなどのエミュレータでもかまいません。
- ソースコードで終了ルーチンを識別します。
- gdbでブレークポイントを設定し、ブレークが表示されるまで段階的に進みます。
kgdb を使用してカーネルのデバッグを検索すると、これらの手順の詳細情報を見つけることができます。
これガイドデバッグ環境を設定するのに役立ちます。
答え2
カーネルログを確認してください。
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 をモジュールにコンパイル
答え3
私の考えでは、中断は、電源状態の変更呼び出しまたは同様のデバイスドライバから返されないことです。したがって、printkを自由に使用しない限り、有用なデバッグメッセージはありません。
高速で汚れたハッキングを使用してこれを確認するには、Wi-Fi、ネットワーキングなどのカーネルブートコマンドラインで必須ではないすべてのドライバ(grub.cfgにあります)をブラックリストに追加してからパスします。電源サイクルテストが実行されます。ドライバコードが誤動作するドライバを識別します。