GNU/Linux no Nintendo DS

Tive a oportunidade de ver rodando, no “irmão mais novo” do Game Boy, o Nintendo DS, o sistema operacional GNU/Linux (DSLinux).

GNU/Linux no Nintendo DS

Ainda não tive uma oportunidade de fuçar de verdade no brinquedinho, primeiro porquê não é meu, e segundo que objetivo do comprador é ficar tendo “dor de cabeça” usá-lo para o objetivo que ele foi projetado😉 De qualquer forma, estou disponibilizando algumas informações que obtive.

Especificações de Hardware

  • CPU
    • ARM9 67Mhz (para o display touch screen)
    • ARM7 33Mhz processors
  • Memory: 4MB
  • Screens:
    • Upper Screen: A backlit, 3-inch, transmissive TFT color LCD with 256 x 192 pixel resolution and .24 mm dot pitch, capable of displaying 260,000 colors.
    • Lower Screen: The same as top but with transparent analog touch screen
  • Wireless Communication:
    • 802.11
    • Nintendo’s proprietary format
  • Audio: Virtual surround sound, built-in stereo headphone / microphone jack
  • Game cartridge slots: 1 DS slot, 1 Game Boy Advance / SP slot
  • Size (closed): 133 millimeters (5.2 inches) wide, 73.9 millimeters (2.9 inches) long, 21.5 millimeters (0.85 inches) tall.
  • Weight: (with DS cartridge installed) 9 oz.
  • Power: Rechargeable lithium-ion battery, 6-10 hours continuous play depending on use per 4 hours recharging time

.

Instalação

Nesse caso, a instalação foi feita através do R4, Revoltion for DS, assista o vídeo, que permite adicionar jogos e programas de maneira “fácil”. O DSLinux é carregado como uma ROM de um jogo qualquer.

Algumas fotos

GNU/Linux on Nitendo DS

Como vocês podem ver, o teclado é uma idéia bem interessante, utilizando o recurso touch screen do dipositivo.

Teclado \……………..DSLinux Screen

Testei alguns aplicativos como o editor de textos vi, o sistema em algumas situações motrou-se instável, pelo menos a saída (fontes) no display, mas ainda não procurei saber os reais motivos. Mais fotos aqui.

dmesg

Linux version 2.6.14-hsc0ds (kineox@debian) (gcc version 4.0.4) #12 Wed Apr 2 13:01:10 CEST 2008
CPU: ARM946E [41009460] revision 0 (ARMvundefined/unknown)
Machine: Nintendo DS
Memory management: Non-Paged(unused/noMMU)
Ignoring unrecognised tag 0x00000000
On node 0 totalpages: 1024
DMA zone: 1024 pages, LIFO batch:1
Normal zone: 0 pages, LIFO batch:1
HighMem zone: 0 pages, LIFO batch:1
CPU0: D VIVT write-back cache
CPU0: I cache: 8192 bytes, associativity 4, 32 byte lines, 64 sets
CPU0: D cache: 4096 bytes, associativity 4, 32 byte lines, 32 sets
Built 1 zonelists
Kernel command line: rootfstype=romfs
PID hash table entries: 32 (order: 5, 512 bytes)
Console: colour dummy device 80×30
Dentry cache hash table entries: 1024 (order: 0, 4096 bytes)
Inode-cache hash table entries: 512 (order: -1, 2048 bytes)
Memory: 4MB = 4MB total
Memory: 1928KB available (1258K code, 265K data, 108K init)
Calibrating delay loop… 33.38 BogoMIPS (lpj=166912)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
NDS FIFO driver
NetWinder Floating Point Emulator V0.97 (double precision)
Console: switching to colour frame buffer device 64×32
fb0: Nintendo DS frame buffer device
fb1: Nintendo DS frame buffer device
Real Time Clock Driver v1.12
io scheduler noop registered
dldi: dldi1
NDS Wireless <bthaeler@aol.com>
uclinux[mtd]: RAM probe address=0x21985e4 size=0x76000
Creating 1 MTD partitions on “RAM”:
0x00000000-0x00076000 : “ROMfs”
uclinux[mtd]: set ROMfs to be root filesystem
mice: PS/2 mouse device common for all mice
nds_ts: Driver version 0.0.1 loaded
Advanced Linux Sound Architecture Driver Version 1.0.10rc1 (Mon Sep 12 08:13:09 2005 UTC).
ALSA device list:
#0: Nintendo DS sound
NET: Registered protocol family 2
IP route cache hash table entries: 64 (order: -4, 256 bytes)
TCP established hash table entries: 256 (order: -2, 1024 bytes)
TCP bind hash table entries: 256 (order: -2, 1024 bytes)
TCP: Hash tables configured (established 256 bind 256)
TCP reno registered
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
VFS: Mounted root (romfs filesystem) readonly.
Freeing init memory: 108K

Um fato que achei interessante

O Nintendo DS não tem uma unidade de gerenciamento de memória (da sigla em inglês, MMU), e tem apenas 4 MB de RAM. Para contornar essa limitação, tanto o kernel como o espaço do usuário (userspace) utilizam a técnica XIP (do inglês, execute in place) que permite executar o programa no mesmo local em que ele é armazenado; além de uma alocação de memória SLOB (que preza pela economia de espaço). Depois, surgiram expansões que ofereciam 32 MB adicionais. Contudo, adicionar suporte a essa RAM externa não foi trivial, pois o barramento do slot GBA (para expansão de memória) suporta apenas escritas de 16 bits e o sistema envia ao barramento apenas 8 bits, resultando sempre em pedaço com lixo na memória. Um desenvolvedor do DSLinux chamado Amadeus encontrou uma solução para o problema, que consiste na substituição da instrução “strb” (store byte) do assembly do processador ARM para a instrução “swpb” (swap byte). A instrução swpb primeiro lê o conteúdo do endereço requisitado, colocando na cache, então uma escrita de 8 bits é feita na cache. Mais tarde, quando a linha da cache for utilizada, uma escrita de 16 bits é efetuada, dessa forma eliminando as escritas de 8 bits no barramento. Amadeus também modificou o gerador de códigos para ARM do GCC para que as aplicações compiladas para o DSLinux agora possam usufruir das instruções swpb. A mudança no código-fonte do kernel deve ser feita através de um patch.

Conclusão

O Nintendo DS é um ótimo video game de mão, relativamente barato no mercado americano, e mais uma vez podemos provar a capacidade de adaptação do kernel do Linux nos mais variados dispositivos.

Links:

http://dslinux.org/

http://dslinux.org/amadeus/

http://arstechnica.com/reviews/hardware/dslite.ars

http://www.arm.com/markets/home_solutions/armpp/11961.html

http://www.tobw.net/dswiki/index.php?title=Ds_hardware

http://en.wikipedia.org/wiki/DSLinux

4 Respostas

  1. Putz, que legal ! Será que já tem algo assim pro Wii ? Vou procurar … (pretendo comprar um Wii pro meu filho, em breve)

  2. Ae Maluta, quando vc diz instável é eufemismo hahaha, mas ae, se tiver tempo vc brinca com a criança, mas como nao adianta muito sem a expansão de RAM, nem teria muita graça né? Falou ae

  3. eu ainda falo que a geledeira da minha mãe vai rodar linux e tem nego que acha q eu to zoando =)

  4. Q massa, pena q a microsoft naum foi inteligente e criar um “Win7DS”.
    Mas assim ta bom.
    Vou Mais no DSOrganizer!

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: