Autor Tópico: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR  (Lida 93373 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Jefferson

  • Zelador
  • Hero Member
  • *****
  • Mensagens: 1854
  • Aprovação: +0/-0
    • Ver Perfil
    • http://ryan.com.br
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #10 Online: Fevereiro 24, 2011, 12:03:10 am »
Se eu entendi corretamente a explicação de Rictad, ele pegou um firmware da Zinwell para aperfeiçoar um aparelho da Zinwell. Eu não vejo nada de fundamentalmente errado nisso. Porém quem quiser aplicar esse firmware em um aparelho que não seja de fabricação Zinwell deve ter em mente que a Zinwell pode não gostar nem um pouco. Como este é um site técnico, se você quiser relatar se funciona ou não e por quê, ótimo. Mas não recomendo a Rictad, por enquanto, fazer qualquer esforço no sentido de compatibilizar o firmware com outras marcas de aparelho.

Se ele quiser ensinar como fazer a compatibilização, já é outra estória. Fornecer o binário é que complica.

 
http://jefferson-ryan.blogspot.com
http://ryan.com.br

Se o que você escreve não merece sua atenção, vai merecer a atenção de quem?!

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #11 Online: Fevereiro 24, 2011, 04:03:48 am »
Estrutura do firmware

Vou fazer um resumo sobre a estrutura do firmware e como acessá-lo via cabo serial. O usuário MCNeto e o pessoal no HT Forum falam sobre isso aqui.
Os STBs baseados no Zinwell têm um sistema Linux embarcado. O arquivo de firmware .zim é estruturado em blocos que correspondem a partições da flash que serão montadas sob o Linux. Podemos visualizar e extrair esses blocos com o programa ZimView disponível aqui (no site do projeto há também informações sobre a estrutura do firmware). Se um arquivo de firmware aberto no ZimView possuir apenas um bloco, é porque apenas aquele bloco será atualizado, mantendo os demais intactos na flash. Ou seja, nem sempre o arquivo de firmware possui um firmware inteiro. Os principais blocos são: Load, Root, Kernel e Code. O bloco Load contém o CFE (Common Firmware Environment), que é aberto, sob licença da Broadcom. O bloco Root contém uma imagem de sistema de arquivos Linux, em formato Squashfs, com o BusyBox incorporado, compilado com apenas alguns dos principais comandos. O bloco Kernel contém o Kernel Linux compactado com gzip e o bloco Code contém o binário executável zmw_base_zinwell que será carregado na memória após a inicialização do sistema e fará todas as operações do STB. Esse bloco geralmente possui mais 2 arquivos, um pequeno script inicial preparatório para ser chamado antes do executável e um módulo (driver) Broadcom, e também está em formato Squashfs.

Quando o STB é ligado, o CFE é carregado e inicia a CPU, a memória e demais sistemas. Logo em seguida, chama o Kernel Linux, que monta todo o sistema de arquivos do bloco Root na raiz. Depois que o Kernel e seus módulos são carregados, os scripts de inicialização são executados. Por último, o bloco Code é montado e o executável é chamado. O executável inicializa o painel frontal, o sintonizador, mostra o logo na tela e passa a realizar todas as operações do STB. Isso tudo leva alguns segundos. Com um cabo serial é possível acessar o console do aparelho e interromper a inicialização para entrar no prompt do CFE, que possui comandos "Unix like", ou, após o Kernel Linux ser carregado, interromper a execução do binário zmw_base_zinwell para entrar no shell do BusyBox.

Se abrirmos a versão 1.7.2 no ZimView, veremos que só há o bloco Code. Podemos extrair o bloco e teremos uma imagem Squashfs que aparentemente está comprimida com zlib. Seria possível montar essa imagem no Linux ou extrair seu conteúdo, incluindo o binário zmw_base_zinwell, com o squash-tools. O problema é que ninguém conseguiu ainda fazer isso com esse padrão de versão (1.7.2, 1.5.5, etc). Sempre gera um erro com o gzip, o que sugere que deve ter sido usada alguma criptografia na compressão. Uma solução, então, é utilizar o cabo serial, para acessar o shell do BusyBox após a imagem Squashfs ter sido montada pelo Linux do aparelho e copiar o binário via pendrive.

Assim, para chegar ao binário zmw_base_zinwell da versão 1.7.2 do ZBT-620A, utilizei um cabo para celulares Siemens, mais precisamente um USB baseado no chip Prolific, de forma similar ao descrito pelo Ryan para extrair o firmware dos DivX Players Mediatek. Na placa do aparelho, podemos identificar um conector de 4 pinos com a identificação "J1 Debug Message". Uma vantagem desse tipo de cabo é que você não precisa usar o pino de +5V. Basta usar 3 pinos, RX, TX e GND.

Com o cabo feito, e com um aplicativo de terminal instalado no PC, como o Putty, é possível acessar às mensagens de console e entrar no prompt, tanto no do CFE, como no do shell do BusyBox. Há um tutorial feito pelo edufaria4 no HT Forum. Para entrar no prompt do CFE, assim que o aparelho for ligado, deve-se apertar CTRL+C no Putty. São só 1 ou 2 segundos para fazer isso, antes do Kernel Linux ser carregado e a inicialização prosseguir. Uma vez no prompt, podemos digitar "help" e ver a lista de comandos disponíveis. Um dos comandos é o "show devices", que mostra os dispositivos montados, inclusive as partições da flash. As partições correspondem aos blocos do arquivo de firmware .zim. A tabela abaixo mostra as principais partições e a quais blocos de firmware estão destinadas:

PartiçãoTamanhoBloco
flash0.avai03584KBROOT
flash0.rootfs512KBROOT
flash0.cfe320KBLOAD
flash0.app2048KBCODE
flash0.kernel        1664KB        KERNEL

O ZBT-620 parece utilizar apenas a partição maior para o bloco Root, devido ao tamanho do sistema de arquivos.

Com o CFE, é possível gravar na flash ou fazer cópia dela via rede. Para levantar a ethernet do STB, usamos o comando "ifconfig". Para fazer uma rede ponto a ponto com o PC com uma placa de rede configurada para negociar o IP de forma automática, bastaria digitar "ifconfig eth0 -auto", como apontado pelo edufaria4. Porém, no meu caso não funcionou. Tive que usar uma configuração manual. Como exemplo, "ifconfig eth0 -addr=172.168.0.1 -mask=255.255.255.0", que levanta a placa de rede com IP 172.168.0.1. Aí, temos que configurar a rede do PC também manualmente, com Gateway 172.168.0.1 (o STB) e um IP na mesma faixa, por exemplo, 172.168.0.100. Além de ter a rede funcionando, é necessário ter um servidor FTP ou TFTP rodando no PC para receber e enviar os arquivos. Eu usei o tftpd (TFTP Server do Fedora 14), que é bem fácil configurar. Com rede e servidor FTP funcionando, podemos gravar e copiar as partições da flash com os comandos "flash" e "save". Algumas informações são necessárias para estas operações, como endereço de início do bloco e tamanho. Por exemplo, o comando "show devices" citado acima mostra, para a partição flash0.avail0, as seguintes informações:

flash0.avail0   New CFI flash at   1E000000   offset   00000000   size   3584KB

Assim, esse bloco se inicia em 1E000000 (primeiro bloco, já que o offset é 0) e tem o tamanho hexadecimal em bytes 380000 (3584*1024, transformado em hexadecimal). Para gravar essa partição no servidor FTP, usamos o seguinte comando (considerando que o PC esteja configurado com o IP 172.168.0.100):

save 172.168.0.100:flash0.avail 1E000000 380000

Isso irá gerar um arquivo flash0.avail no diretório compartilhado do servidor FTP, correspondente a um bloco de firmware, mais especificamente ao bloco Root, sem o header.

Se for necessário recuperar a flash, usa-se o seguinte comando:

flash -noheader 172.168.0.100:flash0.avail flash0.avail

Quer dizer, pegamos o arquivo flash0.avail no servidor FTP que está rodando no IP 172.168.0.100 e o gravamos na partição flash0.avail.

Para a partição flash0.app, as informações mostradas pelo "show devices" são as seguintes:

flash0.app   New CFI flash at   1E000000   offset   00450000   size   2048KB

O bloco começa em 1E000000+450000. Então, para copiar, usamos:

save 172.168.0.100:flash0.app 1E450000 200000

E, se precisarmos recuperar a flash:

flash -noheader 172.168.0.100:flash0.app flash0.app

Eu copiei todas as partições para eventual recuperação, pois iria "brincar" com o firmware. O único cuidado é não danificar a partição flash0.cfe, que é onde fica justamente o CFE. Não sei como o sistema acha o CFE na flash. Talvez no momento do boot os headers dos blocos são lidos à procura do CFE. Mas eu não vou me arriscar a movê-lo a outro bloco.  ;)

Bom, mas isso nos dá apenas acesso aos blocos de firmware. Por exemplo, o arquivo flash0.app será exatamente o mesmo bloco Code extraído do arquivo .zim com ZimView. Não podemos, assim, acessar o binário zmw_base_zinwell. Para isso, precisamos esperar o STB bootar completamente e montar a imagem Squashfs do bloco Code para entrarmos no prompt do Busybox e copiarmos o binário do sistema de arquivos para um pendrive via USB.

Copiar o zmw_base_zinwell via USB

O MCNeto posta informações a respeito aqui. Quando o STB termina de iniciar, devemos apertar CTRL+\ no Putty. Isso interrompe a execução do zmw_base_zinwell e nos mostra o shell do BusyBox. Aí sim, podemos navegar pelo sistema de arquivos com comandos Linux. O comando "mount", sem opções, vai listar os pontos de montagem atuais. Podemos ver que /dev/mtdblock3 está montado em /mnt/hd. "mtblock" é como o Linux identifica os dispositivos flash. mtdblock3 é o quarto bloco (começa em 0) e corresponde a flash0.app listado pelo CFE. Para listarmos o conteúdo de /mnt/hd, basta digitarmos "ls -al /mnt/hd" e veremos 3 arquivos: bcmdriver.ko, settop e zmw_base_zinwell. O que nos interessa é o zmw_base_zinwell, o binário que realiza todas as operações próprias do STB. Podemos copiá-lo para um pendrive (ou HD externo) na USB. Porém, nem sempre conectar um pendrive na USB garante que o mesmo seja montado automaticamente. No caso da versão 1.7.2, ao conectar um pendrive, o dispositivo é reconhecido, mas não podemos montá-lo nem manualmente sem que antes subamos alguns módulos do Kernel. Não é muito difícil montá-lo manualmente, mas existe uma maneira mais fácil de acessar um pendrive: sair para o BusyBox (com CTRL+\) depois de montar o pendrive pelo próprio STB. Assim, com o STB ainda funcionando (zmw_base_zinwell rodando), colocamos o pendrive na USB e apertamos a tecla arquivo (file) no controle remoto. Quando o pendrive for reconhecido pelo aparelho, interrompemos com CTRL+\ e já entramos no prompt com o pendrive montado em /mnt/usb (pode-se verificar com o comando "mount"). Pronto, copiamos o zmw_base_zinwell com o comando "cp /mnt/hd/zmw_base_zinwell /mnt/usb" e depois desmontamos o pendrive com "umount /mnt/usb" para garantir a sincronização do sistema de arquivos antes de retirá-lo.
 
Após copiar o zmw_base_zinwell 1.7.2 do "tijolão", copiei o do slim também. Para isso, eu instalei a versão 1.7.2 slim no meu aparelho "tijolão". Como esperado, o STB ficou inoperativo (sem controle remoto e sem painel frontal). Mas com o cabo feito e com o firmware original copiado pelo CFE, não foi problema restaurar a versão anterior após copiar o binário.

Squash-tools para a versão 1.13.6 e correlatas

A versão 1.13.6, ao ser aberta no ZimView, possui os 4 blocos principais. Esse é um dos motivos que a atualização para essa versão impede a volta para a 1.7.2. Os 4 blocos são atualizados na flash. Voltar para a versão 1.7.2 apenas atualizaria o bloco Code, que é incompatível com o novo sistema de arquivos e o novo Kernel, e "mataria" o STB.

Para essa versão (e outras mais novas semelhantes), os blocos Code e Root continuam sendo imagens Squashfs, mas comprimidas com LZMA. Neste caso, é possível usar a versão correta do squash-tools com LZMA para extrair os arquivos da imagem do bloco Code (após o mesmo ser extraído do arquivo .zim pelo ZimView). A versão que usei foi a 3.3-4 de 64 bits do Mandriva. Provavelmente a de 32 bits também funciona. Como eu uso Linux Fedora (com uma versão do squash-tools LZMA mais nova mas incompatível) eu apenas extraí os binários do pacote RPM para usá-los diretamente, sem instalar. E com essa versão do squash-tools, também é possível recriar a imagem do bloco Code com o zmw_base_zinwell modificado e depois montar o novo arquivo .zim com o ZimView.


