August 19th, 2008 — en, pro
As some of you already know Lauro Venâncio maintains a version of qemu with a set of patches that provides arm-eabi compatibility (which is needed if you want to build/use PyMaemo in Scratchbox). He does so because many of these patches where not yet accepted upstream and the world can not wait.
The version of qemu-arm-eabi in the sourceforge repository included the full source of qemu from its cvs with the patches already applied. Since the qemu source was a bit old (the current version uses svn) I spent some time updating Lauro’s qemu-arm-eabi. Now the sourceforge repository includes only the patches and a script to checkout qemu source from its own svn and apply the patches with quilt. There are also scripts to build and install the qemu-arm-eabi in scratchbox.
But nobody expects that a new bug would crawl in. When running a program through fakeroot and that program tries to call popen libfakeroot will not be found. I find out that the problem was in the fakeroot-tcp script that was using ‘,’ as separator in the environment variable
. This works with the qemu versions provided by scratchbox, but not with our patched version. I take a look at the scratchbox patches and other places for the source of the problem and found nothing. Since my time to deal with this was limited I just changed ‘
‘ to ‘
‘ in
. This worked fine when you do ”
fakeroot ./progthatusespopen
” but Jesus couldn’t do a ”
dpkg-buildpackage -rfakeroot
“. Caio (from Canola fame) solved this by removing the separator and the second item of the
variable.
The fix described is not the best but works for now. If you have any idea on how to solve this in a proper way your help is appreciated.
Instructions on how to install in the qemu-arm-eabi wiki.
March 15th, 2008 — pro, pt
Direto do Departamento da Preguiça: transformei aquelas instruções de instalação do qemu-arm-eabi num script, de forma que basta pegar e rodar o install_qemuarmeabi.sh que ele baixa, compila e instala o treco em cada um dos targets armel do scratchbox.
Se não quiser instalar, rode o script com a opção
.
November 20th, 2007 — pro, pt
Se você está usando o PyMaemo deve ter reparado na mensagem de erro
"sem_post: Function not implemented"
quando chama o Python2.5 no target ARMEL do Chinook. Isso tem a ver, entre outras coisas, com funcionalidades não implementadas na versão do Qemu usada no Scratchbox. O Lauro Venâncio reuniu os patches necessários pra modernizar esse bicho, criou um projeto no SourceForge e pretende mantê-los sincronizados com o head do CVS do Qemu até os caras se dignarem a implementar as melhorias.
Se você quer usar o Qemu ARM EABI em seu Scratchbox, siga as instruções abaixo. Lembre de fechar quaisquer seções abertas do Scratchbox.
Compilar o Qemu ARM EABI
Na máquina host, instale o gcc-3.4 e baixe o qemu com os patches já aplicados.
$ sudo apt-get install gcc-3.4
$ svn co https://qemu-arm-eabi.svn.sourceforge.net/svnroot/qemu-arm-eabi/trunk qemu-arm-eabi
$ cd qemu-arm-eabi
$ ./configure --target-list=arm-linux-user --static
$ make
Update: o luck sentiu falta da zlib no processo de compilação:
Update 2: o lauro resolveu organizar o repo dele, criando branches, tag e trunk. As instruções acima foram atualizadas.
Instalar no Qemu ARM EABI no Scratchbox
Como se pode ver, o binário gerado foi linkado estaticamente, então nada de dependências cabulosas, basta copiar para o lugar certo:
$ sudo cp arm-linux-user/qemu-arm /scratchbox/devkits/cputransp/bin/qemu-arm-eabi-sb2
Edite o cputransp-methods:
$ sudo vim /scratchbox/devkits/cputransp/etc/cputransp-methods
e adicione a linha:
Depois edite o arquivo config do seu target (ou dos targets) ARMEL:
vim /scratchbox/users/USERNAME/targets/SDK_ARMEL.config
e altere a variável do método de transparência do CPU para:
SBOX_CPUTRANSPARENCY_METHOD=/scratchbox/devkits/cputransp/bin/qemu-arm-eabi-sb2
Veja também:
October 19th, 2006 — pro, pt
Agora no Windows(TM):

Funcionou como devia. Recapitulando o que é necessário:
Mais tarde vou investigar o Py2Exe pra gerar um executável pro Win32 com todas as DLLs embutidas. Claro que vai ficar enorme, mas hei, banda larga está aí e seu HD é enorme, e acredite em mim quando digo que é menos chato um grande download do que vários downloads e instalações pra chegar num programinha simples.
E quem já tem essas coisas instaladas sempre vai poder baixar o arquivo .py
Até lá Lauro e eu destemidamente aprimoraremos o portemu pra tentar uma inclusão na disciplina de IHS. Isso se eles já não mudarem pra USB no próximo período… mas aí mudamos também. =D
October 15th, 2006 — pro, pt
Meio caminho andado com a interface PyGTK para brincar com as portas serial e paralela emuladas pelo QEmu.
Aqui vai uma foto de um teste, a janela de trás é o infame, mas muito útil, debug DOS (nesse caso, FreeDOS), enviando e recebendo alguns bytes via porta serial.

A interface é bem simples e (espero) intuitiva, e o programa não foi pensado para ser super poderoso, só pra ajudar na prototipagem básica envolvendo as portas do PC. Só vou falar sobre os botões no alto: o primeiro inicia e pára o QEmu com os parâmetros que redirecionam as portas serial e paralela para sockets tcp. Bem, esse botão ainda não está funcionando! ;P É preciso iniciar o QEmu antes:
qemu freedos.img -no-kqemu -localtime -serial tcp::4444,server,nowait
Como se pode notar a porta paralela não é redirecionada, somente a serial. Hmmm… “Release Early, Release Often!” e saia correndo.
Também é necessária uma imagem do FreeDOS, como essa:
http://fabrice.bellard.free.fr/qemu/freedos.img.bz2
Outro detalhe a versão necessária do QEmu é a 0.8.2, que no Ubuntu está disponível a partir do Edgy, ou você pode baixar do site do QEmu, cujo endereço está no meu último post.
Resumão para usar: instale o QEmu 0.8.2, rode-o com a imagem indicada acima, usando a linha indicada mais acima ainda, rode o PortEmu, clique no botão QEmu, depois no botão Conectar, e comece a brincadeira. =D
Baixe aqui: http://www.cin.ufpe.br/~mls/portemu http://code.google.com/p/portemu
October 10th, 2006 — pro, pt
Com uma imagem do Freedos, um cliente telnet e essa linha
qemu.exe -L . -m 128 -hda freedos.img -soundhw all -localtime -serial telnet::4444,server,nowait
pude pegar a saida da porta 3f8 (serial). Quando acabar o Drama do Servidor Bastardo do Inferno no meu trabalho, voltarei a isso, com uma interface bunitinha em PyGTK.
Na linha do QEmu, alguns parâmetros são dispensáveis (copiarcolar;), o que importa é
-serial telnet::4444,server,nowait
E a linha de invocação do telnet
telnet localhost 4444
Alguns links relevantes: