닌텐도 Wii에 Mac OS X 치타 부팅: 포팅 심층 분석
한 개발자가 닌텐도 Wii의 PowerPC 750CL 프로세서를 활용해 원본 Mac OS X 치타를 성공적으로 부팅했습니다. 이 칩은 iBook G3와 iMac G3 모델에 탑재된 PowerPC 750CXe에서 발전한 버전으로, CPU 수준에서 뛰어난 호환성을 제공합니다.
Wii는 총 88MB RAM을 탑재하고 있습니다: 24MB 1T-SRAM (MEM1)과 64MB GDDR3 (MEM2). 치타는 공식적으로 128MB를 요구하지만, QEMU 테스트 결과 64MB로도 문제없이 실행됩니다. 지원되는 주요 기능은 다음과 같습니다:
- USB Gecko를 통한 직렬 출력;
- SD 카드에서 부팅;
- 인터럽트 컨트롤러;
- 프레임버퍼로의 비디오 출력;
- 마우스와 키보드용 USB.
Darwin의 오픈소스 XNU 커널과 IOKit이 드라이버를 완벽하게 처리합니다. Quartz나 Finder 같은 클로즈드 소스 부분도 커널이 가동되면 패치 없이 바로 실행됩니다.
부팅 과정: Open Firmware에서 Wii까지
PowerPC Mac에서는 Open Firmware를 거쳐 장치 트리를 구성한 후 BootX가 Mach-O 커널을 로드합니다. Wii는 Homebrew Channel과 BootMii를 통해 홈브루를 활용합니다.
이 접근법은 ppcskel 기반 커스텀 부트로더를 사용합니다: Wii 초기화 → SD에서 XNU 로드 → 장치 트리 구성 → 커널 점프. 전체 Open Firmware나 BootX 포팅을 생략해 다중 하드웨어 지원을 포기하고 가볍게 유지했습니다.
Mach-O 파싱과 커널 실행
부트로더가 Mach-O 로드 명령어를 분석하고 세그먼트를 매핑합니다:
0x00000000: 예외 벡터
0x00011000: LC_SEGMENT __TEXT
0x002e0000: LC_SEGMENT __DATA
0x00367000: LC_SEGMENT __KLD
0x00395000: LC_SEGMENT __LINKEDIT
0x00434000: LC_SEGMENT __SYMTAB
0x004d3000: LC_SEGMENT __HEADER
실행 호출: ((void ()())kernel_entry_point)(boot_args_address, MAC_OS_X_SIGNATURE);. 화면이 검게 변합니다—커널이 제어권을 잡았습니다.
패칭을 통한 디버깅: Wii의 LED를 0x0D8000C0에서 토글하도록 명령어 교체:
lis r5, 0xd80
ori r5, r5, 0xc0
lwz r4, (r5)
sync
xori r4, r4, 0x20
stw r4, (r5)
Hopper 디스어셈블러로 XNU 함수를 매핑했습니다. 초기화 순서:
- 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 (300번 예외 크래시)
300번 예외에서 크래시: 장치 트리 누락.
장치 트리와 boot_args
장치 트리는 계층적 하드웨어 맵입니다. Wii용으로는 Wii Linux에서 가져온 하드코딩 버전으로 최소화:
/
├── cpus
│ └── PowerPC,750
└── memory
필요에 따라 확장합니다. boot_args 구조:
typedef struct boot_args {
u16 Revision;
u16 Version;
// ... (커널에 전달되는 전체 구조)
};
부트로더가 테스트를 위해 커널을 실시간 패치합니다.
주요 요약
- Wii의 PowerPC 750CL이 치타를 스톡 상태로 실행, CPU 수정 불필요;
- 88MB RAM으로 기본 부팅 충분, QEMU 검증;
- 커스텀 ppcskel 부트로더로 오버헤드 최소화;
- Mach-O 파싱과 LED 패칭으로 XNU 디버깅 가능;
- 하드코딩 장치 트리로 고정 하드웨어 부팅 가속.
— Editorial Team
아직 댓글이 없습니다.