アンドロイド:カーネルパニック後にカーネルログを取得するには?
-
13-12-2019 - |
質問
私は自分のデバイスでandroidカスタムROMを使用しており、カスタムブートも使用しています。img(カスタムカーネル+cmdline+ramdisk)。私は今、カーネルパニックの直後にカーネルログを表示できるようにしたいのですが、残念ながらシリアルコンソールを使用することはできません。
良いニュース:AndroidのLinuxカーネルには、この目的のために正確に書かれたいくつかのソース/モジュールがあるようです。たとえば、myでは次の行がアクティブになります。カーネルの設定ファイル:
CONFIG_ANDROID_RAM_CONSOLE=y
CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y
CONFIG_APANIC=y
CONFIG_APANIC_PLABEL="oem_log"
私の問題は:私はこれをテストするためにカーネルパニックを強制した後、すなわちで簡単なパニックカーネルモジュールをロードすることで、 insmod panic.ko
, 、という名前のMTDにログが書き込まれていないようです oem_log (これは私のデバイスに存在します)。第二に、RAMはクリアされているように見えるため、再起動後もログが含まれていないか、ログも書き込まれていません。
では、パニックの後にカーネルログを取得するにはどうすればよいですか?また、実行中のシステムでAPANICをテストできる方法があれば役に立ちます。たぶんカーネルデバッグシステムを使用していますか?今のところ私はこれにかなり新しいです。
任意の助けを事前に感謝!
解決
私は
cat /proc/last_kmsg
.
再起動後(inSmodの間にカーネルパニックによって引き起こされる)は、
のようにクラッシュに関連するメッセージメッセージをリストします。[ 424.909515] Kernel panic - not syncing: Fatal exception
[ 424.909606] Backtrace:
[ 424.909790] [<c005a5ec>] (dump_backtrace+0x0/0x10c) from [<c05f38dc>] (dump_stack+0x18/0x1c)
[ 424.909973] r6:c5cccf00 r5:00000000 r4:c08505a0 r3:00000000
.
だからあなたは少なくとも試すことができます。私は銀河系ネクサスのLinux 3.0.31-G4F6D371を使って働いています。
他のヒント
Android-7.0以上では、last_kmesgログが次のように移動されます。/ sys / fs / pstore / console-ramoopsのようにしてください。
cat /sys/fs/pstore/console-ramoops
.
Nexus-5X
で私にとってうまく機能しますどのように約 /data/dontpanic
フォルダ?カーネルパニックが発生した後、あなたのAndroidデバイスとUSBケーブルを接続し、そのフォルダ内のファイルを確認することができます ADB
.
私はこのフォルダにいくつかが含まれていることを発見 apanic
カーネルパニックが発生した後のファイル。たとえば、カーネルパニックが発生したばかりで、フォルダを確認すると、次の2つのファイルが見つかる可能性があります:
apanic_console
apanic_threads
あなたはで見つけることができます apanic_threads
カーネルパニックが発生したときに実行されているスレッド/プロセス。で apanic_console
スタックトレースやいくつかの重要なレジスタの値など、より多くの情報を見つけることができます: PC
, LR
, 、等。
彼らはあなたのデバッグを始めるのに役立ちます。
Android RAMコンソールを作成し、RAMの最後のカーネルメッセージバッファをRAMに保存しようとします(電源が出ないと仮定して)。このファイルには、PROCインタフェースを介して、システム上でWorld Symeable:
cat /proc/last_kmsg
.
詳細についてはカーネルコード@ドライバ/ステージング/ Android / RAM_Console.c
Androidのシャットダウンログを収集する類似問題に直面しました。私はこの質問を長く投稿しました、そしてそれは2つのアプローチを持っています。私は第1のものが私のためにうまくいかないように私は2番目のものを使います。これが質問
ですAndroidストアのシャットダウンログはどこにありますか?
これが役立つことを願っています。
Linuxカーネルログには、dmesg
コマンドでアクセスできます。Androidロギングシステムここで読むことができます