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/

quinta-feira, 1 de maio de 2008

Mandriva One no Pendrive



Mandriva Seed
O Aurelien Lefebvre liberou o Mandriva Seed, que e um programa para copiar o iso do Mandriva One 2009.1 para um pendrive ou similar. Pode ser baixado do diretório devel/tools/ de um dos mirror da mandriva.
ftp://ftp5.gwdg.de/pub/linux/mandriva/mandrivalinux/devel/tools/
Baixe o mandriva-seed.sh, para um diretório no seu sistema que tenha permissão de executar.
Torne-o executável com o comando chmod +x mandriva-seed.sh, e rode com ./mandriva-seed.sh
Precisa estar em um ambiente gráfico.
Uma tela do xterm pedindo password será aberta, digite a senha do root.
Janela do Mandriva Seed, mostrado abaixo, deve aparecer.


Use o botão Browse para escolher a imagem iso previamente baixado.
Plugue o pendrive, e aguarde alguns segundos, que ele vai aparecer na opção Target, caso tenha mais um pendrive, escolha a que vai ser usado.
Agora e só clicar em "Create Live USB" e esperar a conclusão, feito, e só fechar o programa, remover (ou não) o pendrive e fazer o boot por ele.
Não esqueça de fazer um backup do conteudo do pendrive, já que o mesmo será sobre escrito.


Os procedimentos abaixo ainda não foi testando com a versão 2009.1 do Mandriva One.

Indrodução
Mandriva e uma distribuição que se formou pela junção do Mandrake e da Conectiva, A Mandriva vende uma versão especial para ser rodado direto do pendrive, o Mandriva Flash. Infelizmente ela não disponibiliza uma imagem dessa versão para download. O que me motivou a tentar carregar o versão para cd do Mandriva Linux One a partir de um pendrive. Depois de algumas horas de pesquisas (leitura) e tentativas empiricas, resultou nesse artigo.

Material necessário:
Imagem iso do Mandriva Linux One 2008 Spring, que pode ser baixando de
http://www.mandriva.com/ .
Um pendrive ou cartão de memoria com mais de 700MB livres, formatado em fat (fat16 ou fat32 conforme a capacidade da mídia) e que não tenha arquivos importantes.
Um sistema linux (pode ser o próprio Mandriva one), com as seguintes ferramentas:
module-init-tools (depmod) com suporte a zlib
syslinux
kernel com suporte ao squashfs
dosfstools (mkdosfs)
Opcional: install-mbr(1) ou lilo

Procedimentos:
Criar uma partição fat no pendrive, e torna-la ativa (se necessário).
# fdsik /dev/sde

Formatar a partição em fat se necessário, com label MandrivaOne.
# mkdosfs -F16 -n MandrivaOne /dev/sde1
Se o pendrive estiver formatado, somente mude o label para MandrivaOne, que pode ser realizado pelo mlabel (mtools).

Copiar o conteúdo do cdrom do "Mandriva Linux one 2008 spring" para o pendrive.
# cd /media/MandrivaOne
# cp -rv /media/cdrom/ .

Modificando o initrd:
Caso queira, não e necessário realizar esta etapa, veja no final do texto como fazer pelo Windows XP, use o initrd indicado.
O initrd procura o cdrom pelo nome do volume e faz o mount. Temos que mudar a linha que faz a montagem no linuxrc para que em vez do iso9660 use o vfat. A imagem não possui os modulos para montar um sistema de aquivos em vfat, nem os para suporte a discos (HDs e pendrives e similares). Fazendo as devidas adaptações e possivel usar outros sistemas de arquivos, como o ext2, e montar como um branch do unionfs, e ter um sistema gravavel.

Montar o /media/cdrom/loopbacks/distrib.sqfs, squashfs.
# mkdir /mnt/squash
# mount -t squashfs -o ro,loop /media/cdrom/loopbacks/distrib.sqfs /mnt/squash

