Month: June 2006

Baixar o kernel 2.6.x para a Lite5200B usando o GIT

Primeiramente baixe o kernel padrão do Torvalds:

$ git clone git://www.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git

Entre dentro do diretório criado:
$ cd linux-2.6

Adicione o patch para IDE:
$ git pull http://gitbits.246tNt.com/gitbits/linux-2.6-mpc52xx.git#ide

Adicione o patch para placa de rede (FEC):
$ git pull http://gitbits.246tNt.com/gitbits/linux-2.6-mpc52xx.git#bestcomm

Instalando o Debian na Lite5200

Existe um tutorial muito bom explicando como instalar o Debian Woody na lite5200:
http://www.denx.de/wiki/DULG/DebianOnPowerpcInstallationHowto

Porém este manual não funciona para Debian Sarge, uma vez que o root.bin não existe mais, e sim uma initrd que é MSB (o impede a montagem em um PC (LSB)).

A solução encontrada foi gerar o sistema de arquivo do Debian instalando o mesmo num HD usando o QEMU como base. Você pode tentar criar um “hard disc image”, mas será mais trabalhoso calcular o deslocamento que o mount deverá executar para montar uma partição dentro deste arquivo de imagem, então é melhot instalar num pequeno HD (ex.: 6GB).

Particionamos este HD (/dev/hdb) em 4 partições, na máquina Host. Não preocupe em mudar o tipo da partição, apenas crie as 4 partições do tamanho indicado:

Partição 1: 1MB (Apple table)
Partição 2: 2MB (Networld boot)
Partição 3: 5.8GB (Sistema de Arquivo – ext2)
Partição 4: 253MB (Swap)

Inicie a instalação pelo QEMU:
qemu-system-ppc -hda /dev/hdb -cdrom debian-netinst.iso -boot d

Quando aparecer o LILO ( boot: ) digite:
install-powerpc-2.4 ramdisk_size=10000

Siga o processo de instalação padrão, modique a 2ª, 3ª e 4ª partição para os tipos indicados acima. Não se preocupe com a 1ª partição, o próprio instalador cuida de criar a tabela de partições nela depois.

Quando terminar a instalação você poderá sair do QEMU e executar na máquina Host:
# mount /dev/hdb3 /mnt/lin e lá estará todo o sistema de arquivo do Debian PPC.

Acessando o SourceForge por SSH

Como sempre você faz um determinado processo, não documenta e depois tem que revazer tudo novamente e não se lembra mais.

Dessa vez irei anotar para acelerar o processo quando precisar fazer isso novamente:

Crie sua chave:

$ ssh-keygen -t dsa -C USERNAME@shell.sf.net

Onde USERNAME é o nome do seu usuário no sourceforge.

Para ver o conteúdo da sua chave publica execute:

$ cat .ssh/id_dsa.pub

Em seguida vá em https://sourceforge.net/account/ , clique em “[Edit SSH Keys for Shell/CVS]” e cole o conteúdo de sua chave pública, a chave se aparece com:

ssh-dss AAAAB3NzaC1kc3MAAAEBANn….DAroo = USERNAME@shell.sf.net

Para acessar o servidor use:

$  ssh USERNAME@shell.sf.net

Inicializar kernel Linux 2.6 sem Sysfs

Desativando o Sysfs reduzo o tamanho do kernel consideravelmente, mas o sysfs é responsável por mapear os dispositivos no /dev no kernel 2.6.

Para contornar este problema basta passar o seguinte parâmetro para o kernel:

root=0x0301

Onde 0x0301 corresponde ao /dev/hda1, modifique de acordo com o seu caso.

Outra forma de disassemblar parte de um binário

Escontrei esta outra dica na Internet:

1. Create a empty C file:
$ touch a.c
2. Compile it:
$ gcc -c -o a.o a.c
3. File b.raw is your raw binary file. Add your binary as a section <raw>
to file a.o and remove section <.comment>:
$ objcopy –add-section raw=b.raw a.o
$ objcopy -R .comment a.o
4. And disassemble it:
$ objdump -D a.o

This works for i386 binutils. I test it also with binutils for NIOS and I
need change the flags of section <raw> before disassemble it.
Run this after point 3.
$ objcopy –set-section-flags raw=CONTENTS,ALLOC,LOAD,READONLY,CODE a.o

Mas ainda não sei se esta forma é melhor ou pior que a forma anterior.

Alguma idéia? Marcelo? Fernando?

Alan

Lendo o teclado de forma não bloqueante

Se você precisa ler o teclado dentro de um laço de repetição de forma não bloqueante, então está dica é para você:

#include < stdio.h >
#include < unistd.h >
#include < termios.h >
#include < stdlib.h >
int  main (void) {
char chr;
int result;
struct termios term;
tcgetattr(STDIN_FILENO, &term);
term.c_lflag &= ~ICANON;
term.c_cc[VMIN]  = 0;
term.c_cc[VTIME]  = 1;
if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &term) <
perror("We failed to change terminal settings\n");
//Polling the keyboard
while ( 1 ) {
result =read(STDIN_FILENO, &chr, 1);
if (result ==1) {
//Do something with input
printf("%c", chr);

              	}
//Do something ”more important”
printf("."); fflush(STDIN_FILENO); } }

Source: http://users.metropolia.fi/~hannuvl/material/realtime_prog/part8.ppt