Διαβάζουμε τα logs του Kernel του Android για διόρθωση σφαλμάτων

Android dmesg kmsg

Σε πρώτη φάση για troubleshooting μίας Android συσκευής (π.χ. κρασάριμα εφαρμογών) διαβάζουμε το logcat της όπως έχουμε δει, και διορθώνουμε το πρόβλημα.

Υπάρχουν όμως πολύ πιο "δύσκολες" περιπτώσεις προβλημάτων (π.χ. "τυχαίες" επανεκκινήσεις, προβλήματα ρυθμού φόρτισης) στα οποία χρειαζόμαστε το log του πυρήνα του Linux που έχει το Android.

Διαβάζουμε το dmesg

Σε αντίθεση με το logcat, για να διαβάσουμε τα "μηνύματα" του Kernel απαιτείται να έχουμε κάνει root την συσκευή μας.

Στην συνέχεια ανοίγουμε ένα shell είτε από εφαρμογή όπως το Terminal Emulator είτε χρησιμοποιώντας το adb shell όπως έκανα εγώ παρακάτω.

adb shell

su

dmesg

Android dmesg

Το dmesg θα εμφανίζει στην οθόνη μας το log:

Android dmesg

 

Διαβάζουμε το kmsg

Αντίστοιχα, σε περιπτώσεις που θέλουμε να εμφανίζεται συνεχώς στην οθόνη μας το τι γίνεται στην συσκευή (χωρίς να έχουμε return) μπορούμε να διαβάσουμε το kmsg. Όταν θέλουμε σταματάμε το output με ctrl+c.

cat /proc/kmsg

Android kmsg

Σε περίπτωση που θέλουμε να γράφεται συνεχώς το log σε αρχείο κειμένου στην κάρτα μνήμης μπορούμε να δώσουμε:

cat /proc/kmsg > /sdcard/logkmsg.txt &

Android kmsg

 

Διαβάζουμε το last_kmsg

Τέλος, σε περιπτώσεις που έχουμε "τυχαία" reboots, μπορούμε να διαβάσουμε το /proc/last_kmsg στο οποίο γράφεται το "τελευταίο" log πριν το reboot.

cat /proc/last_kmsg

Android last_kmsg

Στην περίπτωσή μας, βλέπουμε ότι το "τελευταίο" κλείσιμο έγινε σωστά από δική μας προτροπή και όχι από κάποιο error.

Android last_kmsg

 

Πώς φιλτράρω τα σημαντικά μηνύματα του kernel log από τα δευτερεύοντα

Μπορούμε να επιλέξουμε το επίπεδο φιλτραρίσματος των μηνυμάτων του kernel γράφοντας στο printk. Οι αριθμοί που εμφανίζονται διαβάζοντας το αρχείο, αντιστοιχούν στο επιλεγμένο επίπεδο, στο default, στο ελάχιστο δυνατό και στο επίπεδο κατά το boot.

cat /proc/sys/kernel/printk

Γράφοντας στο συγκεκριμένο αρχείο μπορούμε να αλλάξουμε τα επίπεδα αυτά.

echo "4 1 1 7" >/proc/sys/kernel/printk

Android printk log

aByte