Month: July 2012

Power corrupts

“Power tends to corrupt, and absolute power corrupts absolutely. Great men are almost always bad men.”
— John Emerich Edward Dalberg Acton

Advertisements

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

Sete meses depois: Roteador Wireless Dlink DIR-825 funcionando

Há exatamente 7 meses eu comprei um “Roteador Wireless Wi-fi D-link Dir-825 N Dual-band C Defeito” no Mercado Livre.

Segundo o vendedor a porta Ethernet (WAN) não estava funcionando corretamente, assim não era possível usa-lo como um roteador Wireless. Mas todo o resto estava funcionando corretamente.

Como todas as funções dele estavam funcionando bem e este roteador custa mais de U$ 100.00 na Amazon, não pensei duas vezes, seria um negócio da China compra-lo por R$ 129,90 e instalar o OpenWRT nele.

Quando o roteador chegou liguei e tudo estava funcionando corretamente, inclusive a porta Ethernet WAN, mas não demorou muitos minutos para ela parar de funcionar. Estava muito instável, às vezes funcionava, às vezes não.

Então resolvi pesquisar na Internet e encontrei várias pessoas que estavam com este mesmo problema, mas atualizando o firmware resolvia o problema. Testei várias versões de firmware da Dlink, mas nenhum funcionou corretamente. Então com certeza havia um problema físico no chip ou em algum outro componente da placa. Também instalei o OpenWRT e nada de funcionar.

Como não seria muito fácil consertar a placa, resolvi usar uma estrategia *teoricamente* simples, ligar um conversor USB/Ethernet na porta USB do roteador DIR-825 e usa-la como porta WAN.

Comentei a ideia no trabalho e um dos meus colegas disse que tinha comprado este conversor no DealExtreme e não estava usando, no dia seguinte ele trouxe o conversor.

Compilei uma versão do OpenWRT com o módulo USB/Ethernet Davicom DM9601, para isso acrescentei a linha CONFIG_USB_NET_DM9601=y no target/linux/ar71xx/config-2.6.39. Porém não consegui fazer upgrade do OpenWRT que eu havia instalado no modem, então deixei o modem guardado e não mexi mais nisso.

Hoje resolvi insistir mais um pouco e consegui resolver o problema. Como a interface Wireless do modem estava funcionando eu consegui conectar do notebook no roteador via wireless, configurei a interface wlan0 para usar o ip 192.168.1.2 e usei a cópia de arquivo via ssh (scp) para copiar os modulos dm9601.ko e usbnet.ko para o diretório /lib/modules do roteador.

Em seguida editei o arquivo /etc/modules.d/20-usb-core acrescentando:

usbcore
usbnet
dm9601

Também editei o arquivo /etc/config/network para colocar a interface do conversor USB/Ethernet (eth2) como sendo a interface wan.

Finalmente tudo está funcionando como o esperado. Estou escrevendo este post conectado no roteador DIR-825 com um conversor USB/Ethernet e rodando o OpenWRT.

Se você leu este post até aqui, deve estar se perguntando: por que tanto trabalho para fazer isso funcionar? Não seria melhor comprar outro roteador? A resposta: Nada substitui o prazer de resolver seus problemas criando outros mais interessante e mais desafiadores. Pense nisso!

Update:

O conversor USB/Ethernet Davicom DM9601 é um pouco lento, pois ele é USB 1.1 full-speed (12Mbps), isto limitava minha taxa de download a 800KB/s. Então comprei um adaptador USB/Ethernet mais rápido, compatível com USB 2.0 (480Mbps).
Este novo dongle USB usa o chipset ASIX AX88772B, porém no driver asix.c do kernel 2.6.39 não existe o product ID 772b cadastrado. Tive que cadastrar manualmente, acrescentando:

{
// Cables-to-Go USB Ethernet Adapter
USB_DEVICE(0x0b95, 0x772b),
.driver_info = (unsigned long) &ax88772_info,
},

Correção:

Após usar o conversor USB/Ethernet ASIX notei que a taxa de download ficou limitada em 200KB/s, bem menor que os 900KB/s do Davicom DM9601. Portanto se você quer melhor desempenho aconselho a comprarem o dongle Davicom, que inclusive custa metade do preço do dongle ASIX.

How to load firmware using osmocon

Just for future reference I decide to write down these commands.

Loading firmware on Motorola W220:

/osmocom-bb/src/host/osmocon/osmocon -p /dev/ttyUSB1 -m romload nuttx.bin

Loading firmware on C115:

/osmocom-bb/src/host/osmocon/osmocon -p /dev/ttyUSB1 -m c123xor /osmocom-bb/src/target/firmware/board/compal_e88/chainload.compalram.bin -c nuttx.bin

Note: NuttX is running fine on W220, but although it says it is running on C115 I cannot see nothing on serial console.

Cuidado com as pegadinhas da linguagem C

Hoje Alan Cox corrigiu um erro que para muitas pessoas poderia passar despercebido:

http://permalink.gmane.org/gmane.linux.drivers.video-input-infrastructure/51272

Resolvi testar e inicialmente apenas declarei a variável mac e mandei exibir o tamanho, como esperado retornou 6. Então resolvi criar uma função e passar o vetor mac[6] como no arquivo az6007.c.
Para minha surpresa ele retornou 4. Portanto durante a compilação o vetor é convertido em ponteiro, para evitar a passagem por cópia.


#include<stdio.h>
void calcsize(unsigned char mac[6])
{
printf("Size of mac is %d\n", sizeof(mac));
}
int main (void)
{
unsigned char mymac[6];
mymac[0] = 0x56;
mymac[1] = 0xff;
mymac[2] = 0xf0;
mymac[3] = 0x1b;
mymac[4] = 0x97;
mymac[5] = 0xbf;
printf("Size of mymac is %d\n", sizeof(mymac));
calcsize(mymac);
return 0;
}

Aprendendo a datilografar no Linux

É estranho como as pessoas que usam computador não sabem digitar corretamente. Isto acontece porque elas nunca fizeram aula de datilografia ou por simples preguiça de aprender.

Mas nem tudo está perdido, elas podem aprender a datilografar do jeito certo, existem vários programas disponíveis na Internet para isso.

No Linux meu programa preferido para datilografia chama-se klavaro.

Ele pode ser instalado com o seguinte comando:

sudo apt-get install klavaro

Se você tem crianças em casa ou prefere uma forma mais divertida de aprender a digitar, sugiro instalar o programa Tux Typing 2:

sudo apt-get install tuxtype

Boa digitação e boa diversão!

Transformando seu celular numa Estação Base GSM

Sylvain Munaut, um dos principais desenvolvedores do Osmocom-BB desenvolveu uma prova de conceito transformando um celular numa estação base GSM que pode ser usada para comunicação com outros celulares.

Com a modificação que ele fez é possível fazer com que dois ou mais celulares comuniquem diretamente sem a necessidade de um torre GSM para intermediar a comunição.

O vídeo da palestra (em ingles) encontra-se no link abaixo:
http://live.digitaloctober.ru/embed/1207?language=en&params[pw]=630&params[ph]=355&params[episodes_under]=1&params[eh]=100#time1338441117