NAND dump & JTAG no ARM11
4 participantes
Open Zeebo :: GERAL :: Consider it Done
Página 1 de 1
NAND dump & JTAG no ARM11
Depois de um tempo sem postar novidades, divulgo os 2 últimos progressos no projeto!
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! É 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.
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. Bingo! Trocamos o pull do pino correto por um pull-up, e desbloqueamos o acesso aos registradores de modo da JTAG!
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.
- 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! É 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. 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.
Re: NAND dump & JTAG no ARM11
Então quer dizer que o dia em que rodaremos Linux, Android ou qualquer outro sistema compatível está mais próximo???
Excelente cara, espero que tão logo tenhamos mais avanços nesse quesito...
Excelente cara, espero que tão logo tenhamos mais avanços nesse quesito...
Re: NAND dump & JTAG no ARM11
Foram dois puta avanços, esses. Para rodar Linux, talvez mais significativos que os outros feitos até aqui.
Re: NAND dump & JTAG no ARM11
Exato!
Realmente, foram os melhores progressos até então para viabilizar o port do *nix. Além de outras possibilidades, mesmo não envolvendo o Linux!
Realmente, foram os melhores progressos até então para viabilizar o port do *nix. Além de outras possibilidades, mesmo não envolvendo o Linux!
Re: NAND dump & JTAG no ARM11
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 ??
Nao tem como nem tentar instalar o dingux nele ??
dinhoin- Membro
- Mensagens : 63
Data de inscrição : 01/02/2011
Idade : 28
Localização : Gaia :D
Tópicos semelhantes
» Backup e restauração da NAND?
» Jogos na NAND - Parte #1
» Atualização em 28.07.2011
» Procurando um jtag
» duvida sobre o jtag
» Jogos na NAND - Parte #1
» Atualização em 28.07.2011
» Procurando um jtag
» duvida sobre o jtag
Open Zeebo :: GERAL :: Consider it Done
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|