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