Há também muitas informações sobre a estrutura do firmware, o cabo serial e o zmw_base_zinwell no N.Z. Digital TV Forum, principalmente a partir deste post do tópico do Zinwell 620 HD.


Início da explicação das modificações

Por fim, fiquei com 3 binários zmw_base_zinwell. Um da versão 1.7.2 do "tijolão" e outro da mesma versão, mas do slim. Comparei rotinas destes binários no IDA Disassembler. O código usado nos binário é MIPS 32 bits little endian. Então o processador escolhido no IDA foi o mipsl. Com base nas descobertas, modifiquei o binário da versão 1.13.6 (que era só para slim) em um editor hexadecimal. Não é preciso corrigir nenhum checksum. O legal é que, com o cabo, você pode executar o binário modificado a partir do pendrive, sem precisar gravá-lo na flash. Se o código travar, é só desligar e religar o STB. Para isso, coloca-se diretamente o zmw_base_zinwell no pendrive. Com o pendrive já montado no STB, entramos no shell do Busybox e pedimos para executar o binário com o comando "/mnt/usb/zmw_base_zinwell", ou qualquer outro nome que você tenha dado temporariamente a ele. É muito mais prático!

A primeira coisa que procurei no IDA foram bytes que correspondessem aos códigos das teclas do controle. Esses códigos são mostrados no console do Busybox (visualizado com o Putty) quando o STB está rodando. Quando a tecla é reconhecida, aparece a mensagem "Key XXXXYYYY" (onde XXXX são 2 bytes que identificam o controle e YYYY 2 bytes que identificam a tecla) seguida de mensagens relacionadas à função correspondente (vol +, channel etc). Quando o controle não é reconhecido, mas ao menos é identificado, aparece só a mensagem "Key XXXXYYYY". Na maioria dos controles, o bit mais significativo do grupo XXXX é resetado quando a tecla é premida de forma rápida e setado quando a tecla é pressionada por mais de 1 segundo, o que torna possível a utilização de duas funções para cada tecla. Além desses bytes, deve existir ao menos mais 1 para identificar a função do controle, pois testando com o controle universal da Samsung, nas funções TV e VCR não consegui nenhum retorno. Alguns poucos retornos para algumas programações de controles de DVD e Cable. E vários retornos (mas não todos) para programações da função STB, como esperado.

