segunda-feira, 31 de março de 2014

Saiu o ganhador dos $10000 de recompensa da fundação Raspberry Pi

No final de fevereiro quando a Broadcom liberou toda documentação e código da stack gráfica do VideoCore IV, a fundação Raspberry Pi anunciou um prêmio de $10000 ( dez mil dólares ) para a primeira pessoa que demonstrasse a eles um gameplay jogável de Quake III em bons frames por segundo no Raspberry Pi utilizando drivers abertos. A competição valia para o mundo todo e finalmente temos um ganhador.

O feito foi de Simon Hall, que fez boas contribuições para a comunidade do Raspberry Pi, como por exemplo novas funções como memcpy e memset da libc otimizadas.

As instruções abaixo são uma tradução minha das instruções enviadas por Simon ao raspberrpi.org, de como ter o jogo funcionando no driver opensource. 



Tradução


Preparando o dispositivo

Você precisará:
  • Um Raspberry Pi, preferível a versão de 512MB , com a última versão do Raspbian
  • Conexão com a internet
  • Monitor capaz de exibir em 1080p
  • SD card, com mínimo 8G 

Nós precisaremos de muito espaço para compilar o kernel. A compilação irá demorar por volta de 12 horas, então será de grande ajuda se você fizer overclock. Nós precisaremos também do último firmware e os pacotes necessários para compilar o código.

Nota: Nós iremos utilizar o gcc 4.7, o código gerado será 10% mais rápido que o 4.6. 4.8 é 10% mais rápido ainda, mas não está disponível no Raspbian. Se você fizer cross-compile poderá atingir um melhor frame rate.

Entre no utilitário raspi-config com:
sudo raspi-config
 
Expanda o sistema de arquivos, configure o overclock para médio(900 MHz) e reinicie. Agora atualize com:
sudo rpi-update
Reinicie novamente. Nós precisaremos instalar alguns pacotes. Entre o seguinte comando como a seguir:
sudo apt-get -y install gcc make bc screen ncurses-dev g++-4.7 libsdl1.2-dev

Buscando o software

Entre com os seguintes comandos para baixar os softwares necessários do GitHub:
git clone --depth=1 https://github.com/raspberrypi/linux.git
git clone https://github.com/simonjhall/challenge
git clone https://github.com/simonjhall/dma
git clone https://github.com/raspberrypi/quake3.git

Construindo o kernel

Isso irá demorar cerca de dez horas com todos os módulos. Se suprimir alguns módulos que não precisará diminuirá o tempo de compilação. Entre com os seguintes comandos:
cd linux
git apply ~/challenge/kernel/patch.diff
zcat /proc/config.gz > .config
make oldconfig
make menuconfig
Entre em "general setup", selecione "local version", entre com a string "simon" e saia para o menu principal e salve. Agora compilaremos o kernel com:
make ARCH=arm

Instalando o kernel

Entre com os seguintes comandos para instalar o novo kernel:
sudo make ARCH=arm modules_install
sudo cp arch/arm/boot/Image /boot/kernel_simon.img
sudo su
echo kernel=kernel_simon.img >> /boot/config.txt
echo gpu_mem=128 >> /boot/config.txt
reboot
Quando os dispositivos inicializarem, verifique se o novo kernel foi carregado com o seguinte comando:
uname -a
Você deverá ver algo parecido com isso:
Linux raspberrypi 3.10.33simon+ #1 PREEMPT Sat Mar 22 09:49:59 UTC 2014 armv6l x

Construindo o restante

Entre com os seguintes comandos para compilar o resto do software:
cd ~/quake3
git apply ~/challenge/quake/patch.diff
./build.sh
cd ~/dma
cp ~/challenge/kernel/module/dmaer.c .
make
./install.sh
Verique se o módulo foi instalado com esse comando:
tail /var/log/kern.log
Você deverá ver algo similar a isso:
Mar 23 15:22:45 raspberrypi kernel: [ 20.814750] smsc95xx 1-1.1:1.0 eth0:lin1
Mar 23 15:22:45 raspberrypi kernel: [ 21.376702] bcm2835-cpufreq: switching td
Mar 23 15:22:45 raspberrypi kernel: [ 21.376710] bcm2835-cpufreq: switching td
Mar 23 15:22:46 raspberrypi kernel: [ 24.472575] Adding 102396k swap on /var/S
Mar 23 15:25:02 raspberrypi kernel: [ 143.984835] 20c00000 f2c00000 deadbeef
Mar 23 15:25:02 raspberrypi kernel: [ 143.984866] major device number 248
Mar 23 15:25:02 raspberrypi kernel: [ 143.984890] vma list size 12, page list 6
Mar 23 15:25:02 raspberrypi kernel: [ 143.984909] allocated dma channel 4(f208
Mar 23 15:25:02 raspberrypi kernel: [ 143.985242] qpu ENABLED
Mar 23 15:25:02 raspberrypi kernel: [ 143.985264] V3D identify test: V3D versi2

Agora entre com os seguintes comandos:
cd ~/challenge/source
make
sudo make install

Configurando o jogo

Primeiro de tudo você precisa garantir que você tem os arquivos data do Quake 3 Arena no seu Raspberry Pi. Você precisará dos arquivos pak instalados. Existem várias maneiras de se fazer isso, você pode transferir de outra máquina com o comando SCP ou copiar eles por um pen drive. Copie os arquivos em uma pasta chamada "baseq3". Deverá conter os arquivos pak numerados de 0 a 8 (ex pak1.pk3).
Entre com os seguintes comandos:
sudo mkdir /root/.q3a
sudo mv baseq3/ /root/.q3a/
cd ~/quake3/build/release-linux-arm/
sudo mknod char_dev c 100 0
sudo cp ~/challenge/quake/demo.cfg /root/.q3a/baseq3/

Rodando o jogo

Entre no diretório do jogo com o seguinte comando:
cd ~/quake3/build/release-linux-arm/
Rode o jogo com esse comando:
sudo ./ioquake3.arm +exec demo
Se você quiser jogar novamente após religar o sistema, você precisará rodar os seguintes comandos para recarregar os arquivos necessários:
cd ~/dma
./install.sh
Se você perceber pequenas pausas no jogo, isso é porque o sistema está utilizando o swap.  Você poderá ver isso rodando o comando "top" ao mesmo tempo e verificando o uso do swap durante os lags. Feche alguns programas que estão rodando para aliviar o problema. Rode o jogo sem o gdb e carregue o mínimo de módulos no kernel para previnir o swap.

Fim da tradução

 

Notas do EverPi

 

Compilar um kernel dentro do Raspberry Pi é um trabalho muito árduo, aos usuários mais hardcore aconselho realmente criar um crosscompiler em seu desktop para o trabalho.
A questão do jogo quake até onde me recordo somente a engine é opensource, para se ter os arquivos data você necessitava comprar o jogo.

Parabéns a Simon Hall.

Fonte:  http://www.raspberrypi.org/archives/6561


2 comentários:

  1. Respostas
    1. Infelizmente ainda não saiu nenhum benchmark, logo que sair atualizarei o post.

      Excluir