Kernel crash przy szyfrowaniu smartfona lub próbie resetu ustawień do fabrycznych

Spis treści

Parę dni temu dowiedziałem się o projekcie /e/. Z racji, że ten ROM jest dostępny na mój smartfon LG G4C (jeszcze nieoficjalnie), to postanowiłem go sobie wgrać i zobaczyć jak się będzie sprawował. Podczas testów nowego oprogramowania spróbowałem zaszyfrować partycję /data/ . Problem w tym, że po automatycznym zresetowaniu się systemu, urządzenie już nie chciało się uruchomić. Przez dłuższy czas widniało logo LG, a po chwili pojawił się czarny ekran z informacją "Kernel Crash" lub niebieski ekran z informacją "Subsystem Crash". Czy telefon w takiej sytuacji nadaje się jedynie do wyrzucenia?

Kernel Crash, Subsystem Crash i TWRP recovery

Kernel Crash w przypadku tego smartfona LG G4C przytrafił mi się w zasadzie już drugi raz. Pierwszym razem przy próbie zresetowania urządzenia do ustawień fabrycznych (factory reset) z poziomu działającego systemu (LineageOS). Tym razem, Kernel Crash pojawił się przy próbie zaszyfrowania smartfona. To co łączy te dwa przypadki, to tryb recovery. Na partycji /recovery/ mam wgrany obraz TWRP i to on jest prawdopodobnie winny, że telefon łapie crash przy przeprowadzaniu tego tupu operacji. Pewności nie mam ale po przywróceniu stock'owego trybu recovery (wgrywając go via dd przez TWRP recovery), Kernel Crash już nie występuje, a telefon jest w stanie się już uruchomić.

Poniżej znajdują się fotki z objawami problemu:

lg-g4c-logo-stuck

lg-g4c-kernel-crash

lg-g4c-subsystem-crash

To czy dostaniemy komunikat z Kernel Crash czy Subsystem Crash zależy od tego czy będziemy się starać przeczyścić telefon z poziomu TWRP recovery. Jeśli tak, to dostaniemy Subsystem Crash, w przeciwnym wypadku Kernel Crash. W obu jednak przypadkach telefon nie będzie nam chciał wystartować.

Stock'owy obraz partycji /recovery/

Te powyższe błędy można poprawić wgrywając stock'owy obraz na partycję /recovery/ , oczywiście jeśli nim dysponujemy, a z tym bywa różnie. Trzeba też pamiętać, że w tego typu sytuacjach, gdy nam nie startuje system, przywracanie oryginalnego trybu recovery nie zawsze jest najlepszym pomysłem. Co w przypadku, gdy po przywróceniu stock'owego trybu recovery system nam nie będzie chciał z jakiegoś innego powodu wystartować?

Podczas bawienia się ROM'em /e/ , deweloper co ten ROM zbudował na mój model smartfona zapomniał w nim wrzucić aplikacji launcher'a. Bez tej aplikacji nie można wejść w opcje systemu, a bez tego nie da rady włączyć debugowania via ADB. Bez ADB nie da rady ponownie wgrać TWRP na partycję /recovery/ i robi się problem. Jeśli jednak jesteśmy pewni, że nasz system działał przed Kernel Crash i mogliśmy na nim uzyskać prawa root, to wgranie stock'owego trybu recovery, by poprawić zaistniałą sytuację, może być w miarę dobrym rozwiązaniem. Wciąż jednak trzeba się mieć na baczności, by czasem przez przypadek nie pomylić partycji i by nie wgrać się na tę, na którą nie powinniśmy.

Partycja /misc/

Szukając informacji na temat tego jak wybrnąć z tej dość patowej sytuacji (przynajmniej w moim przypadku), natrafiłem na to poniższe polecenie:

# dd if=/dev/zero of=/dev/block/bootdevice/by-name/misc count=1 bs=32

Poszukałem zatem informacji na temat tego polecenia. Znalazłem taki oto artykuł. Możemy w nim wyczytać, że:

If the standard AOSP recovery image is being used, during boot the bootloader should read the first 32 bytes on the misc partition and boot into the recovery image if the data there matches: "boot-recovery" This allows any pending recovery work (e.g. applying an OTA, performing data removal, etc.) to resume until being finished successfully.

Czyli, na tych pierwszych 32 bajtach jest zapisywana informacja i system podczas startu wie czy jakieś zaplanowane zadania zostały do przeprowadzenia w trybie recovery. Mając custom recovery (np. TWRP), coś najwyraźniej poszło nie tak. Niemniej jednak, wyczyszczenie tych paru bajtów wydaje się sensowne.

Na forum XDA jest cała masa wątków, w których ludziom udało się odblokować telefon wpisując to polecenie przez ADB via TWRP recovery. U mnie ono nie przyniosło większych efektów. Próbowałem również wydać to polecenie w kombinacji z czyszczeniem cache i dalvik ale i to nie poprawiło problemu. Próbowałem też wyczyścić wszystkie partycje dostępne w menu TWRP za wyjątkiem partycji /system/ ale to też nic nie dało.

Jak poprawić Kernel Crash/Subsystem Crash w LG G4C

To co poprawiło ten cały Kernel Crash/Subsystem Crash w przypadku mojego LG G4C, to uruchomienie telefonu w trybie TWRP recovery, sformatowanie partycji /data/ nowym systemem plików (Wipe -> Format Data) i restart urządzenia. Kluczowe jest tutaj wybranie opcji formatowania partycji, a nie tak jak zwykle się korzysta z "Advanced Wipe" czy też zwyczajnie przeciąga suwak "Swipe to Factory Reset".

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.