Mensagens de inicialização do Android para depuração?


23

Estou tentando descobrir se o Android (por exemplo, Galaxy Nexus, Nexus S e / ou Motorola Xoom) vem com algum tipo de capacidade para produzir um log de "inicialização". (como a tela de inicialização do Linux) Seria imensamente útil para descobrir até que ponto o telefone chega aos estágios de inicialização antes de travar (como o carregador de inicialização de primeiro estágio, o carregador de inicialização principal, o carregamento do kernel etc.). Alguém sabe como habilitar o telefone para cuspir esse arquivo de log ou ativar o modo de inicialização "detalhado" (e imprimir mensagens reais no terminal do computador Linux ao qual o telefone está conectado)?

Meu telefone fica preso em um "loop de inicialização" com minha versão modificada atual e eu gostaria de depurá-lo, se possível.

Como alternativa, alguém conhece algum recurso ou tutorial útil que explique como "hackear" o telefone com facilidade (sem mexer no hardware)? Ou de algum fórum em que minha pergunta possa ter sido feita, mas de uma forma mais obscura?

Este tem sido um problema frustrante recentemente, portanto qualquer ajuda seria muito apreciada!


Eu sei que ele começa a gravar no logcat muito cedo, mas isso é limpo quando ele é reiniciado. deve começar a escrever assim que mostrar a "animação de inicialização" (ou talvez até um pouco antes).
21912 Ryan Conrad

2
como você acessaria o logcat sem "adb"? O Adb só funciona quando o telefone está em um estado estável, o que contradiz todo o ponto que eu acho sobre o porquê do logcat (quem se importa se o telefone inicializar com sucesso, não há muita necessidade da ferramenta).
9exceptionThrower9

adb é um dos primeiros serviços iniciados. se você vir a animação de inicialização, o adb já está em execução. O adb está disponível mesmo quando você está no modo de recuperação.
22612 Ryan Conrad

Bem, não tenho certeza se estou vendo a animação de inicialização que você está falando. Após o símbolo de "carga" da bateria, o telefone fica na tela inicial com o "Google" em branco antes de travar. Nenhuma tela inicial "Android" depois disso ou qualquer animação de inicialização. Então eu não acho que ADB funciona ainda ...
9exceptionThrower9

Respostas:


14

Existem algumas maneiras de fazer isso:

  • cat /proc/last_kmsg > /sdcard/last_kernel_message_log.txt
  • dmesg > /sdcard/kernel_boot_log.txt
  • conecte o cabo usb com o smartphone desligado. Em seguida, emita o comando adb logcatno seu cmd do Windows ou no terminal Linux, ele ficará parado aguardando o dispositivo entrar on-line, agora ligue o telefone inteligente. O logcat deve começar a rolar então.

Como você manifestou interesse em descobrir até que ponto o telefone fica nos estágios de inicialização antes de ele cair , esses métodos devem ajudar. A questão é que você precisa ser muito rápido para pegar o log do kernel (os dois primeiros métodos mostrados acima).

O que eu faria é na minha caixa do Arch Linux duas janelas de terminal, uma para adb logcata outra, para pegar o log no minuto em que o logcat começa a rolar!

Editar:

Esteja ciente, há diferenças no uso de adbe fastboot!

fastbootfunciona de maneira diferente, é usado apenas para exibir imagens em partições especificadas e está mais ligado ao processo do carregador de inicialização, ou seja, ele pode entender o mecanismo do carregador de inicialização. Também requer que:

  • no Windows, privilégio de 'Administrador' para executá-lo
  • no Linux, privilégio 'root'

A razão pela qual isso requer é que ele ignora determinadas entradas / saídas do hardware e, portanto, não "fala" no adbprotocolo, mas sim "conversa" diretamente com o carregador de inicialização. Algo que não pode ser feito como um usuário normal. Aqui está a ajuda para o uso de 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

Um uso bem conhecido de fastbooté para piscar, por exemplo, para piscar uma imagem de recuperação:, sudo fastboot flash recovery recovery.imgoutro é piscar diretamente uma imagem bruta sudo fastboot flash system system.img,. Para mais informações sobre o caso do desenvolvimento do kernel, usando isso fastboot boot new_kernel, ele baixa temporariamente um novo kernel e inicializa usando sem tocar na própria inicialização do carregador de inicialização.

Também há uma limitação no tamanho de uma imagem não processada que precisa ser exibida, quando digo imagem não processada, estou me referindo a um arquivo que possui uma .imgextensão, a imagem não deve exceder 128Mb. ( Descobri isso ao desenvolver o ics4blade, após a conclusão da compilação, o system.img tinha 162Mb e tentei fazer o flash, mas a inicialização rápida se recusou! Para contornar a limitação, foi necessário criar um arquivo zip CWM flexível para fazer isso e contornar isso! )

Tome cuidado e verifique se a partição está correta e verifique novamente e verifique novamente, se necessário, afaste-se do computador, faça uma pausa, volte novamente e verifique novamente, é aqui que pode ocorrer algo terrivelmente errado, piscar o arquivo errado na partição errada ... bem encolhe os ombros


3
Essa é uma ótima idéia, mas um problema .... adb só funciona se o daemon adb puder detectar o dispositivo. Se o telefone não inicializar com êxito, o adb não funcionará. Portanto, um "loop de inicialização", quando você mais precisaria do logcat, não funcionaria, e não está no momento em que eu tento. A única coisa que você tem acesso por comando que não se importa se o telefone foi inicializado com êxito é "fastboot". O que é uma alternativa nesse caso, então?
usar o seguinte código

@ 9exceptionThrower9 ter editado a minha resposta para incluir o conceito de fastboot e resposta em seu comentário, fastboot não vai funcionar :)
t0mm13b

A única alternativa em que consigo pensar é, para inicializar rapidamente a partição cachee data- eu não sou responsável por nada indesejável se você prosseguir! E tente atualizar a ROM novamente através do CWM. Ainda melhor , esquecer fastboot e usar CWM para limpar tanto o cache e os dados , parece que o bootloop é devido a um cache ou dados borked ...
t0mm13b

Por uma questão de interesse, o que exatamente você fez para iniciar o bootloop - essa é uma pergunta crucial e gostaria de saber quais etapas você tomou?
t0mm13b

Modifiquei o kernel do Android (maguro) para o Galaxy Nexus, principalmente o arquivo "socket.h" para substituir o registro do INET pelo projeto de pesquisa da minha equipe FINS (que puxa os protocolos da Internet para o espaço do usuário dos pesquisadores de rede). Após modificar este arquivo (apenas algumas linhas), recompilei o kernel com êxito, inseri-o na árvore de compilação maguro do Android, reconstruí a imagem do sistema Android e atualizei os novos arquivos de recuperação, inicialização, sistema e userdata.img no diretório telefone ...
9exceptionThrower9

0

Você pode usar o LiveBoot. Está na Google Play Store. Ele fará exatamente o que você está perguntando.


E se eu tiver bootloop? Existe uma maneira de fazer isso com um cabo USB?
beppe9000 30/06
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.