Διαβάζουμε τα logs του Kernel του Android για διόρθωση σφαλμάτων
- Τρίτη, 02 Σεπτεμβρίου 2014 11:17
Σε πρώτη φάση για troubleshooting μίας Android συσκευής (π.χ. κρασάριμα εφαρμογών) διαβάζουμε το logcat της όπως έχουμε δει, και διορθώνουμε το πρόβλημα.
Υπάρχουν όμως πολύ πιο "δύσκολες" περιπτώσεις προβλημάτων (π.χ. "τυχαίες" επανεκκινήσεις, προβλήματα ρυθμού φόρτισης) στα οποία χρειαζόμαστε το log του πυρήνα του Linux που έχει το Android.
Διαβάζουμε το dmesg
Σε αντίθεση με το logcat, για να διαβάσουμε τα "μηνύματα" του Kernel απαιτείται να έχουμε κάνει root την συσκευή μας.
Στην συνέχεια ανοίγουμε ένα shell είτε από εφαρμογή όπως το Terminal Emulator είτε χρησιμοποιώντας το adb shell όπως έκανα εγώ παρακάτω.
adb shell
su
dmesg
Το dmesg θα εμφανίζει στην οθόνη μας το log:
Διαβάζουμε το kmsg
Αντίστοιχα, σε περιπτώσεις που θέλουμε να εμφανίζεται συνεχώς στην οθόνη μας το τι γίνεται στην συσκευή (χωρίς να έχουμε return) μπορούμε να διαβάσουμε το kmsg. Όταν θέλουμε σταματάμε το output με ctrl+c.
cat /proc/kmsg
Σε περίπτωση που θέλουμε να γράφεται συνεχώς το log σε αρχείο κειμένου στην κάρτα μνήμης μπορούμε να δώσουμε:
cat /proc/kmsg > /sdcard/logkmsg.txt &
Διαβάζουμε το last_kmsg
Τέλος, σε περιπτώσεις που έχουμε "τυχαία" reboots, μπορούμε να διαβάσουμε το /proc/last_kmsg στο οποίο γράφεται το "τελευταίο" log πριν το reboot.
cat /proc/last_kmsg
Στην περίπτωσή μας, βλέπουμε ότι το "τελευταίο" κλείσιμο έγινε σωστά από δική μας προτροπή και όχι από κάποιο error.
Πώς φιλτράρω τα σημαντικά μηνύματα του kernel log από τα δευτερεύοντα
Μπορούμε να επιλέξουμε το επίπεδο φιλτραρίσματος των μηνυμάτων του kernel γράφοντας στο printk. Οι αριθμοί που εμφανίζονται διαβάζοντας το αρχείο, αντιστοιχούν στο επιλεγμένο επίπεδο, στο default, στο ελάχιστο δυνατό και στο επίπεδο κατά το boot.
cat /proc/sys/kernel/printk
Γράφοντας στο συγκεκριμένο αρχείο μπορούμε να αλλάξουμε τα επίπεδα αυτά.
echo "4 1 1 7" >/proc/sys/kernel/printk