NAND dump & JTAG no ARM11

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

NAND dump & JTAG no ARM11

Mensagem por TripleOxygen em Qui 05 Maio 2011, 01:22

Depois de um tempo sem postar novidades, divulgo os 2 últimos progressos no projeto!

  • 1. Dump da NAND

Uma das coisas importantes que deveríamos ter para avançar nos estudos era uma cópia exata da NAND do console. Como sabemos, o Zeebo tem uma NAND de 1 Gbit (128 MB), onde é armazenado os bootloaders, os arquivos de sistema (ReX + BREW) e a Z-Wheel (e eventualmente alguns jogos "malignos"). Na verdade, já tinhamos boa parte destes dados, mas todos vieram de dumps da RAM com o sistema hot, ou seja, em execução. De qualquer forma, já foi suficiente para estudarmos bastante (o patch de homebrew foi viabilizado por ele). Porém, não é o adequado para analisarmos o código com precisão, pois neste dump conteria dados dinâmicos, tais como buffers alocados, heaps dos aplicativos, ... sem contar que o código poderia ter sofrido relocações. Com uma cópia exata e offline dos binários, não haveriam estes problemas e facilitaria bastante a análise pelo disassembler.

Até então, as únicas ferramentas que seriam capazes de ler a NAND via JTAG, são aparelhos comerciais voltados para aparelhos celulares. Algum compatível com o HTC Dream/G1, por exemplo. Como não tenho acesso a tais equipamentos, busquei alternativas mais simples. Uma delas, é o RevSkills (antigo QMAT/PSAS), por B. Kerler. A outra, escrever um código que rodaria no console e fizesse a leitura da NAND para a RAM, e então poderíamos ler seu conteúdo para o disco via JTAG.

O RevSkills não funcionou, pois o suporte ao MSM7201A está "quebrado", assim como via bootloader. Entrei em contato com o autor, e atualmente estamos trabalhando juntos para consertar o suporte ao MSM7201A, assim, em breve, será possível ler, apagar e gravar a NAND do Zeebo pelo RevSkills. Ele está trabalhando em modificações no aplicativo.

Enquanto isso, finalizei e consertei alguns bugs no dumper que havia começado há um tempo. Agora está funcional! Very Happy É possível ler a NAND para a RAM, e através do OpenOCD, fazer um dump da RAM para o disco.

Atualizei a página inicial do Wiki com um link para o repositório com o código do dumper. Basta compilá-lo com um assembler para ARM, que está contido no mesmo toolchain utilizado para desenvolver para BREW (também no Wiki). Os detalhes de funcionamento atualizarei em breve no repo e no Wiki.

O dump conterá dados de seu console, tal como o IMEI. Por isso, mantenha-o em segurança! Tentarei "sanitizar" ao máximo o dump que tenho e disponibilizá-lo a todos.

Através da manipulação da NAND, também pode ser possível atualizar os consoles que ainda estão na versão 1.1.0 para a 1.1.2. Ou, talvez até mais antigos que ainda não conhecemos. E, além disso, testaremos até onde é possível modificá-la sem invalidar as assinaturas, e assim, fazer modificações permanentes no console.

  • 2. Acesso ao JTAG do ARM11

Sabemos que a interface JTAG do Zeebo está funcional, mas que esta interface só está ligada ao núcleo ARM9 do MSM7201A. O interessante para nós seria o controle sobre o ARM11, que é onde o SO é executado, e possivelmente, um Linux. Com acesso ao JTAG do ARM11, poderíamos "enxergar" o mesmo que o kernel do Linux enxergaria, tornando muito mais fácil sabermos o que se passa no núcleo.

O SoC também oferece acesso ao JTAG do ARM11, porém a interface não é exposta no Zeebo. Outra maneira, seria encadear as duas interfaces na mesma porta física (a que temos acesso), ou ainda, redirecionar a porta completamente para o outro núcleo. O MSM7201A oferece este recurso. Porém, estes ajustes são "bloqueados" por alguns pinos no CI. Seria possível desbloqueá-los, mas seria trabalhoso.

Felizmente, por um deslize de projeto, os pinos foram deixados flutuando ao invés de realmente soldados ao terra/ground. Uma vez que os pinos estão flutuando, a única coisa que conecta-os ao nível baixo, são pull-downs internos configurados via software. E se é via software, podemos alterar com facilidade. Smile Bingo! Trocamos o pull do pino correto por um pull-up, e desbloqueamos o acesso aos registradores de modo da JTAG!

Código:
mww 0xa9000254 0x57   <- Configura um pull-up no pino MODE0
mww 0xa900026c 0x3  <- Configura o modo 3 da porta JTAG: ARM11

O modo daisy-chain, que permite usar o JTAG dos dois núcleos ao mesmo tempo parece não funcionar corretamente por algum problema de timing. Porém, configurar a porta exclusivamente para apenas um dos núcleos por vez, funciona completamente. Investigarei sobre.

Isso facilitará bastante estudarmos quaisquer códigos rodando no ARM11, desde o APPSBL a um possível kernel do Linux.

Things just got better. Cool

_________________
Triple "O3" Oxygen

Não enviem MP com perguntas que já estão no FAQ ou algum tópico, simplesmente não será respondido. Se mesmo assim ainda estiver com alguma dúvida, abra um tópico na seção adequada.
avatar
TripleOxygen
Admin
Admin

Mensagens : 237
Data de inscrição : 31/01/2011
Localização : Stratosphere

Ver perfil do usuário http://www.tripleoxygen.net

Voltar ao Topo Ir em baixo

Re: NAND dump & JTAG no ARM11

Mensagem por Alberwood em Qui 05 Maio 2011, 14:25

Então quer dizer que o dia em que rodaremos Linux, Android ou qualquer outro sistema compatível está mais próximo??? Very Happy

Excelente cara, espero que tão logo tenhamos mais avanços nesse quesito... cheers
avatar
Alberwood
Membro

Mensagens : 24
Data de inscrição : 03/02/2011
Idade : 33
Localização : Guarulhos - SP

Ver perfil do usuário http://twitter.com/Alberwood

Voltar ao Topo Ir em baixo

Re: NAND dump & JTAG no ARM11

Mensagem por RssV em Qui 05 Maio 2011, 14:30

Foram dois puta avanços, esses. Para rodar Linux, talvez mais significativos que os outros feitos até aqui.
avatar
RssV
Admin
Admin

Mensagens : 88
Data de inscrição : 26/01/2011

Ver perfil do usuário http://www.zeebobrasil.com

Voltar ao Topo Ir em baixo

Re: NAND dump & JTAG no ARM11

Mensagem por TripleOxygen em Sex 06 Maio 2011, 21:08

Exato!

Realmente, foram os melhores progressos até então para viabilizar o port do *nix. Smile Além de outras possibilidades, mesmo não envolvendo o Linux!

_________________
Triple "O3" Oxygen

Não enviem MP com perguntas que já estão no FAQ ou algum tópico, simplesmente não será respondido. Se mesmo assim ainda estiver com alguma dúvida, abra um tópico na seção adequada.
avatar
TripleOxygen
Admin
Admin

Mensagens : 237
Data de inscrição : 31/01/2011
Localização : Stratosphere

Ver perfil do usuário http://www.tripleoxygen.net

Voltar ao Topo Ir em baixo

Re: NAND dump & JTAG no ARM11

Mensagem por dinhoin em Qua 13 Jul 2011, 23:37

Nao teria como portar o próprio dingux que ja vem com emuladores e tudo mais??


Nao tem como nem tentar instalar o dingux nele ?? Razz Razz Razz Razz
avatar
dinhoin
Membro

Mensagens : 63
Data de inscrição : 01/02/2011
Idade : 21
Localização : Gaia :D

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: NAND dump & JTAG no ARM11

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum