So tonight while at work I began researching Wii Linux. I hope to make some contributions. It’s quite different than the router I hacked at. I am by no means qualified for such things, but in the end patches were made (that worked) and I learned quite a lot.
The Wii has two CPUs. This is the hardest part for me to grasp. Of course the booting process is started by one, code is loaded, but then how do the two communicate? A segment of RAM which is monitored, of course, right? I assume there is also a signal on each tied to reset the other though…?
My thinking is that, the ARM CPU can do more I/O functions in Linux. Originally it ran under the control of an IOS it seems, and interfaced with it to access hardware. Later came ‘mini’ and AHBPROT? I’m unsure, and not well read yet, but I see no reason now that we cannot fully control both CPUs since it seems the PowerPC has complete hardware access.
So how? Replacing the PPC ELF and loading bootmii seems to be the way to get that full access. That can work … but I want to replace mini I guess. Ideally a ‘Linux Loader’ can be made, and able to launch from the Homebrew Channel. The HBC can launch mini/bootmii… Why not?
Then we can also fix the problem of compile-time kernel command lines! ICK!
So the candidate functions to be taken care of on the ARM:
RGB->YUV framebuffer [Hacking Up an RGB Framebuffer Driver for Wii-Linux – Take Two]
Wifi SDIO – very briefly saw that the wifi interface is over sdio? Offloading that bitbanging to the ARM would help free a lot of PPC cycles.
… Now that I think about it, I didn’t read any or much at all about running under IOS. I bet that’s how much of it is already done by ARM, but Linux lacks the drivers to utilize much of the hardware under IOS.
Anyway, it’s still a very early idea. I must first beat Zelda: Skyward Sword, but I got the development environment setup today and I think I compiled a working Debian/squeeze 2.6.32 kernel (may eventually try to boot it too). I do hope to at least learn, even if not viable for Wii Linux, about how to load code to RAM and reset each CPU from the Homebrew Channel. Such as a ‘Hello World!’ from the ARM possibly.
I’m excited to have *something* to hack at while I’m in Antarctica though. Can’t you tell?