Android-Startmeldungen zum Debuggen?

23

Ich versuche herauszufinden, ob Android (z. B. Galaxy Nexus, Nexus S und / oder Motorola Xoom) über eine Möglichkeit verfügt, ein "Boot-up" -Protokoll zu erstellen. (so ähnlich wie der Linux-Startbildschirm) Es wäre äußerst hilfreich, herauszufinden, wie weit das Telefon in den Startphasen vor einem Absturz kommt (z. B. Bootloader der ersten Phase, Haupt-Bootloader, dann Laden des Kernels usw.). Weiß jemand, wie man das Telefon in die Lage versetzt, diese Protokolldatei auszuspucken oder einen "ausführlichen" Startmodus zu aktivieren (und aktuelle Nachrichten an das Terminal des Linux-Computers zu drucken, mit dem das Telefon verbunden ist)?

Mein Telefon bleibt mit meinem aktuell geänderten Build in einer "Boot-Schleife" stecken und ich möchte es, wenn möglich, debuggen.

Alternativ kennt jemand nützliche Ressourcen oder Tutorials, die erklären, wie man das Telefon einfach "hackt", um dies zu tun (kein Durcheinander mit der Hardware)? Oder von irgendwelchen Foren, in denen meine Frage vielleicht gestellt wurde, aber in einer dunkeleren Form?

Dies war in letzter Zeit ein frustrierendes Problem, daher wäre jede Hilfe sehr dankbar!

9exceptionThrower9
quelle
Ich weiß, dass es sehr früh beginnt, auf den Logcat zu schreiben, aber das wird gelöscht, sobald es neu gestartet wird. es sollte mit dem Schreiben beginnen, sobald es die "Boot-Animation" zeigt (oder vielleicht sogar etwas früher).
Ryan Conrad
2
Wie würden Sie ohne "adb" auf logcat zugreifen? Adb funktioniert nur, wenn sich das telefon in einem stabilen zustand befindet, was dem ganzen widerspricht, von dem ich denke, dass es logcat gibt (wen kümmert es, wenn das telefon erfolgreich hochfährt, braucht es nicht viel für das tool).
9exceptionThrower9
adb ist einer der ersten Dienste, die gestartet werden. Wenn Sie die Boot-Animation sehen, wird adb bereits ausgeführt. adb ist sogar verfügbar, wenn Sie sich im Wiederherstellungsmodus befinden.
Ryan Conrad
Ich bin mir nicht sicher, ob ich die Boot-Animation sehe, von der Sie sprechen. Nach dem Symbol "Aufladen" des Akkus hängt das Telefon am Startbildschirm mit "Google" in Weiß, bevor es abstürzt. Danach kein "Android" -Spritzbildschirm oder eine Boot-Animation. Ich denke also, dass ADB noch nicht funktioniert ...
9exceptionThrower9

Antworten:

14

Es gibt verschiedene Möglichkeiten, dies zu tun:

  • cat /proc/last_kmsg > /sdcard/last_kernel_message_log.txt
  • dmesg > /sdcard/kernel_boot_log.txt
  • Stecken Sie das USB-Kabel bei ausgeschaltetem Smartphone ein. adb logcatGeben Sie dann den Befehl von Ihrem Windows-Cmd- oder Linux-Terminal aus ein, und warten Sie, bis das Gerät online ist. Schalten Sie nun das Smartphone ein. Der Logcat sollte dann mit dem Scrollen beginnen.

Da Sie Interesse daran bekundet haben, herauszufinden, wie weit das Telefon in den Startphasen vor einem Absturz gelangt , sollten diese Methoden Abhilfe schaffen. Die Sache ist, dass Sie ziemlich schnell sein müssen, um das Kernel-Protokoll zu erfassen (die ersten beiden oben gezeigten Methoden).

Was ich tun würde, ist, auf meiner Arch Linux-Box zwei Terminalfenster, eines für adb logcatdas andere, um das Protokoll zu erfassen, sobald Logcat anfängt abzurollen!

Bearbeiten:

Seien Sie sich bewusst, es gibt Unterschiede bei der Verwendung von adbund fastboot!

fastbootDas funktioniert anders, es wird nur zum Flashen von Images in bestimmten Partitionen verwendet und ist stärker mit dem Bootloader-Prozess verknüpft, dh es kann den Bootloader-Mechanismus verstehen. Es erfordert auch, dass:

  • unter Windows 'Administrator'-Berechtigung, um es auszuführen
  • unter Linux 'root' Privileg

Der Grund, warum dies erforderlich ist, besteht darin, dass bestimmte Ein- / Ausgaben der Hardware umgangen werden und daher nicht im adbProtokoll "gesprochen" wird , sondern dass direkt mit dem Bootloader "gesprochen" wird. Dies ist als normaler Benutzer nicht möglich. Hier ist die Hilfe für die Verwendung von fastboot.

$ sudo fastboot
usage: fastboot [ <option> ] <command>

