Emulando o Maemo (Diablo) no N800 com o Qemu

Como descrito no post anterior, o suporte do Qemu ao hardware do N800 permite emulá-lo. Vamos dar uma olhada nisso… ;-)

Emulando o N800 e rodando o OS 2008 (Diablo)

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
# 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

Bootstrap do N800 no QEmu

Imagem padrão da Nokia

Imagem padrão da Nokia

N800 no QEmu :-)

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-n8x0-emulation-part-ii/

14 Respostas

  1. 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.

  2. 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.

  3. Não consegui aqui, da pra fazer no Vista 64?

  4. 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🙂

  5. 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

  6. 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?

  7. 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

  8. 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😉

  9. thanks for that instruction

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: