2012-03-13 20 views
17

Używam niestandardowej pamięci ROM Androida na moim urządzeniu, również z niestandardowym boot.img (niestandardowe jądro + cmdline + ramdysk). Teraz chcę móc przeglądać logi jądra natychmiast po panice jądra, ale niestety nie mogę użyć konsoli szeregowej.Android: Jak zdobyć dzienniki jądra po awarii jądra?

Dobra wiadomość: Wydaje się, że niektóre źródła/moduły w jądrze systemu Linux Androida zostały napisane dokładnie w tym celu. Na przykład, następujące linie są uaktywniane w moim pliku .config dla jądra:

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

Mój problem jest: Po zmuszony panikę jądra w celu zbadania tego, tj ładując prosty moduł jądra panika z insmod panic.ko , wydaje się, że nie zapisano żadnego logu do MTD o nazwie oem_log (który istnieje na moim urządzeniu). Po drugie, pamięć RAM również nie zawiera dzienników po ponownym uruchomieniu, ponieważ wydaje się być wyczyszczona - lub dzienniki nie są zapisywane.

Jak mogę uzyskać dzienniki jądra po panice? Byłoby również pomocne, jeśli istnieje sposób, w jaki mógłbym przetestować APANIC na uruchomionym systemie. Może za pomocą systemu debugowania jądra? W tej chwili jestem całkiem nowy.

Z góry dziękuję za pomoc!

Odpowiedz

23

Jak dla mnie,

cat /proc/last_kmsg 

po restarcie (spowodowane przez kernel panic podczas insmod) Czy lista wiadomości odnoszące się do katastrofy, jak

[ 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 

Tak można przynajmniej spróbować. Pracuję z Linux 3.0.31-g4f6d371 na Galaxy Nexus.

+0

Zaznaczam to jako poprawną odpowiedź - ale wydaje się, że działa tylko wtedy, gdy ta funkcja została poprawnie zaimplementowana dla danego urządzenia. Które dla mnie (w czasie gdy zadawałem pytanie i dla mojego konkretnego urządzenia) nie było w tym przypadku. – mreichelt

+1

Czy ten plik istnieje, urządzenie nie wpadło w panikę? –

+0

Nie istnieje, wersja jądra 3.0.8+. – ogurets

-4

Dostęp do dziennika jądra systemu Linux można uzyskać za pomocą polecenia dmesg. Możesz przeczytać o systemie rejestrowania Androida here.

+3

Nie można” t. Kiedy pojawia się panika jądra wszystkie programy kosmiczne użytkownika są natychmiast zatrzymywane, więc nie można wykryć przyczyny paniki. To samo dotyczy dmesg,/proc/kmsg i logcat. – mreichelt

1

Wystąpiłem w związku z problemem podobnym zbierania dzienników zamknięcia systemu Android. Zadałem to pytanie od dawna i mam 2 podejścia. Używam drugiego, ponieważ pierwszy nie działa dla mnie. Oto jest pytanie

Where does Android store shutdown logs?

Nadzieja to pomaga.

+0

Niestety, wszystkie opisane tam pliki są dostępne tylko wtedy, gdy moduł APANIC działa poprawnie - właśnie to próbuję osiągnąć ... – mreichelt

+0

@mreichelt Nie ma szczęścia w łączeniu się z 'adb' i próbie pobrania' kmsg'? –

+0

kmsg to dziennik * bieżący *. Chcę uzyskać dzienniki jądra * po * wystąpieniu paniki jądra, tj. Gdy system się zawiesił i urządzenie zostało zrestartowane. Właśnie do tego służy APANIC. – mreichelt

8

Co z folderem /data/dontpanic? Po wystąpieniu paniki jądra można podłączyć kabel USB do urządzenia z systemem Android i sprawdzić pliki w tym folderze za pomocą ADB.

Znalazłem ten folder zawierający niektóre pliki apanic po wystąpieniu paniki jądra. Na przykład, jeśli kernel panic właśnie stało i idziesz sprawdzić folder, można znaleźć te dwa pliki:

apanic_console

apanic_threads

można dowiedzieć się w apanic_threads który wątek/proces jest uruchomiony, gdy pojawia się panika jądra. W numerze apanic_console możesz znaleźć więcej informacji, takich jak ślad stosu i wartości niektórych krytycznych rejestrów: PC, LR, itp.
Pomogą Ci rozpocząć debugowanie.

+0

Mam ten folder, ale żadnych plików wewnątrz (po panice). Wywołał "find/-name" * panika * "i znalazł coś interesującego:"/sys/module/kernel/parameters/panic "i"/proc/sys/kernel/panic ", obie zawierały" 2 "na moim urządzeniu. – ogurets

2

Android tworzy konsolę RAM i próbuje zapisać ostatni bufor wiadomości jądra w pamięci RAM (zakładając, że zasilanie nie zgaśnie). Możesz uzyskać dostęp do tego pliku przez interfejs proc, a na moim systemie jest świat czytelny:

cat /proc/last_kmsg 

Aby uzyskać więcej informacji, zobacz kod jądra @ drivers/staging/Android/ram_console.c

1

wydaje na Androida -7,0 lub powyżej, last_kmesg dziennika zostanie przeniesiona do:/sys/fs/PStore/console-ramoops, więc spróbuj:

cat /sys/fs/pstore/console-ramoops 

to działa dobrze dla mnie na nexus-5x