私は、デバイスでAndroid Custom ROMを使用しています。カスタムboot.img(カスタムカーネル+ cmdline + ramdisk)も使用しています。カーネルパニックの直後にカーネルログを表示できますが、残念ながらシリアルコンソールを使用できません。
良いニュース:Linuxカーネルには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
、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
少なくとも試してみてください。 Galaxy Nexusで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
フォルダ?カーネルパニックが発生した後、USBケーブルをAndroidデバイスに接続し、ADB
を介してそのフォルダー内のファイルを確認できます。
カーネルパニックが発生した後、このフォルダーにはいくつかのapanic
ファイルが含まれています。たとえば、カーネルパニックが発生したばかりで、フォルダを確認すると、次の2つのファイルが見つかる場合があります。
apanic_console
apanic_threads
apanic_threads
カーネルパニックが発生したときに実行しているスレッド/プロセス。 apanic_console
スタックトレースやいくつかの重要なレジスタの値などの詳細情報を見つけることができます:PC
、LR
など。
これらは、デバッグを開始するのに役立ちます。
AndroidはRAMコンソールを作成し、最後のカーネルメッセージバッファーをRAMに保存しようとします(電源が切れない場合)。アクセスできます。このファイルはprocインターフェースを介しており、私のシステムでは誰でも読み取り可能です。
cat /proc/last_kmsg
詳細については、カーネルコード@ drivers/staging/Android/ram_console.cを参照してください。
Androidでシャットダウンログを収集するsimilar問題に直面しました。私はずっと前にこの質問を投稿しましたが、2つのアプローチがあります。私は2番目のものを使用しますが、1番目のものは私にとってはうまくいきません。ここに質問があります
お役に立てれば。