2012-03-13 34 views
17

自分のデバイスでAndroidカスタムROMを使用していますが、カスタムboot.img(カスタムカーネル+ cmdline + RAMディスク)も使用しています。私は今、カーネルパニックの直後にカーネルログを見ることができるようにしたいのですが、残念ながら私はシリアルコンソールを使用できません。Android:カーネルパニック後にカーネルログを取得するには?

良いニュース:この目的のために正確に書かれた、AndroidのLinuxカーネルにはいくつかのソース/モジュールがあるようです。たとえば、次の行をカーネルのための私の.configファイルで有効化されています

CONFIG_ANDROID_RAM_CONSOLE=y 
CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE=y 
CONFIG_APANIC=y 
CONFIG_APANIC_PLABEL="oem_log" 

私の問題がある:私はinsmod panic.koでシンプルなパニックカーネルモジュールをロードすることにより、すなわちこれを、テストするためにカーネルパニックを強制した後私のデバイスに存在するoem_logという名前のMTDにログが書き込まれていないようです。第2に、RAMはリブート後もクリアされているか、ログに書き込まれていないため、ログを含んでいません。

パニック後にカーネルログを取得するにはどうすればよいですか?また、実行中のシステムでAPANICをテストする方法がある場合は、役立つでしょう。おそらく、カーネルのデバッグシステムを使用して?今のところ、私はこれでかなり新しいです。

ありがとうございました!

答えて

23

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で作業しています。Galaxy Nexusの31-g4f6d371

+0

私はこれを正解としていますが、この機能が特定のデバイスに対して正しく実装されていればうまくいくようです。それは私のために(私が質問した時、私の特定の装置のために)、そうではなかった。 – mreichelt

+1

このファイルが存在するかどうかは、デバイスがパニックしていないかどうかです。 –

+0

カーネルバージョン3.0.8+が存在しません。 – ogurets

-4

Linuxカーネルログは、dmesgコマンドでアクセスできます。 Androidロギングシステムhereについて読むことができます。

+3

いいえ、あなたができます」 t。カーネルパニックが発生すると、すべてのユーザースペースプログラムが直ちに停止するので、パニックの原因を検出することはできません。これはdmesg、/ proc/kmsg、logcatでも同じです。 – mreichelt

1

私はに似ています。 Androidでシャットダウンログを収集しています。私はこの質問を長い間掲載しており、2つのアプローチがあります。私は第1のものが私のために働かないので第2のものを使用する。ここで

Where does Android store shutdown logs?

は、この情報がお役に立てば幸いです質問です。

+0

残念ながら、そこに記述されているすべてのファイルは、APANICモジュールが正しく動作する場合にのみ利用可能です。これは達成しようとしているものです... – mreichelt

+0

@mreichelt 'adb'に接続して' kmsg'を引っ張っても大丈夫ですか? –

+0

kmsgは*現在のログです。カーネルパニックが発生した後、つまりシステムがクラッシュしてデバイスが再起動された後にカーネルログを取得したいです。それがAPANICのためのものです。 – mreichelt

8

/data/dontpanicフォルダについてはどうですか?カーネルパニックが発生した後、あなたのAndroidデバイスとUSBケーブルを接続し、そのフォルダ内のファイルをADBで確認することができます。

カーネルパニックが発生した後、このフォルダにはapanic個のファイルが含まれています。あなたがスレッド/プロセスが時に実行されているapanic_threadsに見つけることができ

apanic_console

apanic_threads

:カーネルパニックが起こったとフォルダをチェックしに行く場合たとえば、あなたはこれらの2つのファイルを見つけるかもしれませんカーネルパニックが起こります。 apanic_consoleでは、スタックトレースやいくつかのクリティカルレジスタの値など、より多くの情報が得られます。PCLRなど
これらは、デバッグを開始するのに役立ちます。再起動後に私として

+0

私はこのフォルダを持っていますが、(パニック後の)ファイルはありません。 "/ sys/module/kernel/parameters/panic"と "/ proc/sys/kernel/panic"という2つのデバイスに "2"が含まれています。 – ogurets

2

AndroidはRAMコンソールを作成し、最後のカーネルメッセージバッファをRAMに保存しようとします(電源が切れていないものとします)。あなたはprocのインターフェイスを介してこのファイルにアクセスすることができますし、私のシステムでは、世界読み込み可能である:

cat /proc/last_kmsg 

詳細については、ドライバ/ステージング@カーネルコードを参照してください/アンドロイド/ ram_console.c

1

それは、Androidのようです-7.0以上、last_kmesgログがに移動されます。/ SYS/FS/pstoreに/コンソール - ramoopsので、試してみてください。

cat /sys/fs/pstore/console-ramoops 

それは上の私のためにうまく機能ネクサス-5X