Como descrito no post anterior, o suporte do Qemu ao hardware do N800 permite emulá-lo. Vamos dar uma olhada nisso… ![]()
Como é necessário fazer algumas modificações no código do Qemu para rodar a última versão (Diablo) vamos fazer o download do Qemu no repositório do projeto (o mantenedores do projeto migraram para o “git” nesse mês)
1. Instalando o QEmu
# cd ~/qemu-n800 # git clone git://git.savannah.nongnu.org/qemu.git
Para rodar a última versão do Maemo (Diablo) é necessário alterar a tabela de partições:
# cd qemu # git checkout -b n800-diablo # wget http://tinyurl.com/cuyx4s # git apply 0001-Resized-N800-partition-table.patch # cd ~/qemu-n800 # mkdir build install # cd build # ../qemu/configure \ --target-list="arm-softmmu arm-linux-user armeb-linux-user" \ --prefix=$(cd ../install && pwd) # make # make install # ../install/bin/qemu-system-arm -h | head -n 1 QEMU PC emulator version 0.10.50, \ Copyright (c) 2003-2008 Fabrice Bellard
2. Download Nokia N800 Maemo Firmware
- Vá até o endereço http://maemo.org/community/wiki/HOWTO_FlashLatestNokiaImageWithLinux/
- Faça o download selecionado a versão apropriada (Software Edition 2008 version 5.2008.43-7 for Nokia N800)
Observação: Isso é um ponto que me incomodou, infelizmente você irá precisar de um serial number do N800 — se você não tem um Nokia N800 agora é o momendo para adquirir um… Como não investiguei as considerações legais a respeito (nem se é uma violação a GPL). E como não vi ninguém na internet disponibilizando, por enquanto não vou disponibilizar a minha.
- Firmware em http://tablets-dev.nokia.com/nokia_N800.php (N800)
- mkdir ~/qemu-n800/os2008/
- Irei considerar o nome RX-34_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin
- Faça o download do Nokia Nseries Firmware Flashing Tool version 3
- Link em http://tablets-dev.nokia.com/d3.php
- Salve em ~/qemu-n800
- Esse ponto é importante, você irá precisar reinstalar (faça o backup dos seus dados!) o sistema no seu N800 para pegar alguns dados de configuração de uma partição do N800, o comando que utilizei para gravar a flash está descrito no item 3)
3. Atualizando o firmware no dispositivo
- Certifique-se que a bateria esteja carregada e deslige o N800.
- Conecte o cabo USB (não ligue o aparelho)
- Execute o comando abaixo, para emular o N800 é preciso setar uma flag que os desenvolvedores utilizam quando estão desenvolvendo. (Leia o item [3] no final para maiores informações)
# mkdir ~/qemu-n800/os2008/diablo/ # cd ~/qemu-n800/os2008/diablo/ # ../../flasher-3.0 --set-rd-flags=no-lifeguard-reset \ -u -R -f -F ../RX-34_DIABLO_5.2008.43-7_PR_COMBINED_MR0_ARM.bin
SW version in image: RX-34_DIABLO_5.2008.43-7_PR_MR0
(...)
Unpacking kernel image to file \'zImage\'...
Unpacking initfs image to file \'initfs.jffs2\'...
Unpacking rootfs image to file \'rootfs.jffs2\'...
(...)
Suitable USB device not found, waiting
- Pressione o botão Power e Home e mantenha-os até o fim do processo. Lembre-se que seu usuário irá precisar de ter permissão para escrever na USB ou então utilize o “root”.
USB device found found at bus 002, device address 007 Found device RX-34, hardware revision 1302 NOLO version 1.1.16 Version of \'sw-release\': RX-34_DIABLO_5.2008.43-7_PR_MR0 Sending xloader image (8 kB)...100% (8 of 8 kB, avg. 2218 kB/s) Sending secondary image (96 kB)... 100% (96 of 96 kB, avg. 12093 kB/s) Flashing bootloader... done. Sending kernel image (1500 kB)... 100% (1500 of 1500 kB, avg. 17449 kB/s) Flashing kernel... done. Sending initfs image (2273 kB)... 100% (2273 of 2273 kB, avg. 19264 kB/s) Flashing initfs... done. Sending and flashing rootfs image (134912 kB)... 100% (134912 of 134912 kB, avg. 7369 kB/s) Finishing flashing... done Set R&D flags: 0008
No meu caso ele não reiniciou automaticamente, precisei desconectar o cabo usb e desligá-lo/ligá-lo para funcionar.
4. Preparando os arquivos
Note que além do dispositivo gravado seu diretório conterá alguns arquivos (~/qemu-n800/os2008/diablo):
2nd.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602 secondary.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602 xloader.bin-RX-34:1301,1302,1501,1502,1503,1504,1601,1602 initfs.jffs2 rootfs.jffs2 zImage
- Intale o “Poky Linux” Project’s Flash Filesystem Tool
- # cd ~/qemu-n800
- # svn cat http://svn.o-hand.com/repos/poky/trunk/scripts/poky-nokia800-flashutil > poky-nokia800-flashutil
- chmod +x poky-nokia800-flashutil
- Edite o arquivo poky-nokia800-flashutil e descomente a linha referente ao rootfs_offset
# This value should be selected for Diablo based firmwares # It also require patching qemu to get proper size of flash partitions # (by default qemu has Chinook split). rootfs_offset=3328 # diablo
- Extraia a partição de configuração do seu Nokia N800
- Você irá precisar instalar algum servidor SSH, disponível pelo Gerenciador de aplicativos, com o catálogo maemo Extras ativado .
- mkdir ~/qemu-n800/qemu-img
- ssh root@<N800 IP> cat /dev/mtd1ro > config.mtd
- recomendo instalar também o aplicativo HomeIP para verificar seu endereço.
- Utilizaremos o “Poky Linux” Project’s Flash Filesystem Tool para criar um sistema de arquivos para o sistema emulado:
# cd ~/qemu-n800/qemu-img #../poky-nokia800-flashutil ../os2008/diablo/initfs.jffs2 \ qemu-n800.img initfs #../poky-nokia800-flashutil config.mtd qemu-n800.img config #../poky-nokia800-flashutil ../os2008/diablo/rootfs.jffs2 \ qemu-n800.img rootfs
- Inicie o Qemu com as seguintes opções:
# cd ~/qemu-n800/qemu-img # ~/qemu-n800/qemu/install/bin/qemu-system-arm \ -kernel ../os2008/zImage -M n800 \ -mtdblock qemu-n800.img \ -m 130 \ -append "root=/dev/mtdblock3 rootfstype=jffs2"
Para fazer o teclado funcionar adicione no final do comando: -usb -usbdevice keyboard