Para o controle prata do "tijolão", os códigos são 38C7YYYY quando o aperto de tecla é simples e B8C7YYYY quando o aperto é constante. Para o controle preto do slim, os códigos são 009FYYYY e 809FYYYY, respectivamente. Então procurei pelos bytes C738 no binário do "tijolão" e 9F00 no do slim. Bom, tem ainda mais coisas em relação ao IDA, às rotinas e ao MIPS que quero explicar no próximo post. Inclusive tem um script IDAPython, o mips-analyser, que facilita a visualização do código MIPS, mas que só foi necessário para a achar as rotinas de inicialização do painel frontal. No entanto, se tivesse ele antes, achar as rotinas do remoto teria sido mais fácil.
« Última modificação: Abril 25, 2011, 12:40:06 am por rictad »

FORUM.RYAN.COM.BR

Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #11 Online: Fevereiro 24, 2011, 04:03:48 am »

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #12 Online: Fevereiro 24, 2011, 04:13:37 am »
Se eu entendi corretamente a explicação de Rictad, ele pegou um firmware da Zinwell para aperfeiçoar um aparelho da Zinwell. Eu não vejo nada de fundamentalmente errado nisso. Porém quem quiser aplicar esse firmware em um aparelho que não seja de fabricação Zinwell deve ter em mente que a Zinwell pode não gostar nem um pouco. Como este é um site técnico, se você quiser relatar se funciona ou não e por quê, ótimo. Mas não recomendo a Rictad, por enquanto, fazer qualquer esforço no sentido de compatibilizar o firmware com outras marcas de aparelho.

Se ele quiser ensinar como fazer a compatibilização, já é outra estória. Fornecer o binário é que complica.

Foi isso mesmo, Ryan. Apenas consegui atualizar uma versão de um aparelho da Zinwell (que foi deixada de lado pela própria) com o firmware de outra versão do mesmo aparelho da marca. E, por enquanto, apenas seguirei com as explicações de como foi feito.

Offline edufaria4

  • Novato
  • *
  • Mensagens: 1
  • Aprovação: +0/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #13 Online: Fevereiro 24, 2011, 05:25:21 pm »
rictad,

Ficarei bem atento às explicações.... parabéns pelo que já postou!!!

Bom saber que as informações que postei lá no HTForum há tempos foi útil para algo.

Abs,
Eduardo

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #14 Online: Fevereiro 24, 2011, 08:56:25 pm »
Sobre a versão 1.7.2_back

A versão 1.7.2_back foi gerada com as partições que eu copiei da flash do "tijolão" antes de mexer no firmware. Mais precisamente, é formada apenas pela cópia das 4 partições principais. O ZimView foi usado para criar a imagem .zim, com sua função "Import Block". Portanto, a versão 1.7.2_back não contém todos os blocos do firmware, mas, assim como as versões 1.13.6, possui os blocos LOAD, KERNEL, ROOT e CODE, que são as partes que de fato formam o firmware. Ainda no ZimView, o "customer number" utilizado foi o 262, pois é o correspondente ao firmware do Zinwell ZBT-620/633. Se não for colocado exatamente esse número, o aparelho não reconhece o firmware. A imagem ficou maior que as imagens das versões 1.13.6 porque as 4 partições da flash foram copiadas em seu tamanho total. Só a partição flash0.avail0 tem 3,5 MB. Mas o bloco Root ocupa só uns 600 KB na partição. Acabei não me preocupando em cortar as imagens das partições para reduzi-las ao tamanho real utilizado pelo bloco.

EDIT: a nova versão 1.7.2_back2 disponibilizada mais à frente é menor e mais segura, pois não congela após a atualização. Além disso, também possui uma variação para o ZBT-633/620C slim.
« Última modificação: Abril 01, 2011, 05:04:49 am por rictad »

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #15 Online: Fevereiro 25, 2011, 09:22:37 pm »
Pré-requisitos para entender com mais profundidade o que o rictad fez, e o que ele vem explicando:

1- Conhecimento Básico de Linux:
Aqui vai uma boa introdução: http://tldp.org/LDP/intro-linux/html/index.html
1a- Buzybox: http://www.busybox.net/about.html
1b- Formatos de Compressão de dados:
     gzip: http://www.gzip.org/
     zlib: http://zlib.net/
     LZMA: http://www.7-zip.org/sdk.html
1c- Sistemas de arquivos:
     Squashfs (comum em Linux embarcado) http://squashfs.sourceforge.net/ e Squashfs tools: http://tldp.org/HOWTO/SquashFS-HOWTO/mksqoverview.html

2- Conhecimento de Redes:
    Emulador de Terminal, que permite a comunicação pela porta serial (Putty): http://www.chiark.greenend.org.uk/~sgtatham/putty/
    Configuração de rede (Intranet)
    Protocolo IP
    Protocolo TFTP

3- Conhecimento de Assembly (em geral):
O melhor guia introdutório que eu encontrei foi este aqui (voltado para ARM Assembly, porém com muitas explicações introdutórias sobre Assembly em geral): http://www.peter-cockerell.net/aalp/

4- Conhecimento de MIPS Assembly (já que o processador principal do chipset Broadcom BCM7402 tem arquitetura MIPS):
Encontrei este guia introdutório aqui: http://en.wikibooks.org/wiki/MIPS_Assembly
E aqui um MIPS Assembler gratuito (que eu ainda não testei: pode ser útil para facilitar a criação de "patches" no firmware): http://courses.missouristate.edu/KenVollmar/MARS/
Obs: O MIPS é um RISC - Reduced Instructions Set Computer (como o ARM). Portanto, fica mais fácil pra quem já tem um pouco de familiaridade com o ARM Assembly.

5- Familiaridade com o IDA Pro Disassembler: http://www.hex-rays.com/idapro/
Quem chegou a acompanhar as modificações de firmware Mediatek MT13x9, provavelmente não terá tantas dificuldades...

6- Quem quiser se aventurar a tentar fazer suas próprias investigações e modificações, deverá ter um conhecimento mínimo em eletrônica (ex: soldagem eletrônica):
Aqui as explicações do Ryan sobre o cabo serial (conversor RS232-TLL): http://ryan.com.br/wp/mtk-porta-serial/

Quem quiser complementar essas recomendações, adicionar mais links, etc., fique à vontade...
« Última modificação: Fevereiro 26, 2011, 05:00:34 pm por zeurt »

Offline zeurt

  • Seeder
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 333
  • Aprovação: +47/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #16 Online: Fevereiro 25, 2011, 10:51:09 pm »
Oi rictad,

Obrigado pelas excelentes explicações até o momento!!!  :clapping:

Além das rotinas do controle remoto e do painel frontal, você chegou a encontrar outras coisas interessantes ou promissoras (ex: Fontes das Legendas e dos Menus, Trechos do firmware responsáveis pelo Media Player, ou outras coisas que nem imagino...)?

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #17 Online: Fevereiro 26, 2011, 02:50:46 pm »
Oi rictad,

Obrigado pelas excelentes explicações até o momento!!!  :clapping:

Além das rotinas do controle remoto e do painel frontal, você chegou a encontrar outras coisas interessantes ou promissoras (ex: Fontes das Legendas e dos Menus, Trechos do firmware responsáveis pelo Media Player, ou outras coisas que nem imagino...)?

Não, zeurt. O media player dele é muito limitado, não tem suporte a legendas. Mas tem a legenda de closed caption, com fonte muito ruim, como em quase todos os aparelhos. Talvez essa fonte possa ser alterada. Mas não procurei por fontes. Eu também acho que existem rotinas para vários sintonizadores, mas ainda não confirmei. Agora se pudesse achar e entender as rotinas de menu, seria algo promissor. Imagina um menu em que pudéssemos escolher o tipo de painel frontal e o tipo de sintonizador? ;)

Offline rictad

  • Hacker Honorário
  • Colaboradores
  • Papagaio
  • *
  • Mensagens: 285
  • Aprovação: +59/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #18 Online: Fevereiro 27, 2011, 03:00:24 pm »
Atenção:

Após relatos de uma atualização mal sucedida a partir da versão Aiko 1.3.8 e após vários testes verifiquei que a versão 1.13.6, inclusive a oficial da Ivison, só pode ser instalada com segurança se você já tiver uma versão 1.5.5 ou superior. Eu alternei várias vezes da versão 1.7.2 para a versão 1.3.7 do Aiko (que pode ser encontrada aqui, disponibilizada pelo wuemura) e para a 1.5.5, em várias ordens de atualização e não houve problema algum, como esperado. Essas versões só possuem o bloco Code e são atualizáveis entre si. Porém, ao atualizar direto da versão 1.3.7, o aparelho trava exatamente no momento em que o logo Zinwell é exibido na tela. Com o cabo serial, é possível ver que o binário zmw_base_zinwell encontra um erro e é interrompido, voltando para o prompt do Busybox. A única forma de atualizar com segurança é atualizar, ao menos, para a versão 1.5.5 antes de atualizar para as versões padrão 1.13.6.

O que eu notei é que mais um bloco na flash é alterado após as atualizações: o bloco ROOT menor, correspondente à partição flash0.rootfs. Como acontece com outros aparelhos, não só a eeprom é modificada quando o firmware roda pela primeira vez, mas algumas partes da flash também. Há mensagens no console que indicam isso quando o aparelho é iniciado pela primeira vez após uma atualização: eeprom saved, flash saved...

Descobri que esse é o bloco alterado pois, ao ser restaurado apenas ele após o problema ser detectado, o aparelho volta a funcionar. As modificações nesse bloco feitas pelo próprio firmware são compatíveis entre as versões antigas. Mas, de alguma forma, a versão 1.13.6 não é compatível com as modificações feitas diretamente pelas versões 1.3.7 e 1.3.8. Por isso deve-se atualizar para as versões 1.5.5 (ou 1.7.X), que irão modificar novamente a flash e torná-la receptível às versões com PVR. Outra forma de contornar o problema talvez seja incluir um quinto bloco (o segundo bloco Root) em versões futuras do firmware.

Offline rafael_netto

  • Novato
  • *
  • Mensagens: 19
  • Aprovação: +4/-0
    • Ver Perfil
Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #19 Online: Março 02, 2011, 06:01:03 pm »
O Rictad merece todos os parabéns do mundo. Conseguiu fazer algo que "o HTForum inteiro" vem sonhando desde 2007!

Eu tenho um Semp DC2008H e consegui fazer as tarefas descritas aqui e no HTF, consegui fazer a cópia dos blocos de memória e também chegar ao prompt do Linux. Verifiquei as mensagens no console e obtive os códigos do controle remoto. Mas não mais que isso.

Estou aguardando o restante das explicações. Tentei me aventurar no IDA e não consegui descobrir nada! Não encontrei nada que fizesse sentido pra mim buscando pelos códigos que ele mencionou. Realmente para fazer isso é preciso um conhecimento que eu ainda não tenho. Apesar de ter experiência de mais de 20 anos com programação em várias linguagens, Assembly pra mim é mais ou menos como holandês, eu "reconheço" a linguagem e as instruções, mas não compreendo o que o código faz.

A esperança que eu tinha em relação ao Semp era debugar as rotinas dos medidores de sinal. O Semp ainda tem o mesmo bug das versões iniciais da Zinwell, que mostra um valor máximo de 98%, indica algo ligado à qualidade do sinal no lugar da "intensidade" e a outra medida não faz sentido. A Zinwell consertou o problema na versão 1.5.5 ou 1.7.1 (não tenho certeza) mas isso jamais foi implementado no Semp.
« Última modificação: Março 02, 2011, 06:11:18 pm por rafael_netto »

FORUM.RYAN.COM.BR

Re: Firmware do conversor digital Zinwell ZBT-620A "tijolão" com função PVR
« Responder #19 Online: Março 02, 2011, 06:01:03 pm »