Spuštění Mac OS X Cheetah na Nintendo Wii: Technické detaily portování
Vývojář úspěšně spustil první verzi Mac OS X Cheetah na Nintendo Wii, využívající procesor PowerPC 750CL. Tento čip se vyvinul z PowerPC 750CXe, který byl použit v iBook G3 a iMac G3, což zajistilo vysokou kompatibilitu na úrovni CPU.
Wii disponuje 88 MB RAM: 24 MB 1T-SRAM (MEM1) a 64 MB GDDR3 (MEM2). Cheetah oficiálně vyžaduje 128 MB, ale testy v QEMU potvrdily funkčnost s 64 MB. Podpora zahrnuje:
- Sériový výstup přes USB Gecko;
- Zavedení ze SD karty;
- Řadiče přerušení;
- Video výstup do framebufferu;
- USB pro myš a klávesnici.
Darwin jádro XNU je otevřené, IOKit spravuje ovladače. Uzavřené komponenty (Quartz, Finder) fungují bez úprav po zavedení jádra.
Zaváděcí proces: od Open Firmware k Wii
Na PowerPC Mac probíhá zavedení přes Open Firmware, které vytváří device tree, a BootX, který dekóduje Mach-O jádro. Wii využívá homebrew přes Homebrew Channel a BootMii.
Byl zvolen přístup s vlastním zavaděčem na bázi ppcskel: inicializace Wii, zavedení XNU ze SD, vytvoření device tree, volání jádra. Odmítnutí portování Open Firmware nebo BootX zjednodušilo úkol, vyloučením zbytečné podpory více hardwaru.
Parsování Mach-O a volání jádra
Zavaděč parsuje Mach-O příkazy, umisťuje segmenty:
0x00000000: Exception vectors
0x00011000: LC_SEGMENT __TEXT
0x002e0000: LC_SEGMENT __DATA
0x00367000: LC_SEGMENT __KLD
0x00395000: LC_SEGMENT __LINKEDIT
0x00434000: LC_SEGMENT __SYMTAB
0x004d3000: LC_SEGMENT __HEADER
Volání: ((void ()())kernel_entry_point)(boot_args_address, MAC_OS_X_SIGNATURE);. Obrazovka zhasne – jádro převzalo kontrolu.
Ladění pomocí patchování: nahrazení instrukcí blikáním LED Wii na adrese 0x0D8000C0:
lis r5, 0xd80
ori r5, r5, 0xc0
lwz r4, (r5)
sync
xori r4, r4, 0x20
stw r4, (r5)
Disassembler Hopper porovnal funkce XNU. Plán inicializace:
- start.s: start
- start.s: allStart
- start.s: nextPVR
- start.s: donePVR
- start.s: doOurInit
- start.s: noFloat
- start.s: noVector
- start.s: noSMP
- start.s: noThermometer
- ppc_init.c: ppcInit
- pe_init.c: PE_INIT_PLATFORM
- device_tree.c: find_entry (crash 300)
Selhání na výjimce 300 – absence device tree.
Device tree a boot_args
Device tree – hierarchická struktura hardwaru. Pro Wii je použita hardcoded verze z Wii Linux, začínající minimem:
/
├── cpus
│ └── PowerPC,750
└── memory
Rozšíření podle potřeby. Boot_args struktura:
typedef struct boot_args {
u16 Revision;
u16 Version;
// ... (úplná struktura je předána jádru)
};
Zavaděč patchuje jádro za běhu pro testy.
Co je důležité
- PowerPC 750CL Wii je kompatibilní s Cheetah bez úprav CPU;
- 88 MB RAM stačí pro základní zavedení, potvrzeno QEMU;
- Vlastní zavaděč na bázi ppcskel minimalizuje režii;
- Parsování Mach-O a LED patchování – klíčové pro ladění XNU;
- Device tree hardcoded urychluje boot na fixním hardwaru.
— Editorial Team
Zatím žádné komentáře.