Colocando o genio de volta na garrafa: Convertendo a saida do hexdump em binario

Durante o processo de instalação do OpenWRT no roteador DIR-825 precisei copiar alguns binários do roteador para o computador.

Como fazer isso quando você não tem a rede funcionando ainda? A solução é simples, use o hexdump e o xxd.

No roteador:

# hexdump mybinary.bin

Use o mouse para selecionar e copiar o conteúdo que o hexdump joga na tela. Uma dia importante é você configurar o terminal para rolagem ilimitada, no caso do gnome-terminal vá em Edit -> Profile -> clique no botão Edit -> Scrolling e marque Unlimited.

Abrar um editor (gedit) e coloque o conteúdo, salve como mybinary.txt, por exemplo.

Agora use o seguinte comando para gerar o binário novamente:

$ cat mybinary.txt | xxd -r > mybinary.bin

Esta dica eu encontrei no Linux Jornal.

ATUALIZACAO:
E se você quisesse fazer o oposto, gerar um binario no seu roteador com a saida do hexdump de um binario do computador? O OpenWRT não possui o xxd por padrão, então você teria que encontrar outra alternativa.

Neste site encontrei a sugestão abaixo.
Considere o arquivo hdump como exemplo, com o conteudo:


$ cat hdump
41 42 43 44
45 46 47 48

$ echo 'ibase=16' | cat - hdump | tr ' ' \; | bc | awk '{printf("%c",$0)}'

Infelizmente o OpenWRT também não possui o comando bc, então lembrei do comando printf que usei para zerar a BIOS do computador a partir do terminal do Linux.

Então o comando ficou assim:

$ for i in $(cat hdump) ; do printf "\x$i" ; done

3 thoughts on “Colocando o genio de volta na garrafa: Convertendo a saida do hexdump em binario

  1. ola gostei do seu post eu gostaria de saber como posso enviar um imagem openwrt via porta serial tenho um roteador que só funciona serial e nada mais não tenho acesso via tftp, gostaria de pedir que cria se um tutorial com esse metodo

    1. Bom dia Caique,
      Passei por este mesmo problema e escrevi este post em inglês para que mais pessoas pudessem acessar:
      https://acassis.wordpress.com/2012/10/21/how-to-transfer-files-to-a-linux-embedded-system-over-serial/

      Antes de tentar fazer isso veja se você tem acesso ao terminal do bootloader U-Boot do seu roteador, se tiver você pode transferir a imagem pelo próprio U-Boot, é bem mais simples e você não precisa ter todo o trabalho explicado no link anterior.

      Se não tiver acesso, aí você realmente terá que fazer como eu fiz. O processo é simples, eu extraí o programa lrz (usado p/ transferência de arquivos pela serial via protocolo ZMODEM) do pacote usado na versão de firmware do meu roteador, converti para texto hexadecimal e enviei pela serial uma sequência de comandos para criar um shell script que recebesse automaticamente o texto hexadecimal do programa lrz enviado pelo computador e salvasse no roteador.

      Após converter o arquivo texto hexadecimal de volta para o binário lrz dentro shell Linux do OpenWrt, basta executá-lo e fazer a transferência do firmware do PC para o OpenWrt via serial.

      Embora em teoria seja possível transferir o próprio firmware OpenWrt usando o processo de enviar o texto hexadecimal pela serial, isso seria muito demorado e as chances de erro aumentariam. Como o binário lrz é pequeno, este processo de transferência é mais rápido e as chances de dar erro diminuem. E usando o lrz p/ transferir o arquivo maior é mais seguro, pois ele faz checagem de erros.

      Espero ter ajudado, abraço!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s