2012-03-13 11 views
17

Sto utilizzando una ROM personalizzata Android sul mio dispositivo, anche con un boot.img personalizzato (kernel personalizzato + cmdline + ramdisk). Ora voglio essere in grado di visualizzare i log del kernel subito dopo un kernel panic, ma sfortunatamente non posso usare una console seriale.Android: come ottenere i log del kernel dopo il panico del kernel?

La buona notizia: sembra esserci qualche fonte/modulo nel kernel di Linux di Android che è stato scritto esattamente per questo scopo. Ad esempio, le seguenti righe sono attivati ​​nel mio file config per il kernel:

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

Il mio problema è il seguente: Dopo aver costretto un kernel panic, al fine di testare questo, cioè caricando un semplice modulo del kernel di panico con insmod panic.ko , sembra che non sia stato scritto alcun log sull'MTD denominato oem_log (che esiste sul mio dispositivo). In secondo luogo, anche la RAM non contiene i log dopo il riavvio perché sembra essere stata cancellata, oppure i log non sono stati scritti.

Quindi, come posso ottenere i registri del kernel dopo un panico? Inoltre sarebbe utile se ci fosse un modo per testare l'APANIC sul sistema in esecuzione. Forse usando il kernel debug system? A partire da ora sono abbastanza nuovo a questo.

Grazie in anticipo per qualsiasi aiuto!

risposta

23

Per quanto mi riguarda,

cat /proc/last_kmsg 

dopo il riavvio (causata dal kernel panic durante insmod) fa i messaggi della lista rilevanti per l'incidente, come

[ 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 

Così si può almeno provare. Sto lavorando con Linux 3.0.31-g4f6d371 su Galaxy Nexus.

+0

Sto contrassegnando questo come la risposta corretta - ma sembra funzionare solo se questa funzionalità è stata implementata correttamente per il particolare dispositivo. Il che, per me (al momento in cui ho fatto la domanda e per il mio particolare dispositivo) non era il caso. – mreichelt

+1

Questo file esiste se il dispositivo non è andato in panico –

+0

Non esiste, versione del kernel 3.0.8+. – ogurets

-4

È possibile accedere al registro del kernel di Linux con il comando dmesg. Puoi leggere su Android Logging System here.

+3

No, si puo' t. Quando si verifica un panico del kernel, tutti i programmi spaziali dell'utente vengono immediatamente arrestati, quindi non è possibile rilevare la causa del panico. È lo stesso per dmesg,/proc/kmsg e logcat. – mreichelt

1

Ho affrontato un problema di di raccolta dei registri di arresto in Android. Ho postato questa domanda molto tempo fa e ha 2 approcci. Io uso il 2 ° come il 1 ° non funziona per me. Ecco la domanda

Where does Android store shutdown logs?

Spero che questo aiuti.

+0

Sfortunatamente, tutti i file descritti sono disponibili solo se il modulo APANIC funziona correttamente - che è quello che sto cercando di ottenere ... – mreichelt

+0

@mreichelt Non mi è piaciuto connettersi a 'adb' e provare a tirare' kmsg'? –

+0

kmsg è il * registro * attuale. Voglio ottenere i log del kernel * dopo * un panico del kernel si è verificato, cioè quando il sistema si è bloccato e il dispositivo viene riavviato. Questo è ciò che APANIC è per. – mreichelt

8

Come circa la cartella /data/dontpanic? Dopo il panico del kernel, puoi connettere il cavo USB con il tuo dispositivo Android e controllare i file in quella cartella tramite ADB.

Ho trovato questa cartella contiene alcuni file apanic dopo che si verifica un panico del kernel. Ad esempio, se un kernel panic è appena accaduto e si va controllare la cartella, si potrebbe trovare questi due file:

apanic_console

apanic_threads

si può scoprire in apanic_threads quale thread/processo è in esecuzione quando il panico del kernel accade. In apanic_console potresti trovare ulteriori informazioni come la traccia dello stack e i valori di alcuni registri critici: PC, LR, ecc.
Ti aiuteranno a iniziare il debug.

+0

Ho questa cartella, ma non i file all'interno (dopo il panico). Eseguito "find/-name" * panic * "" e trovato qualcosa di interessante: "/ sys/module/kernel/parameters/panic" e "/ proc/sys/kernel/panic", entrambi contenenti "2" sul mio dispositivo. – ogurets

2

Android crea una console RAM e tenta di salvare l'ultimo buffer dei messaggi del kernel nella RAM (presupponendo che l'alimentazione non si spenga). È possibile accedere a questo file attraverso l'interfaccia proc e sul mio sistema che è il mondo leggibile:

cat /proc/last_kmsg 

Per ulteriori informazioni consultare il driver codice del kernel @/staging/android/ram_console.c

1

sembra a Android -7.0 o al di sopra, il registro last_kmesg viene spostato in:/sys/fs/PStore/console-ramoops, in modo da provare:

cat /sys/fs/pstore/console-ramoops 

funziona bene per me su Nexus-5x