quarta-feira, 11 de fevereiro de 2009

Gravando uma PEROM

As flash PEROM (Programable Erasable Read Only Memory) podem ser gravados por circuitos tão simples quanto o necessário para a sua leitura, necessitando de uma alimentação de 5V e da sinalização de gravação.
Devido a essa simplicidade, muitos aparelhos eletrônicos, como placas de computador, tem a capacidade de atualizarem o firmware sem a necessidade de remover o chip (Circuito Integrado) e colocar-lo em um gravador próprio, como no caso das EPROM tradicionais.
Placas mães e algumas placas de rede possem esse recurso, no caso da placa mãe e necessário, trocar de chip a 'quente', ou seja, remover o chip que contem a BIOS e colocar o PEROM que deseja gravar. Uma operação que pode danificar as partes envolvidas. Recomenda-se usar uma placa mãe que não esteja sendo usada.
Para fazer a gravação pode se utilizar o software de atualização de bios do próprio fabricante, ou então o Uniflash (http://www.rainbow-software.org/uniflash/)
Um demostração desse método pode ser visto neste vídeo:


Um outro meio de gravar uma flash PEROM e usando uma placa de rede, como as que usam o chip da Realtek RTL8139 versões A, B e C, muito comuns e baratas. A versão D (RTL8139D) teve essa e outras funcionalidades removidas.
Os fabricantes de placas, para economizar míseros centavos, usam um soquete de 28 pinos em vez do de 32 pinos, necessário para a gravação, ou quando e de 32 pinos, não fazem a trilha do sinal de gravação.


A placa com o soquete de 28 pinos precisa ser modificada para poder efetuar a gravação, para tanto e necessário substituir o soquete por um de 32 pinos, será preciso dobrar os pinos adicionar, ou se a placa permitir, fazer furos extras. Ou montar o soquete de 32 pinos em cima do de 28 pinos.
Os diversos tamanhos dos chips de memoria ROM possuem muitos dos pinos em comum, de modo a possibilitar o uso de um mesmo soquete, deixando os pinos próximos a marca do pino 1 vazios.
Os seguintes pinos do soquete de 32 pinos precisa ser ligados, pino 31 deve ir ao 89 (/WE) do RTL8139C, e o 2 (A16) a o 70.


O pino 30, ou seja o 28 do soquete de 28 pinos, que corresponde ao VCC (5V) dos CHIPs de 28 pinos, e ao A17 nos de 32 pinos, de capacidade maior que 1Mb. O RTL8139 e capaz de endereçar no máximo 1Mb ou 256KB, portanto as linhas de endereçamento A17 e A18 não são utilizados. Esses pinos podem ser ligados no GND ou no VCC, mas dependendo da capacidade do PEROM, eles podem ser usando para selecionar qual a porção de 1Mb que será endereçada. Portando seria interessante colocar um jumper para selecionar o nível lógico desses pinos. E o pino 32 deve ter ligado a o VCC.


O RTL8139 precisa ser configurado para utilizar uma BOOT ROM, que é realizado pelo programa de configuração RSET8139.EXE.


A gravação e feita pelo programa fornecido pela realtek, o rtflash.exe, que e um programa de linha de comando, sem interface.
Use a opção -l para ver a lista de PEROM testados, bem como a identificação do chip atual.
O -s para salvar o conteúdo da ROM atual, -v para realizar uma verificação.
Para gravar: rtflash imagem.rom
Para veriricar: rtflash -v imagem.rom


O uso mais comum de ROMs gravados dessa forma e para realizar o boot pela rede, usando por exemplo o PXE.
O projeto Etherboot (http://www.etherboot.com) desenvolve soluções open source para o boot remoto, diversos sistemas operacionais, até mesmo o que aparentemente não possuem esse recurso podem ser carregados pela rede, no site do Etherboot, há vários tutoriais.

No caso de reaproveitar chips já usados, como BIOS de placas mãe fora de uso, para gravar um ROM de boot remoto, ou outro código que não tenha o tamanho exato da capacidade do PEROM, e interessante prevenir que algum lixo fique gravado, e como os programas não possuem a opção de apagar (isso e feito automaticamente quando se grava), assim e necessário gerar uma imagem do tamanho exato da PEROM, e ter os bits não usando setados em nível lógico alto (1), que costuma ser o valor de uma PEROM vazia. Uma imagem assim pode ser criado usando algumas ferramentas Unix, como o dd e o tr.
Criando um arquivo de 256KB (2Mb) cheio de 0xff:
dd if=/dev/zero bs=1 count=256k | tr '\000' '\377' >imagem.rom
Copiando a imagem para o primeiro megabit:
dd if=gpxe-git-10ec8139.rom of=imagem.rom conv=notrunc
Onde gpxe-git-10ec8139.rom e a imagem para a placa de rede realtek 8139.

Copiando para o segundo megabit:
dd if=gpxe-0.9.6-10ec8139.rom bs=1 seek=128k of=imagem.rom conv=notrunc

Imagem de 2Mb somente pode ser gravado pelo método da placa mãe.
Pela placa de rede, somente 1Mb podem ser gravados por vez, selecionando manualmente do endereçamento do pino 30, e ou do 1.

Dessa forma, temos imagens em duas regiões da PEROM, que pode ser selecionado mudando o nível do pino 30.


O RSET8139.EXE e o RTFLASH.EXE podem ser baixados do site da realtek.
Existe também a possibilidade de usar este programa: http://ctflasher.sourceforge.net/

Nenhum comentário: