Cafe OS

Version vom 9. September 2022, 23:15 Uhr von ICON (Diskussion | Beiträge) (zlib Link auf Tag statt auf Commit)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Cafe OS ist der PowerPC-Teil des Betriebssystem der Wii U. Es besteht aus dem Cafe-OS-Kernel, dem ausführbaren Loader und Systembibliotheken. Anders als auf der Wii, wo Spiele mit vollem Hardwarezugriff auf dem "blanken Metall" liefen, laufen Wii-U-Spiele vollständig voneinander isoliert unter der Aufsicht des Kernels. Alle Applikationen sind - genau wie die Bibliotheken - modifizierte ELF-Dateien und werden dynamisch mit den Bibliotheken verbunden, um Zugriff auf OS-Services zu erhalten. Cafe OS enthält auch einige Systemprozesse, wie das HOME-Menü und den Error Handler.

Der ARM-Teil des Betriebssystems heißt IOSU.

Architektur

Kernel

Der Kernel läuft im Supervisor-Modus auf dem PowerPC und führt einfache Aufgabe eines Mikrokernels aus. Er ist verantwortlich für die Prozessisolation, Speichermanagement und Interrupt Dispatching, als auch die Kommunikation mit IOSU. Cafe OS Applikationen laufen als Usermode-Prozesse mit separierten Adressräumen und W^X (Write xor Execute) Speicherschutz. Der Kernel stellt einfache Systemaufrufe zum Starten von Prozessen zur Verfügung.

Prozesse

Ein Prozess in Cafe OS stellt eine laufende Applikation mit eigenem Code, Speicher und Rechten dar. Cafe OS führt nur den Code eines einzigen Prozesses auf einmal aus, kann aber Daten von mehreren Prozessen gleichzeitig im Speicher halten und zwischen diesen wechseln. Anstatt das Ausführen von irgendwelchen Prozessen zu erlauben, wird RAM für eine einzige Vordergrund-, eine Hintergrund-Applikation und mehreren anderen, speziellen Prozessen reserviert. Jedem laufenden Prozess wird eine einzigartige Kennung zugewiesen, die RAMPID genannt wird:

RAMPID Beschreibung IOS-Name
0 Cafe OS COS-KERNEL
1 root.rpx COS-ROOT
2 ??? COS-02
3 ??? COS-03
4 Hintergrund-Applikation COS-OVERLAY
5 HOME-Menü COS-HBM
6 Fehleranzeige COS-ERROR
7 Vordergrund-Applikation COS-MASTER

Zusätzlich zur RAMPID besitzen Prozesse noch eine andere Art von Prozess-ID, die "fixed Process ID" (PFID) genannt wird. Anstatt anzuzeigen, welchen Teil des Speichers ein Prozess belegt, zeigt PFID an, welche Applikation/welche Aufgabe läuft (Browser, Spiel, eShop, etc.). Cafe OS mappt PFIDs zu den RAMPID, die diese belegen (beispielsweise ist ein Spiel RAMPID 7, weil es im Vordergrund läuft):

PFID Beschreibung RAMPID
0 Cafe-OS-Kernel 0
1 root.rpx 1
2 Wii-U-Menü 7
3 TVii ???
4 Elektronische Bedienungsanleitung ???
5 HOME-Menü 5
6 Fehleranzeige 6
7 "MiniMiiverse" ???
8 Wii U Internetbrowser 4
9 Miiverse ???
10 eShop ???
11 COS-FLV ???
12 Download-Manager ???
13 COS-RSVD-13 ???
14 COS-RSVD-14 ???
15 Spiel 7

Loader

Der Loader ist verantwortlich für das Laden von Bibliotheken im RPL-Format und ausführbaren Dateien in den Speicher. Er ist eine Standard ELF-Executable mit dem Namen "loader.elf" und enthält eine statisch gelinkte Kopie von zlib, wahrscheinlich zum Dekomprimieren von Sektionen von RPL-Dateien.

Bibliotheken

Cafe OS Applikationen linken dynamisch mit Systembibliotheken, um Zugriff auf OS-Services zu erhalten. Diese OS-Services beinhalten Speichermanagement, Grafiken, Audio und Controller-Eingabe. Alle Bibliotheken sind RPL-Dateien, eine Modifikation vom Standard ELF-Format mit komprimierten Sektionen und mehr Windows-artigem, dynamischem Linking. Die Haupt-Systembibliotheken sind unten gelistet:

Name Beschreibung
avm.rpl Audio/Video-Manager
camera.rpl GamePad-Kamera
coreinit.rpl Kernel, Speicher und Dateisystem
dc.rpl Display-Controller
dmae.rpl DMA (Direct Memory Access/Speicherdirektzugriff)
drmapp.rpl Digitale Rechteverwaltung (DRM)
erreula.rpl Fehleranzeiger
gx2.rpl Grafiken
h264.rpl Unterstützung für H.264
lzma920.rpl LZMA-Komprimierung
mic.rpl GamePad-Mikrofon
nfc.rpl Low-Level NFC-Bibliothek
nio_prof.rpl IO-Profiler
nlibcurl.rpl libcurl v7.21.7, Funktionen gleichen sich mit der offiziellen Bibliothek, beinhaltet extra Optionen für curl_easy_setopt
nlibnss.rpl libnss
nlibnss2.rpl
nn_ac.rpl Nintendo Network Auto Connection
nn_acp.rpl Nintendo Network Account/Access Protection
nn_act.rpl Nintendo Network Accounts
nn_aoc.rpl Nintendo Network Add-On-Content
nn_boss.rpl Nintendo Network BOSS (SpotPass)
nn_ccr.rpl
nn_cmpt.rpl Verwaltet Boot in den Wii-Modus
nn_dlp.rpl 3DS Download-Play-Hosting-Bibliothek
nn_ec.rpl Nintendo Network E-Commerce
nn_fp.rpl Nintendo Network Friend Presence
nn_hai.rpl Hilfsbibliothek für nn_cmpt.rpl für Wii VC-Titel
nn_hpad.rpl Controller?
nn_idbe.rpl Downloadet und entschlüsselt Spiele-Icons von einer Online-Icon-Datenbank
nn_ndm.rpl Daemons?
nn_nets2.rpl Mehr Netzwerk-Funktionen
nn_nfp.rpl Nintendo Network Figurine Platform (amiibo)
nn_nim.rpl
nn_olv.rpl Olive/OLV - Miiverse
nn_pdm.rpl Aktivitätslog-Daten (Spielzeit, etc.)
nn_save.rpl Speicherdaten-Zugriff
nn_sl.rpl
nn_spm.rpl Speicher-relevante Funktionen (USB?)
nn_temp.rpl TEMP-Bibliothek (für temporäre Dateien)
nn_uds.rpl Bibliothek zum Hostne von lokalen 3DS WLAN-Netzwerken
nn_vctl.rpl
nsysccr.rpl DRH-Kommunikation (GamePad und RPC)
nsyshid.rpl Human Interface Device Bibliothek (USB-Eingabegeräte)
nsyskbd.rpl USB-Tastatur-Bibliothek
nsysnet.rpl BSD-Sockets, Netzwerkkonfiguration und SSL
nsysuhs.rpl Low-Level USB-Zugriff
nsysuvd.rpl
ntag.rpl NTAG High-Level NFC-Bibliothek
padscore.rpl Andere Controller (Wiimote, Balance Board...)
proc_ui.rpl
snd_core.rpl Sound-1 Core
snd_user.rpl Sound-1 User
sndcore2.rpl Sound-2 Core
snduser2.rpl Sound-2 User
swkbd.rpl Software-Tastatur
sysapp.rpl Wechseln zu/Laden von Applikationen
tcl.rpl Texture-Core-Bibliothek
tve.rpl TV-Engine
uac.rpl DRH-Kommunikation (GamePad-Mikrofon)
uac_rpl.rpl
usb_mic.rpl
uvc.rpl DRH-Kommunikation (GamePad-Kamera)
uvd.rpl AMDs OpenVideo-Decode-Bibliothek mit einigen geänderten Funktionsnamen
vpad.rpl GamePad-Eingabe
vpadbase.rpl GamePad-Basis-Bibliothek
zlib125.rpl zlib v1.2.5, Funktionen gleichen sich mit der offiziellen Bibliothek

Einzelnachweis