A segunda parte dos tutorias de OpenWRT será um pouco diferente do que eu esperava, mas isso me parece necessário.
Eu tenho dois roteadores tp-link aqui em casa que estavam “brickados” ou, como eu costumo dizer, “em modo tijolo”, um wr1043nd no qual eu acidentalmente instalei o software de outro roteador e um mr3220 em que um colega fez testes e corrompeu os arquivos do kernel.
Ambos os casos tem solução, mas não espere que essa solução seja fácil, prossiga com um ferro de solda e mão firme…
Hardware
O processo de restauração nesses casos não pode ser feito pelo SSH ou interface gráfica pois os dispositivos não ligam nem em modo de segurança, é preciso gravar o software no chip dos roteadores novamente e para isso é necessária uma conexão direta com a placa através de uma conexão serial, o detalhe é que o conector não existe e você terá que solda-lo na placa do roteador.
Muitos tutoriais utilizam um cabo JTAG. Eu cheguei a tentar o método do JTAG, primeiro foi um parto fazer o cabo (tive que construir circuitos e gravar chips) e no final não funcionou pois o JTAG tem apenas acesso de leitura na maioria dos roteadores e não é possível gravar o firmware por ele.
Dentro do roteador existem os contatos onde os pinos do serial deveriam estar, mas por não serem utilizados esses pinos não são colocados na versão final do produto:
A ordem do que representa cada pino pode variar de acordo com o seu roteador mas são quatro pinos que representam TX (transferência de dados), RX (recebimento de dados), VCC (corrente continua, 3.3v) e GND (terra) recomendo conferir a ordem na wiki do openwrt para o seu modelo especifico.
Uma coisa importante que eu descobri na marra é que depois de colocar os pinos você não pode simplesmente ligar em uma porta serial de um computador antigo, isso porque as portas antigas operam em 12v e o roteador em 3.3v, se você conectar em uma porta dessas você pode queimar o seu roteador e, mesmo que não queime, o sinal enviado pelo roteador estará muito abaixo do que a porta espera e você receberá apenas caracteres aleatórios:
Para esse procedimento você precisará de um cabo USB-Serial, o USB funciona com 5V que é muito mais próximo do roteador que uma porta serial e consiguirá receber e enviar os dados.
Eu estava para sair e comprar um cabo desses, mas olhando ma minha gigantesca caixa de cabos eu encontrei um cabo de um antigo celular LG que eu optei por destruir para salvar o roteador. Celulares antigos tinham conectores próprios para cada marca e não usavam USB, esses conectores eram portas seriais e esses cabos tem circuitos de interface, quando você conecta um cabo desses ele vai ser reconhecido pelo computador como uma porta serial. Na maioria das vezes o windows não terá o driver para esses cabos, mas no Linux são reconhecidos nativamente, na dúvida antes de destruir um cabo plugue-o no linux e rode o comando dmesg, você deve ver algo parecido com isso:
Se você estiver usando um cabo que termina em uma porta serial você não precisa destruí-lo, os pinos necessários são o 2, 3 e 5:
O terra é muito importante para a transmissão de dados, mas o conector de energia não precisa ser conectado e nem deve, o roteador já está energizado e a tensão do USB ainda é maior que a do roteador. Eu por acidente conectei o pino do VCC no roteador desligado da fonte e ele ligou com a energia do USB, realmente recomendo não conectar esse pino.
Software
Feita a conexão, você pode usar o Putty (no Windows) ou o Screen (no Linux) para acessar o roteador escolhendo a porta e a taxa de baud, que nos roteadores TP-Link é 115200.
Primeiro conecte o cabo e depois ligue o roteador, assim você verá todas as mensagens do boot, é importante interromper o boot no momento certo, você vera algo parecido com isso:
U-Boot 1.1.4 (Feb 1 2010 - 10:11:24) AP83 (ar9100) U-boot 0.0.11 DRAM: sri 32 MB id read 0x100000ff flash size 8MB, sector count = 128 Flash: 8 MB Using default environment In: serial Out: serial Err: serial Net: ag7100_enet_initialize... No valid address in Flash. Using fixed address : cfg1 0xf cfg2 0x7114 eth0: 00:03:7f:09:0b:ad eth0 up eth0
Depois disso quando aparecer a mensagem:
Autobooting in 1 seconds
Digite rapidamente (em menos de um segundo) a senha: tpl.
Isso vai interromper o boot e te dar acesso a um terminal básico.
Se você conseguiu chegar até aqui seu roteador está praticamente salvo, o próximo passo é passar o firmware certo para ele e instalá-lo, para isso será necessário configurar um servidor tftp, existem vários e o trabalho de configurá-los pode ser bastante extenso, não explicarei os detalhes mas recomendo para o windows o tftp-util e para o linux o tftpd, ambos são fáceis de configurar e você encontra o passo a passo na primeira busca.
O grande truque do tftp está na verdade no ip em que ele tem que estar, cada roteador procura o tftp em um ip pré determinado, no caso do wr-1043nd foi no 192.168.0.5 mas o outro procurou no 192.168.1.26, você precisa verificar qual o ip o seu roteador pede na wiki ou tentar atualizar, ele mostra onde está procurando os arquivos.
Baixe o arquivo do firmware que você vai instalar, renomeie-o para “code.bin” e coloque na raiz do servidor tftp, depois conecte um cabo do roteador para a maquina que está executando o tftp e defina o ip fixo para ela, o roteador vai se atribuir um pré-definido e deve conseguir se comunicar com o servidor, em seguida tudo que você precisa fazer é digitar uma série de comandos repletos de “números mágicos”. Um desses números varia de acordo com o firmware que você está instalando pois ele representa o tamanho do arquivo em hexadecimal (numero de bytes), ele está destacado em azul.
O primeiro passo é apagar o firmware instalado com:
erase 0xbf020000 +7c0000
que deve ter o resultado:
First 0x2 last 0x7d sector size 0x10000 125 Erased 124 sectors
em seguida copiar o firmware para a RAM do roteador:
tftpboot 0x81000000 code.bin
note que após a transferência será exibido o tamanho do arquivo que deve bater com o dos comandos:
dup 1 speed 1000 Using eth0 device TFTP from server 192.168.0.5; our IP address is 192.168.0.2 Filename 'code.bin'. Load address: 0x81000000 Loading: ################################################################# [...] done Bytes transferred = 8126464 (7c0000 hex)
Explicando os números mágicos
O que são esses números:
bf020000: É o primeiro endereço de memória do “HD”, onde ele vai procurar o boot.
7c0000: É o tamanho do arquivo de firmware
81000000: É o primeiro endereço de Ram que você pode usar
O numero 7c0000 só é válido para o wr-1043nd com a versão que eu usei, tentei instalar o software original sem sucesso até descobrir que esse número varia de arquivo para arquivo, se for menor tudo bem, mas com arquivos maiores você terá problemas, a menos que a memória do seu roteador seja menor que esse tamanho, como foi o caso do mr3220 em que eu tive que usar o número 3c0000, o ideal é você usar o tamanho do arquivo.
Espero ter ajudado, seguem as fotos:
[pe2-gallery album=”http://picasaweb.google.com/data/feed/base/user/114612966219450043348/albumid/5872848019340455073?alt=rss&hl=en_US&kind=photo” ]