commands:
  update <filename>                        reflash device from update.zip
  flashall                                 flash boot + recovery + system
  flash <partition> [ <filename> ]         write a file to a flash partition
  erase <partition>                        erase a flash partition
  getvar <variable>                        display a bootloader variable
  boot <kernel> [ <ramdisk> ]              download and boot kernel
  flash:raw boot <kernel> [ <ramdisk> ]    create bootimage and flash it
  devices                                  list all connected devices
  continue                                 continue with autoboot
  reboot                                   reboot device normally
  reboot-bootloader                        reboot device into bootloader
  help                                     show this help message

options:
  -w                                       erase userdata and cache
  -s <serial number>                       specify device serial number
  -p <product>                             specify product name
  -c <cmdline>                             override kernel commandline
  -i <vendor id>                           specify a custom USB vendor id
  -b <base_addr>                           specify a custom kernel base address
  -n <page size>                           specify the nand page size. default: 2048

Eine bekannte Verwendung von fastbootist das Flashen, um beispielsweise ein Wiederherstellungs-Image zu flashen: Eine sudo fastboot flash recovery recovery.imgandere ist das direkte Flashen eines Roh-Images sudo fastboot flash system system.img. Wenn Sie dies für den Fall der Kernel-Entwicklung verwenden fastboot boot new_kernel, wird vorübergehend ein neuer Kernel heruntergeladen und mit diesem gebootet, ohne den eigenen Boot des Bootloaders zu berühren.

Es gibt auch eine Beschränkung für die Größe eines Rohbilds, das geflasht werden muss. Wenn ich Rohbild sage, beziehe ich mich auf eine Datei mit einer .imgErweiterung, das Bild darf 128 MB nicht überschreiten. ( Ich habe dies bei der Entwicklung von ics4blade herausgefunden. Nach Abschluss des Builds hatte die Datei system.img eine Größe von 162 MB und ich habe versucht, sie zu flashen, aber der Schnellstart wurde abgelehnt es! )

Seien Sie vorsichtig und vergewissern Sie sich, dass die Partition korrekt ist. Überprüfen Sie sie noch einmal und wiederholen Sie sie. Gehen Sie vom Computer weg, machen Sie eine Pause, kehren Sie zurück und wiederholen Sie die Überprüfung erneut. blinken die falsche Datei in die falsche Partition ... gut zuckt mit den Schultern

t0mm13b
quelle
3
Dies ist eine großartige Idee, aber ein Problem ... adb funktioniert nur, wenn der adb-Daemon das Gerät erkennen kann. Wenn das Telefon nicht erfolgreich gestartet wurde, funktioniert adb nicht. Also eine "Boot-Schleife", wenn Sie logcat am meisten brauchen würden, würde nicht funktionieren, und es ist im Moment nicht so, wie ich es versuche. Das einzige, worauf Sie befehlsmäßig zugreifen können, ist "fastboot". Was ist dann eine Alternative in diesem Fall?
9exceptionThrower9
@ 9exceptionThrower9 haben meine Antwort bearbeitet, um das Konzept von Fastboot aufzunehmen und um in Ihrem Kommentar zu antworten, wird Fastboot nicht funktionieren :)
t0mm13b
Die einzige Alternative, die mir in den Sinn kommt, ist das schnelle Löschen der Partition cacheund data- ich bin für nichts Unangenehmes verantwortlich, wenn Sie fortfahren! Versuchen Sie erneut, das ROM über CWM zu flashen. Noch besser , vergessen Sie Fastboot und verwenden Sie CWM, um sowohl Cache als auch Daten zu löschen. Es hört sich so an, als ob der Bootloop auf einen kaputten Cache oder Daten zurückzuführen ist ...
t0mm13b
Was genau haben Sie getan, um den Bootloop zu starten? Das ist eine wichtige Frage und Sie möchten wissen, welche Schritte Sie unternommen haben.
t0mm13b
Ich habe den Android-Kernel (maguro) für Galaxy Nexus geändert, insbesondere die Datei "socket.h", um die INET-Registrierung mit dem Forschungsprojekt FINS meines Teams zu überschreiben (mit dem Internetprotokolle in den Benutzerbereich für Netzwerkforscher übertragen werden). Nachdem ich diese Datei geändert hatte (nur wenige Zeilen), kompilierte ich den Kernel erfolgreich neu, fügte diesen Kernel in den Android Maguro Build-Baum ein, erstellte das Android-System-Image neu und ließ die neuen Dateien "recovery", "boot", "system" und "userdata.img" flashen Telefon ...
9exceptionThrower9
0

Sie können LiveBoot verwenden. Es ist im Google Play Store. Es wird genau das tun, was Sie verlangen.

Narcotixs
quelle
Was ist, wenn ich einen Bootloop habe? Gibt es eine Möglichkeit, dies mit einem USB-Kabel zu tun?
Beppe9000