Nintendo DS und Linux

Transcription

Nintendo DS und Linux
Nintendo DS und Linux
Kai Lauterbach
22.12.2005
v 0.92
Released under GNU FDL
http://www.gnu.org/copyleft/fdl.html
This document is powered by LATEX 2ε .
1
Inhaltsverzeichnis
1
Einleitung
4
2
Hardware
2.1 Technische Daten . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Allgemeine Informationen . . . . . . . . . . . . . . . . . . . . .
5
5
5
3
Software
3.1 BIOS . .
3.2 Firmware
3.3 NDS . . .
3.4 GBA . . .
4
5
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6
6
6
7
7
Passthrough / xxxMe
4.1 Passthrough . . .
4.1.1 PassMe .
4.1.2 WifiMe .
4.1.3 FlashMe
4.1.4 PassMe2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
8
8
9
9
Zusatzhardware
5.1 Speicherkarten (FlashCard)
5.2 Movie Player (GBAMP) .
5.3 SuperCard . . . . . . . . .
5.4 Speichererweiterung . . .
5.5 GPS . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
10
10
10
11
11
11
DSLinux
6.1 µClinux . . . . . . . . . . . . .
6.1.1 Kernel . . . . . . . . . .
6.1.2 Userland . . . . . . . .
6.2 Imagedateien . . . . . . . . . .
6.2.1 .gba . . . . . . . . . . .
6.2.2 .ds.gba . . . . . . . . .
6.2.3 .nds . . . . . . . . . . .
6.2.4 .nds.gba . . . . . . . . .
6.3 Howto compile µClinux . . . .
6.4 Andere Projekte um den NDS .
6.4.1 dsdev.org . . . . . . . .
6.4.2 devkitPro und die libnds
6.5 Ausblick in die Zukunft . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
12
13
13
13
13
13
14
15
15
15
16
.
.
.
.
.
.
.
.
.
.
.
.
2
7
Anhang
7.1 Kosten . . . . . . . . . . . . . . .
7.2 Zeitlicher Ablauf der Entwicklung
7.3 Quellen . . . . . . . . . . . . . .
7.4 Abbildungen . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
16
16
16
19
20
8
Schlusswort
31
9
Danksagung
31
Abbildungsverzeichnis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Nintendo DS geöffnet . . . . . . . . . . . . . .
Nintendo DS geschlossen. . . . . . . . . . . .
SL1 . . . . . . . . . . . . . . . . . . . . . . .
Health Screen . . . . . . . . . . . . . . . . . .
PassMe . . . . . . . . . . . . . . . . . . . . .
PassMe mit NDS-Game . . . . . . . . . . . . .
PassMe2 . . . . . . . . . . . . . . . . . . . . .
Verbindungspunkte für die serielle Schnittstelle
PassMe mit serieller Schnittstelle . . . . . . . .
PassMe mit USB Schnittstelle . . . . . . . . .
JTAG Belegung . . . . . . . . . . . . . . . . .
NDS mit GPS Antenne . . . . . . . . . . . . .
GPS Screen auf NDS . . . . . . . . . . . . . .
Verschiedene GBA FlashCard’s . . . . . . . . .
GBA Supercard . . . . . . . . . . . . . . . . .
GBA MoviePlayer . . . . . . . . . . . . . . .
NDS Memory Extension . . . . . . . . . . . .
NDS Memory Extension (voll bestückt) . . . .
NDS mit Memory Extension . . . . . . . . . .
Layout für NDS Memory Extension v2 . . . . .
NDS Memory Extension v2 im Gehäuse . . . .
3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
21
21
21
22
22
23
23
24
24
25
25
26
26
27
27
28
28
29
29
30
1
Einleitung
In diesem Artikel geht es um den Nintendo DS (Abbildung 1) und die Portierung
des Linux Kernels.
Der Nintendo DS ist auf dem deutschen Markt seit März 2005 erhältlich,
in Japan und den USA seit Mai 2004. Er ist laut Nintendo nicht der direkte Nachfolger des Gameboy Advanced SP, wobei man ihn als diesen bezeichnen könnte.
Der Name des Nintendo DS kommt von den beiden Bildschirmen, DS bedeutet
hier Double Screen.
Das Spielgefühl an sich wird durch das 2. Display nicht großartig beeinflusst. Der
untere Bildschirm, welcher mit dem neuen Touchscreen ausgestattet worden ist,
wird in den meisten Spielen nur als Übersichtskarte und / oder analoges Steuerkreuz verwendet. Der finger mit dem der Touchscreen bedient, verdeckt also die
meiste Zeit die Sicht.
Zudem nimmt das Display durch die Verwendung schnell Gebrauchsspuren an,
wobei Nintendo hat das Problem mit den Kratzern schon vor der Veröffentlichung
erkannt hat. Als optional erhältliches Zubehör sind entsprechende Schutzfolien (2
Stück je Packung) erhältlich. Neben dem Touchscreen hat Nintendo noch ein Microfon eingebaut, dass zur Sprachsteuerung dienen soll.
Alles in allem glänzt der NDS durch seine Robustheit und Acculaufzeit. Zudem ist
die Tatsache, dass ein Gameboy Advanced im Gerät mit enthalten ist ein Vorteil,
da man die alten GBA Spiele nicht in einem anderen Gerät spielen muss. Aufgrund
dessen kann man mit ein bißchen Aufwand sogar ein Linux auf dem Gerät laufen
lassen.
4
2
2.1
Hardware
Technische Daten
Abgesehen von Nintendos Vermarktungs und Verkaufs-Strategien ist der
Nintendo DS eine interessante Plattform mit den folgenden Eigenschaften.
• CPU ARM7 33 MHz (32-bit RISC; 130 MIPS)
• CPU ARM9 66 MHz (32-bit RISC; 300 MIPS; MPU, keine MMU)
• 4MB RAM
• 2D/3D Grafik
– 60 Frames/Sekunde
– 656 KB RAM
– maximal 262144 Farben gleichzeitig
– 120k Polygone/Sekunde
– 30M Polygone/Sekunde Pixelfüllrate
• 8 Tasten (Start; Select; A; B; X; Y; R; L)
• 2 LCD’s
– max. Auflösung 256x192
– Hintergrundbeleuchtung
– Touchscreen im unterem Bildschirm
• WLAN IEEE802.11 kompatibel
• 2 Cardslots (NDS & GBA)
• 16 Bit Stereo Sound
• Internes Microfon
• Kopfhörer Ausgang
2.2
Allgemeine Informationen
Das WLAN ist auf 10 Meter Reichweite und 2 Mbit beschränkt, und die Acculaufzeit beträgt ca. 8 Stunden.
Die Grafikhardware erzeugt, dank der neu entwickelten 3D Engine, Bilder die die
des Nintendo 64 übertreffen. Effekte wie Cell Shading und Nebel, und dies bei 60
Frames / Sekunde.
Das Timing der Displays ist mit dem NTSC Standart kompatibel.
5
Der Nintendo DS muss zur Verwendung aufgeklappt werden, so das die Displays
beim Transport geschützt sind (Abbildung 2). Zudem wird beim zuklappen der
Energiesparmodus aktiviert, der aber von dem aktuell laufendem Programm unterstützt werden muss.
Eine Realtime Clock (RTC) und ein Wecker sind auch vorhanden, der jedoch über
die Nintendo Firmware explizit eingeschaltet werden muss. Das Problem dabei ist,
dass das NDS nicht abgeschalten werden darf, da sonst der Wecker wieder inaktiv
geschaltet wird.
3
Software
3.1
BIOS
1. Original GBA : Original Gameboy Advanced Bios
(Kein Zugriff aus dem DS-Modus möglich.)
2. DS ARM7 : Startadresse 0x00000000
(Die ersten 0x1205 Bytes sind Readonly)
3. DS ARM9 : Startadresse 0xFFFF0000
3.2
Firmware
1. In SPI Data Flash Chip gespeichert (256KB Speicherkapazität).
2. Der Code der Firmware ist verschlüsselt im Chip abgelegt und wird beim
laden in den RAM durch das BIOS entschlüsselt.
3. Es beinhaltet das Bootmenü und den Pictochat.
4. Die ersten 64 KB sind schreibgeschützt. Dieser Schreibschutz kann durch
das überbrücken eines dafür vorgesehenen Pins auf dem Mainboard temporär
entfernt werden (Abbildung 3).
5. 5 verschiedene Versionen sind bereits von Nintendo ausgeliefert worden. Bei
den letzten beiden ist das starten von nicht zertifiziertem Code bis jetzt sehr
umständlich.
6. Die letzte Version der Firmware (512KB) beinhaltet Code, um ein umgehen
der Sicherheitsrichtlinien zu verhindern.
7. Es werden zudem Benutzerdaten wie Systemsprache, Lieblingsfarbe, Alarm,
Touchscreen Kalibrierung etc. gespeichert.
8. Der Health Screen (Abbildung 4) ist auch in der Firmware abgelegt.
Mit dem in der Firmware enthaltenen PictoChat, kann mit mehreren NDS per Text
und Bild über WLAN kommuniziert werden, man beachte hierbei die Rechweite
der WLAN Hardware und die Flüchtigkeit der übertragenen Daten.
6
3.3
NDS
In diesem Modus können beide Bildschirme, der Touchscreen, die 3D Hardware
sowie WLAN verwendet werden. Die GBA Hardware wie z.B. die ARM7 CPU
muss explizit aktiviert werden. Sie ist im Normalfall inaktiv um Strom zu sparen.
3.4
GBA
Im GBA-Modus kann nur jeweils auf ein LCD zugegriffen werden, welches über
die Nintendo Firmware durch den User festgelegt wird. Der Touchscreen und die
WLAN-Hardware ist deaktiviert und Powernanagement ist nicht möglich. Die Speierkapazität einer original GBA Spielekarte variiert.
Backup Speicherkarten sind z.Z. bis zu einer Größe von 4 GBit verfügbar. Zudem
gibt es Supercards mit der Möglichkeit SD/MMC und CF 1 Karten zu verwenden.
Das Maximum liegt hierbei bei ca. 4GB.
4
Passthrough / xxxMe
4.1
Passthrough
Die so genannte Passthrough-Methode wird benötigt, da das DS BIOS die Kommunikation zwischen der DS-Card und dem DS verschlüsselt. Dies verhindert das
ausführen von nicht Verschlüsseltem1 Code.
Die Passthrough-Hardware protokolliert die meiste Zeit die Kommunikation zwischen den beiden Komponenten, dem NDS und der DS-Card. Wenn der Header
von der Karte zum NDS übertragen wird, was meist nach einem Reset2 der DSCard geschieht, wird dieser entweder ersetzt oder modifiziert.
Die veränderung besteht darin, dass die ARM7 execute-Adresse3 auf
0x80000C0 gesetzt wird, welche die Adresse des GBA Cardslots ist. Zudem wird
die Prüfsumme im Header angepasst.
Mit dieser Methode kann ARM9 Code nicht direkt ausgeführt werden, da das
BIOS die Priorität auf die ARM7 CPU setzt. Die ARM9 CPU wird mit einer kleinen Schleife beschäftigt, die mit dem folgenden Code unterbrochen werden kann.
*(volatile uint32 *)0x027FFE24 = 0x02004000;
1
Die Verschlüsselung wurde noch nicht geknackt, und es existiert noch keine bekannte Backdoor.
Z.B. beim einschalten des NDS.
3
Die execute-Adresse ist die Adresse an der der auszuführende Code abgelegt ist.
2
7
4.1.1
PassMe
Diese Variante (Abbildung 5) besteht aus einer Platine auf der ein Chip aufgelötet
ist, dieser CPLD4 ist meist von der Firma XilinX. Die Platine wird zwischen den
NDS und dem NDS Game platziert (Abbildung 6). Durch diesen Aufbau bedient
sich der PassMe an der Passthrough Technick.
Der PassMe wird über eine JTag Schnittstelle (Abbildung 11) programmiert5 , welcher meist aus einem Parallelem Kabel besteht. Der PassMe kann, je nach Bedarf, um eine USB, USB2, Bluetooth oder RS232 Schnittstelle erweitert werden
(Abbildung 8, 9 und 10).
4.1.2
WifiMe
Hierbei wird auf einem Rechner mit einer WLAN Karte ein NDS Host
emuliert. Dieser emulierte Host sendet Pakete, die für das bestehen des Host benötigt werden. Auf dem Client DS wird über die Nintendo Firmware der emulierte
Host ausgewählt. Nach der Abfrage ob das Programm gelanden werden soll werden weitere Pakete vom Host übertragen, die den Header des zu übertragenden
Programmes enthalten. Hier wird wieder die execute Adresse so gesetzt das sie auf
den GBA-Kartenslot zeigt.
Daraufhin wird der der NDS Code aus dem eingelegten Speichermedium geladen.
Die Kommunikation zwischen zwei unveränderten NDS geschieht normalerweise
über eine 1024 Bit verschlüsselte Verbindung. Bis jetzt wurde diese Verschlüsselung nicht gehackt.
Die Paket-Daten, die zwischen den kommunizierenden NDS übertragen werden,
sind in einem Nintendo spezifischen properitären Format aufgebaut und sogar je
nach Spiel unterschiedlich. Allein der IEEE802.11 Header in den Paketen ist Standardisiert.
Im Moment ist ein WifiMe nur mit Windows XP möglich, da keine freie und dokumentierte Software existiert. Es gibt jedoch ein Projekt, dsmultiboot, für Linux.
Dieses Projekt kann jedoch noch keine Homebrew Software booten lassen.
4
5
Detailierte Beschreibung http://en.wikipedia.org/wiki/CPLD
Durch die Verwendung eines CPLD der Firma XilinX muss zum Programmieren die von XilinX
kostenlos bereitgestellte Entwicklungssoftware verwendet werden.
8
4.1.3
FlashMe
Beim FlashMe wird die Firmware des NDS durch eine modifizierte Version
ersetzt. Dazu muss SL1 (Abbildung 3) überbrückt werden und das Flashprogramm
über einen xxxMe ausgeführt werden. Die neue Firmware kann nun direkt NDSCode aus dem GBA Slot starten, falls dort welcher gefunden wird.
Mit den neuen Firmware werden sämtliche Sicherheitsmechanismen deaktiviert,
die ein Ausführen von nicht Nintendo zertifizierter Software verhindern soll.
4.1.4
PassMe2
In den letzten beiden Firmware-Versionen des Nintendo DS wurden verschiedene vorkehrungen getroffen um die Passthrough Methoden unmöglich zu machen.
Daraufhin wurde der PassMe2 entwickelt der diese Mechanismen umgeht.
(Abbildung 7)
Der PassMe2 ist im Gegensatz zu dem 1. PassMe unflexibel, was an der im folgendem Text beschriebenen neuen Funtionsweise liegt.
Nachdem der NDS eingeschalten worden ist, wird zwischen dem NDS und dem
NDS-Game bzw. der Gamecard, wie bei dem 1. PassMe, zunächst der Header ausgetauscht. Nach der Authentifizierung leitet der PassMe2 den NDS auf einen SWI6
Call, in die 4MB RAM des NDS um, in dem die Daten des eingelegten Spiels bereits geladen worden sind.
Dieser SWI Call springt dann in den SRAM auf dem GBA Port. Das ist der Grund,
warum der PassMe2 für ein spezielles Spiel programmiert sein muss. Im SRAM
der eingelegten GBA Flashkarte steht dann die Adresse des GBA Port, zu der dann
gesprungen wird. Auf dem eingelegten Speichermedium, der GBA FlashCard, ist
der Homebrew Code abgelegt.
6
An SWI is an ARM machine instruction that causes the processor to jump to a special location
in memory (the BIOS). It indexes into an array of addresses using the number provided
following the SWI and jumps to that routine.
9
5
Zusatzhardware
5.1
Speicherkarten (FlashCard)
Bis jetzt sind Karten mit einer Maximalgröße von 4 GBit7 auf dem Markt
(Abbildung 15). Diese sind vollständig mit dem NDS und GBA kompatibel. Auf
was man achten sollte, ist das die Karte eine eigene Knopfzelle als Energiequelle
besitzt um den Accu des NDS möglichst zu schonen. Zudem ist dieser Accu für
den fortbestand der Savegames nach dem Abschalten von Vorteil.
Desweiteren muss bei der meisten Software, welche leider ausschließlich für Windows verfügbar ist, darauf geachtet werden jegliche Features abzuschalten, die bei
der Verwendung von ROM’s benötigt werden. Diese Features wie der ROM-Loader
oder die Cheatertools verhindern das Laden von Homebrew8 Software.
5.2
Movie Player (GBAMP)
Das Japanische Unternehmen AM3 hat bereits Anfang 2003 einen Movieplayer
herausgebracht, mit denen auf dem Gameboy Advanced Videos und MP3’s abgespielt werden können. Dies ist jedoch nicht die einzige Firma die einen dieser
GBAMP’s entwickelt hat (Gängige Variente siehe Abbildung 16)
Die Speicherkapazität des MP ist abhängig von der verwendeten Compact Flash
Karte vom Typ 1.
In deutschen Geschäften sind die GBAMP nicht erhältlich, bei eBay wird man
jedoch schnell fündig. Allerdings sollte man sich die Sops 2x anschauen da diese
zum Teil nicht ganz seriös sind.
Der GBAMP besitzt eine eigene Firmware, die einen Dateimanager und diverse
andere Features beinhaltet. Diese Firmware kann durch eine modifizierte Version ersetzt werden. Dadurch ist es möglich, die CF-Karte direkt als Dateisystem
einbinden zu können. Das Starten von Software geschieht hierbei wie mit einer
normale GBA Speicherkarte.
Der Nachteil dabei ist, das man den NDS nun mit halt oder poweroff herunterfahren muss. Auf der CF-Karte kann zusätzlich, im Root der Karte, ein Ordner mit
dem Namen ’linux’ angelegt werden, in den zusätzliche Applikationen9 abgelegt
werden können. Diese werden dann automatisch beim Booten von DSLinux eingebunden.
7
Meist besteht die Karte aus SRAM Speicherbausteinen.
Übersetzt eigengebraute Software, Code der nicht von Nintendo zertifiziert ist.
9
An dieser Stelle ist XIP verfügbag.
8
10
5.3
SuperCard
Die Karten sehen aus wie normale GBA Speicherkarten (Abbildung 15) mit dem
Unterschied, dass diese einen Slot für eine SD/MMC oder CF-Karte besitzen. Diese SuperCard’s können wie der GBAMP lesend und schreibend angesprochen werden. Die Maximalgröße der CF Karten liegt im Moment bei 4GB.
Zudem besitzen die Karten wie der GBAMP eine Firmware, über den die auf der
CF Karte enthaltenen GBA ROM’s gestartet werden können.
5.4
Speichererweiterung
Am 15.7.2005 wurde von einem Hacker mit dem Namen Amadeus, ein Thread im
dslinux.org-Forum gestartet mit dem Subject: ”DS Memory Extension, Building
a RAM/ROM Extension GBA Card” In diesem Thread ist bis jetzt der Fortschritt
zu der Entwicklung einer Speichererweiterung für den NDS verfolgbar. Besonders
erwähnenswert sind die Screenshots und Bilder der Hardware.
(Abbildungen 17, 18, 19, 20 und 21)
Details zur Hardware der 1. Version:
• 32 MB SDRAM
• SD Cardslot
• 512 KB Flash memory
Details zur 2. Version:
• 32 MB Flash (kein SDRAM)
• microSD/Transflash
5.5
GPS
Es ist bereits ein Software und ein GPS-Modul verfügbar, welches an einen PassMe
mit seriellem Interface angeschlossen wird (Abbildung 12 und 13). Es handelt sich
hierbei jedoch um ein eigene Applikation und kein Linux-Tool.
11
6
DSLinux
DSLinux basiert auf der µClinux Distribution. Wo bei hier der 2.6’er Linux-Kernel
und die µClibc sowie eine Busybox verwendet wird. Alle Patches die aus dem CVS
von µClinux geladen werden können beziehen sich auf die µClinux -Version vom
15.12.2004.
Das original µClinux basiert auf dem 2.0er Linux Kernel und wurde in erster Linie
für Microcontroller ohne MMU (Memory Management Unit) entwickelt. µClinux
wurde mittlerweile auf eine große Menge an Architekturen wie z.B. ARM portiert.
Im Moment können nur Tools innerhalb der BusyBox und wenige direkte Tools
aus µClinux in das DSLinux Image mit einkompiliert werden. Dies liegt an der
fehlenden XIP10 Unterstützung.
Das Standard Passwort für die Distribution ist ’uClinux’.
µClinux
6.1
6.1.1
Kernel
Der Hacker Pepsiman erstellte die ersten Patches für den 2.0’er Kernel. Er ist verantwortlich für einige der wichtigsten Schritte bei der Umsetzung des Kernels auf
den NDS. Zudem hat er die Umstellung auf den 2.6’er Kernel aus gründen wie der
Performance und Stabilität durchgeführt.
Mittlerweile wurde auf dem 2.6’er Kernel umgesattelt und fast jede Hardware wird
unterstützt. Was fehlt sind Device-Treiber für den Sound und das WLAN. Der Kernel läuft ausschliesslich auf der ARM9 CPU. SMP wird es trotz zweiter CPU nicht
geben, da die ARM7 CPU in einer endlosschleife hängt und nur als eine Art Gateway zu Hardware wie z.B. Sound, WIFI und oder dem Touchscreen benutzt.
6.1.2
Userland
Es hat sich während der Entwicklung bereits früh herausgestellt, dass eine BusyBox, sowie das umstellen von uc-libc, welche anfänglich verwendet wurde, zur
uClibc nötig ist. Seit dieser Umstellung sind viele Tools für den NDS wie z.B. vi
verfügbar. Desweiteren sind bereits jetzt Textadventures und ncurses Games in der
Distribution enthalten. Natürlich nur diese die per Online-Tastatur spielbar sind.
10
XIP (eXecute In sPace) bedeutet das das auszuführende Programm nicht komplett in den
RAM geladen werden muss um es auszuführen.
12
6.2
Imagedateien
6.2.1
.gba
Ein ROM Image eines original GameBoy Advanced Spiels oder Homebrew GBA
Software.
6.2.2
.ds.gba
Diese Dateien wurden entwickelt um von GBA Flashkarten gestartet zu werden.
Manche .ds.gba Images sind .nds Dateien mit einem speziellen Loader vor dem
eigentlichen Code, der den auszuführenden Code in den RAM kopiert, vor dem
ausführen. dslinux.ds.gba von der Nightly Builds Seite oder nach dem kompilieren einer eigenen Version von .ds.gba µClinux sind keine dieser .nds Images mit
Loader. Bei einer direkten .ds.gba Datei wird der Code direkt von der Flashkarte
ausgeführt, was zu deutlichen unterschieden in der Bootgeschwindigkeit führt.
6.2.3
.nds
Diese Dateien werden in den folgenden Fällen verwendet.
1. In Emulatoren (wie iDeaS, dsemu, dualis).
2. Bei Wireless Multiboot11 (WMB über).
3. GBA Movie Player (GBAMP).
Die meisten .nds Dateien werwenden mittlerweile einen eingebauten Loader, der
erlaubt, dass sie auch auf GBA Flashkarten verwendet werden können ohne einen
Loader zusätzlich voranstellen zu müssen. Dies funktioniert jedoch nicht mit allen
Flashcards oder einer SuperCard.
6.2.4
.nds.gba
Hierbei handelt es sich um eine .nds Datei die umbenannt wurde um mit einem
FlashLinker-Tool12 auf eine GBA Flashkarte speichern zu können.
11
12
Starten von Software über WLAN.
Das Tool des Herstellers mit den eine GBA Flashcard beschrieben werden kann.
13
6.3
Howto compile µClinux
Hierzu wird eine der folgenden Toolchains13 benötigt:
• devKitArm
• arm-elf-gcc
• arm-uclinux
• arm-uclinux aus dem µClinux ARM 2.6 Projekt
Je nach Betriebssystem muss auf die entsprechende Toolchain zurückgegriffen
werden. Grundsätzlich ist die Distribution auf jedem Rechner kompilierbar. Mann
hat jedoch auf manchen Systemen wie Windows und OSX14 einen entsprechenden
größeren Aufwand bis µClinux sich dazu überreden lässt.
1. uClinux-dist-20041215.tar.gz herunterladen, DSLinux bezieht sich auf diese
µClinux Version.
2. Entpacken
3. cvs -d:pserver:[email protected]:/cvsroot/dslinux login
4. cvs -z3 -d:pserver:[email protected]:/cvsroot/dslinux co -P
dslinux
5. cp dslinux/* uClinux-dist/
6. cd uClinux-dist
7. make menuconfig15
8. make CROSS_COMPILE=arm-elf-16
9. Unter uClinux-dist/images/ liegt das erstellte Image dslinux.*
13
Eine Toolchain beinhaltet Entwicklungstools wie z.B. einen Crosscompiler.
Unter Mac OSX muss zusätzlich XCode und die Darwinports installiert sein.
15
Hier muss der Vendor auf Nintendo und das Zielimage auf den entsprechenden Typ wie
z.B. NDS (.nds) gesetzt werden.
16
Wird die µClinux -Chain verwendet, muss hier arm-uclinux- angegeben werden.
14
14
6.4
Andere Projekte um den NDS
6.4.1
dsdev.org
DSDev.org entstand ursprünglich aus der GameBoy Advanced develop Seite GBADev.org. Nach dem Release des NDS wurde diese jedoch nicht eingestellt sondern
die neue Plattform DSDev.org aufgebaut. Auf dieser Seite werden ständig neue
Demos und Neuheiten präsentiert.
Zudem ist das Forum auf dieser Seite sehr gut besucht. Es wird nicht nur die Entwicklung von Homebrew Software diskutiert sondern auch die Hardwartenetwicklung und allgemeine Themen wie z.B. Designfragen und News.
6.4.2
devkitPro und die libnds
In diesem Projekt geht es um die Entwicklung von Tools zum Erstellen von Homebrew software für den Nintendo DS. Aktuell sind Toolchains für den GameBoy
Advanced, GP3217 , Playstation Portable sowie den GameCube verfügbar.
Für den NDS, den GBA und GP32 wird die Toolchain devkitARM benötigt. Für
den GameCube devkitPPC und es gibt eine Toolchain devkitPSP für die PSP18 . Für
jede dieser Toolchains wurde eine eigene Mailingliste eingerichtet, da die Anfragen sonst nicht mehr überschaubar wären.
Die IRC Channels #gbadev, #gp32dev, #gcdev und #dsdev können auf irc.efnet.org
betreten werden. Die Channelsprache ist Englisch. Hier treffen sich ununterbrochen Entwichker für Homebrew Software.
Die libnds ist ein zusätzliches Produkt der dsdev Entwickler. In dieser Library,
welche in C geschrieben ist, werden alle Möglichkeiten der DS-Hardware implementiert und auch dokumentiert. Es gibt mittlerweile für alles unterstützung. Sogar
eine OpenGL Schnittstelle, Audio und WLAN.
17
18
Handheld der Südkoreanischen Firma GamePark, Konkurenzprodukt zum GBA.
Playstation Portable
15
6.5
Ausblick in die Zukunft
• Der Treiber für die WLAN-Hardware wird in Angriff genommen sobald auf
den Kernel 2.6.14 umgestiegen wurde.
• XIP für die gesamte µClinux -Distribution
• X11
• Diverse Applicationen
7
7.1
Anhang
Kosten
Nintendo DS
NDS-Spiel
Movieplayer (M2)
Supercard (CF & SD)
PassMe
7.2
118 e - 161.00 e
39.00 e
20.00 e
59.00 e
25.00 e
Zeitlicher Ablauf der Entwicklung
• 04.01.2006 DSLinux Wiki unter http://dslinux.org/wiki online.
• 24.12.2005 Der Code der libnds für die WLAN Hardware + Doku wurde
freigegeben, happy hacking.
• 23.12.2005 Es wird an der Umstellung auf den 2.6.14er Kernel, aufgrund des
im 2.6.9er Kernel fehlenden allgemeinen Wifi Stacks, gearbeitet.
• 01.12.2005 - libnds wird um 1. Features zum Ansteuern der WLAN Hardware erweitert.
• 16.11.2005 DSLinux zeigt nach dem Booten die aktuelle Firmware Verssion
des NDS. Eine Warnung wird angezeigt falls eine veraltete Version des FlashME verwendet wird. Mariokart DS überschreibt bei veraltetem FlashMe
die Firmware fast unwiederruflich.
• 13.11.2005 Mit
cat /dev/firmware > /home/firmware.bin
kann nun ein Firmware-Backup erstellt werden, falls man eine möglichkeit
hat das File zu speichern.
• 09.11.2005 XIP kernel support für SuperCard CF. Es können nun .ds.gba
files gebootet und die CF-Karte wie beim GBAMP verwendet werden.
16
• 05.11.2005 Real Time Clock Support wurde von Erik Johnson hinzugefügt,
date zeigt nun das richtige Datum.
• 22.10.2005 Der Movieplayer 3 und die SuperCard Treiber wurden released.
• 22.10.2005 Die Fontgröße wurde von 4x6 auf 6x6 von stsp vergrößert.
• 06.10.2005 Auf der CF-Karte können nun zusätzliche Programme, in der
Datei linux.tgz, abgelegt werden ohne das das dslinux Image neu kompiliert
werden muss.
• 05.10.2005 Mit Hilfe von DynaStab wurde die erste ncurses Version mit
einigen Demos erstellt.
• 30.09.2005 DynaStab hat den Backspace der Onscreen Tastatur repariert.
• 30.09.2005 poweroff schaltet nun den NDS ab.
• 28.09.2005 Treiber für den Zugriff auf die CF-Karte des GBAMP herausgegeben.
• 27.09.2005 Die CF-Karte im GBAMP kann nun lesend und schreibend verwendet werden.
• 25.09.2005 SRAM Filesystem Driver, es können nun 64KB Daten gespeichert werden. Mit eraseall /dev/mtd1kann der SRAM gelöscht werden und
wird nach einem Reboot unter /sram automatisch gemountet.
• 22.09.2005 Amadeus hat eine RAM Extension entwickelt.
• 01.07.2005 Von DarkFader wurde eine Firmware erstellt die es möglich
macht den GBA Movie Player als Speichermedium für .nds Files zu verwenden, eine Verwendung als Festplatte ist noch nicht möglich.
• 27.06.2005 Es wird nun eine BusyBox verwendet.
• 27.06.2005 Umstellung von uc-libc auf µClibc .
• 23.06.2005 Energiespaarfunktionen wurden eingefügt (Hintergrundbeleuchtungen und Displays).
• 23.06.2005 Shift, Ctrl, Alt und AltGr können nun permanent aktiv geschaltet
werden.
• 19.06.2005 Onscreen Keyboard wurde hinzugefügt.
• 12.06.2005 Informationen können nun vom Touchscreen abgefragt werden.
• 02.06.2005 Framebuffer auf beiden Screens.
17
• 30.05.2005 Buttons-Driver fertiggestellt.
– Right = L
– Left = S
– A = Enter
• 22.05.2005 Die erste Shell wird ausgeführt.
• 22.05.2005 Framebuffer auf einem der Screens, der Code wurde aus dem
GBA Linux Projekt hierbei angepasst.
• 05.2005 Der erste Kernel bootet (2.0’er).
• 03.03.2005 PassMe fertiggestellt durch Natrium42 anhand DarkFader’s Passthrough Technik unter verwendung eines FPGA dev kit.
• 11.2004 DSLinux Projekt wurde gestartet.
18
7.3
Quellen
• Developer Center http://www.apple.de/develop
• Darkain Website http://www.darkain.com/nintendo_ds/
• Darkfader http://darkfader.net/ds/
• Darwinports http://www.darwinports.org
• DSDev http://www.dsdev.org
• How to put Linux on your NDS http://www.dslinux.org/index.php?showtopic=430
• DSLinux Projektseite http://www.dslinux.org
• FlashMe Howto http://ds.gcdev.com/dsfirmware
• Homebrew Software Tutorial http://www.double.co.nz/nintendo_ds/nds_develop1.html
• Natrium42 http://natrium42.com/ (Man beachte das BLOG unter /blog)
• Nightly builds page is http://kineox.free.fr/DS/
• Nintendo DS Emulatoren http://www.ndsemulator.com
• µClinux ARM 2.6 http://opensrc.sec.samsung.com
• Original PassMe’s und Bauanleitung http://www.dspassme.com
• Pepsiman Blog http://www.dslinux.org/blogs/pepsiman/
• Webshop NDS Hardware http://www.sebson-media.de/index.php?language=de
• NDS Tech Wiki http://www.bottledlight.com/ds/index.php/Main/HomePage
• µClinux http://www.uclinux.org
• WifiMe howto http://www.aaronrogers.com/nintendods/wifime.php
19
7.4
Abbildungen
Abbildung 1: Nintendo DS geöffnet
20
Abbildung 2: Nintendo DS geschlossen.
Abbildung 3: SL1
Abbildung 4: Health Screen
21
Abbildung 5: PassMe
Abbildung 6: PassMe mit NDS-Game
22
Abbildung 7: PassMe2
Abbildung 8: Verbindungspunkte für die serielle Schnittstelle
23
Abbildung 9: PassMe mit serieller Schnittstelle
Abbildung 10: PassMe mit USB Schnittstelle
24
Abbildung 11: JTAG Belegung
Abbildung 12: NDS mit GPS Antenne
25
Abbildung 13: GPS Screen auf NDS
Abbildung 14: Verschiedene GBA FlashCard’s
26
Abbildung 15: GBA Supercard
Abbildung 16: GBA MoviePlayer
27
Abbildung 17: NDS Memory Extension
Abbildung 18: NDS Memory Extension (voll bestückt)
28
Abbildung 19: NDS mit Memory Extension
Abbildung 20: Layout für NDS Memory Extension v2
29
Abbildung 21: NDS Memory Extension v2 im Gehäuse
30
8
Schlusswort
Alles in allem ist DSLinux noch nicht soweit, dass man es produktiv benutzen
kann. Wer jedoch Spass an aussergewöhnlicher Hardware und Linux hat, wird hier
voll auf seine Kosten kommen.
9
Danksagung
Danke an alle, die an den beschriebenen Projekten, und an diesem Artikel mitgewirkt haben.
Bei den großen Menge an Personen die hierbei teilgenommen haben, ist es sogut
wie unmöglich jeden einzeln aufzuzählen, so dass ich zu dem Entschluss gekommen bin es hierbei zu belassen.
In diesem Sinn, macht weiter so, und gute Arbeit!
Bei Fragen oder Anregungen zu diesem Artikel bitte einfach eine
eMail an [email protected] schicken.
31