Descompactar o boot/cdrom/initrd.gz que esta no pendrive
# cd boot/cdrom/
# gzip -d initrd.gz

Montar o initrd
# mkdir /mnt/initrd
# mount -t ext2 -o rw,loop /media/MandrivaOne/boot/cdrom/initrd /mnt/initrd

Copiar os modulos sd_mod,vfat,fat e msdos para o initrd
# cd /mnt/initrd/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/msdos/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/fat/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/vfat/ .
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/nls/nls_cp437.ko.gz nls/
# cd ../drivers/scsi/
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/drivers/scsi/sd_mod.ko.gz .
# cd

Atualizar as dependências dos modulos do kernel
# depmod -a -b /mnt/initrd 2.6.24.4-desktop586-1mnb

Editar o linuxrc que esta no initrd
# cd /mnt/initrd
# (editor predileto) linuxrc
e incluir as seguintes linhas, junto a linhas similares
probe-modules sd_mod
probe-modules nls_cp437
probe-modules vfat
#
mudar a linha
nash-mount -o ro -t iso9660 LABEL=MandrivaOne /live/media
para
nash-mount -o ro -t vfat LABEL=MandrivaOne /live/media
mude o ro para rw caso queira gravar no pendrive enquanto roda o live mandriva.
grave o arquivo e saia do editor.

Desmontar o initrd
# umount /mnt/initrd

compactar o initrd
# cd /media/MandrivaOne/boot/cdrom/
# gzip -9 initrd
Verifique se o initrd.gz esta com a data atualizada.

Instalando o syslinux:
Copiar o boot/cdrom/syslinux.cfg para a raiz do pendrive
# cd /media/MandrivaOne/
# cp boot/cdrom/syslinux.cfg .
# cd

Desmontar o pendrive
# umount /media/MandrivaOne/

Instalar o syslinux, sde1 e a partição no pendrive.
# syslinux /dev/sde1

Como o syslinux esta instalado na partição, e necessário copiar um mbr para o raiz do pendrive.
# cat /usr/lib/syslinux/mbr.bin >/dev/sde
Pode ser que esse mbr não funcione corretamente (tela somente com um cursor piscando), nesse caso e necessário instalar ou um outro, que pode ser feito usando o install-mbr ou pelo lilo
# install-mbr /dev/sde
ou
# lilo -M /dev/sde mbr
Agora, e só testar o boot.
O syslinux não ira mostrar corretamente os menus e o gráficos como no boot pelo cdrom.

Windows XP:
Pelo windows não seria possível fazer algumas das modificações necessárias no initrd, sendo necessário usar um pré modificado.
Baixe o initrd modificado desse endereço:
http://enigma.nobel.com.br/eeepc/mandriva_initrd.gz
Renomeia para initrd.gz

Baixe o syslinux para o windows
http://syslinux.zytor.com/
http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.63.zip
Descompacte em algum ponto do seu hd, recomendo na raiz de alguma partição.

Em um pendrive formatado em fat (fat16 ou fat32), não pode ser NTFS, mude o nome do volume onde pretende instalar o Mandriva para MANDRIVAONE (propriedades do drive).

Use algum programa que abra aquivos .iso, como o winrar ou um emulador de cdrom, e copie o conteúdo para a raiz do pendrive.
Copie o initrd.gz previamente baixado para o boot/cdrom do pendrive, copie o syslinux.cfg para a raiz o pendrive.

Abra um prompt de comandos, mude para o diretório onde esta o win32/syslinux.exe.
c:\
cd c:\syslinux-3.63\win32
syslinux -m -a U:

onde U: e a letra correspondente ao pendrive.

Não garanto que esse procedimento funcione.


1) install-mbr foi escrito para o projeto Debian por Neil Turton.

terça-feira, 4 de março de 2008

eeepc, dicas e truques.

Restaurando a configuração original:
Logo após ligar o eeepc, aperte insistentemente a tecla f9, a tela do grub (gerenciador de boot) deve aparecer, repita o ciclo de desliga, liga e aperta, tantas vezes for necessário até que essa tela apareça.
Escolha a opção Restore Factory Settings, logo em seguida, aparecerá um mensagem pendido para digitar yes, faça isso digitando as teclas y,e e s e depois o enter. Após alguns segundos será pedido para apertar o enter para o reboot.
AVISO: Todos os arquivos pessoais, modificações, configurações e atualização serão perdidas.
Portanto, se possivel faça uma copia de segurança antes.

Abrindo uma janela de terminal (xterm):
Use a combinação de teclas crtl+alt+t.

Aumentando o tamanho da fonte do xterm:
O xterm aberto pelo alt+t tem as fontes muito pequenas, para aumentar segure a tecla ctrl e aperte o botão direito (ou seria o esquerdo) do mouse, um menu chamado VT Fonts será aberto, escolha o Huge, e depois maximize a janela.

Afinal, o clock e de 900MHz ou 630MHz?
O eeepc possuí um processador Intel celeron M (mobile) de 900MHz. Mas, por questões de estabilidade a asus configurou o clock em 630MHz. Uma versão preliminar da bios permitia a troca do clock.
Existem programas (Linux e windows) que permitem reconfigurar o clock para 900MHz.

Usando o botão do meio:
O botão do meio do mouse ou o terceiro botão, e usado para colocar textos previamente selecionados. No eeepc o esse botão pode ser obtido pressionando simultaneamente ambos os botões esquerdo e direito, ou batendo com dois dedos na pad. Ambas as operações são difíceis de serem realizados.

Ligando e Desligando a webcam:
Para usar a webcam em outros programas que não o skype e o ucview pré instalado no eeepc, e necessário ligar a camera pelo acpi. Para tanto e necessário enviar um comando ao acpi, isso pode ser feito com os comandos abaixo:
Para ligar
sudo echo 1 >/proc/acpi/asus/camera
para desligar
sudo echo 0 >/proc/acpi/asus/camera
para ver se a camera esta ou não ligado
cat /proc/acpi/asus/camera
se for 1 esta ligado, 0 desligado.
O script a seguir liga ou desliga a camera conforme o estado.
#!/bin/sh
CAM="/proc/acpi/asus/camera"
if [ -f $CAM ]; then
STATUS=`cat $CAM`
if [ "$STATUS" = "0" ]; then
echo "Ligando a webcam." >&2
sudo echo 1 >$CAM
else
echo "Desligando a webcam." >&2
sudo echo 0 >$CAM
fi
else
echo "Asus acpi não disponivel."
exit 1
fi

Copie esse código para um arquivo, e grave em /usr/local/bin chame-o por exemplo de camonoff e de permissão de execução com o comando chmod +x camonoff.
toda vez que o script for chamado, o estado da camera será alterado.

Janela ou caixa de dialogo maior que a tela:
Quando uma janela ou caixa de dialogo estiver maior que tela, mova-o segurando a tecla alt e o botão esquerdo do touchpad. Alt+o seleciona o botão ok e o ESC cancela.

Bateria não e mais reconhecida:
As vezes, principalmente quando da bateria fica descarregada por algum tempo, mesmo ligado pela própria, o eeepc não reconhece a bateria, indicando bateria inexistente. Nesse caso, no incio do boot, pressione f2 para entrar no setup da bios, aguarde um tempo, e continue o boot saindo do setup. Me parece que a bateria em condição da carga baixa demora mais tempo para passar as informações para a BIOS que ativa o reconhecimento da bateria.

Ajustando o brilho do LCD:
O brilho pode ser ajustado, inclusive além do que a bios permite, pelo uso do seguinte comando,
setpci -s 00:02.1 f4.b=hex
Onde hex e um número hexadecimal de 0x00 a 0xff (padrão 0x0a a 0x80)


****