Bootstrap do N800 no QEmu

Imagem padrão da Nokia

N800 no QEmu
5. Considerações e Futuro
- A emulação mostrou-se um pouco lenta. Na primeira vez que bootou senti meio devagar, mas nos outros boots achei até que razozável a velocidade.
- Preciso arrumar uma forma de colocar um “‘ponteiro” para a caneta stylus, pois embora o mouse funcione ele não mostra a posição na tela.
- A alteração no código do Qemu foi específica para a ultima versão do OS 2008 (Diablo), acredito que o Qemu irá incorporar um maneira para permitir multiplas versões do Maemo sem precisar alterar o código.
- Configurar a rede.
6. Recomendo ler o que já foi publicado a respeito
[1] http://www.rkeene.org/projects/info/wiki/106
[2] http://marcin.juszkiewicz.com.pl/2008/04/11/nokia-n800-emulation/
[3] http://marcin.juszkiewicz.com.pl/2008/08/01/nokia-n8×0-emulation-part-ii/
Arquivado em: Linux, Sistemas Embarcados, embedded | Etiquetado: Linux, nokia, n800, maemo, qemu


Oia! Eu bem que queria um brinquedinho desse jeito, pois comprar uma placa de desenvolvimento é cara e não dá pra ficar levando de um lado para outro, hehehe
Por acaso achei alguns reclamando de problemas no lote da Submarino de N800, fiquei com a pulga atrás da orelha e espero que façam um ajuste nisto, ou que sua atualização acabe com esse problema.
Como faço para copiar arquivos para a imagem, não consigo montar, já usei o seu tutorial para montar jffs2 e não funcionou, estou tentando copiar o easyroot para a imagem e configurar o usb net para acessar a rede. Se puder me ajudar ficarei agardecido.
Para montar usei o comando descrito no post do JFFS2.
O initfs.jffs2 foi sem problemas, mas o rootfs.jffs2 que tem 132 MB temos um problema com o tamanho máximo disponível que o módulo mtdram consegue alocar. O maior valor que consegui está por volta dos 109MB (irei verificar uma solução para isso assim que tiver um tempinho sobrando). Após montado, pode pode alterar arquivos e usar o utilitário mkfs.jffs2 para “fechar” a imagem. Agora quanto a sua idéia de copiar o easyroot você irá precisar de um jeito para gerar o .bin se quiser gravar no N800 ou então pode fazer os testes no qemu.
Não consegui aqui, da pra fazer no Vista 64?
Oi Eder,
Não conseguiu especificamente o quê?
Para emular recomendo utilizar uma distribuição GNU/Linux como o UBuntu [1] ou Fedora [2]. Embora nunca tenha tentado no Windows, talvez com o cygwin [3] seja “possível”, mas concertamente você terá que tratar algumas incompatibilidades.
[1] http://www.ubuntu.com/
[2] http://fedoraproject.org/
[3] http://www.cygwin.com/
Aiai… pena que aqui em casa ninguem deixa eu instalar linux…
mas vou fazer assim… Windows XP 64 / qemu com slackware / qemu com n800 …
ahuahuaa vou grava e fazer um tuto filmado
Galera é impressão minha ou o esquema pra emular realmente necessita de um N800 na mão?
Você pode emular o hardware no N800 sem problemas. O problema que encontrei está na hora de emular o Maemo (OS 2008).
Dê uma olhada no seu qemu:
#qemu-system-arm -M ? | grep n800
esse comando não funciona
../qemu/configure \ –target-list=”arm-softmmu arm-linux-user armeb-linux-user” \ –prefix=$(cd ../install && pwd)
Retorna isso aqui…
ERROR: unknown option –target-list=arm-softmmu arm-linux-user armeb-linux-user
ERROR: unknown option –prefix=/home/terabytes/qemu-n800/install
…
tem algo errado ai?
Veja como está o “–target-list” o certo é “- -target-list” (dois hifens juntos) e a mesma coisa para o prefix.
puts… tá vendo o que a preguiça faz… fui copiar o código e ele converteu pra um traço só… foi mals … preguiça minha :/
vlw
Nossa tiago deu certo aqui,
tive que trocar essa linha:
#../poky-nokia800-flashutil config.mtd qemu-n800.img config
por essa:
#../poky-nokia800-flashutil ../config.mtd qemu-n800.img config
e essa:
# ~/qemu-n800/qemu/install/bin/qemu-system-arm \
por essa:
# ~/qemu-n800/install/bin/qemu-system-arm \
não sei se foi erro meu mas no fim funcionou… funciona muito lendo mesmo…
Só me diz uma coisa como tu usa o mouse? aqui ele desaparece e não dá pra clicar, to usando xfce será que pode ser isso? pior que não tenho outro WM pra testar… :\
Com relação as pastas, depende do local onde seus arquivos estão. Agora sobre o mouse, nos meus testes eu consegui clicar como se fosse uma tela touchscreen, ou seja, sem ver o ponteiro. Sei que tem alguns patches p/ fazer esse recurso funcionar, mas ainda não testei, logo o problema não está no seu xfce