Go back
Hacking the Wii U into a decent PowerPC Linux setup 2025-05-24

Why?

Funny. also, Linux.

I wanted a dedicated console for just messing with Linux, because I'd like to do some hardware hacking to it. One trip to eBay later I have a bricked console, for almost nothing! It outputs video, but crashes with an error code soon after booting.

de_Fuse

Step 0: Install a modchip, because the OS is totally bricked.. See https://github.com/StroopwafelCFW/wii_u_modchip. Also while I'm in here, I decided to add a USB-C PD trigger board I had on the bottom pins of the power connector, because it can do 15V, which is the same as the Wii U.

Photo of a Raspberry Pi Pico board mounted to the Wii U board with many wires and a flex cable A zoomed out view of the Wii U board and Pico, covered with Kapton tape A USB connector board mounted to the back of the Wii U with hot glue A USB-C PD board soldered to the back of the Wii U power connector. It fits well.

Yellow Linux?

We can try to boot into Linux with de_Fuse/minute directly, but it's not quite right: Render of main PCB Apparently this is because the GPU isn't set up properly, and the framebuffer is set to the opposite endianness... This means for a RGBX framebuffer it gets interpreted as XRGB, so only the G and B components make it through untouched (hence, yellow).

Unbricc

So, we need a working OS to boot Linux. Sad. There's a way to format and rebuild all of the OS with wafel_setup_mlc, but the OS was too old for it to work straight away. I had to install all the SLC titles for the latest OS first, then I could finally reinstall all the other titles. And it works: Screenshot of the Wii U Menu loading screen I'm not sure what happened to the original NAND, usually this happens because the eMMC is physically dying, but it worked fine after reformatting.

Linux still broke

Even though the WiiU OS works now, linux-loader isn't happy with the state of my NAND:

[INFO] Trying to load kernel from sdmc:/linux/dtbImage.wiiu...
ancast: failed to open slc:/sys/title/00050010/1000400a/code/kernel.img (88).

minute can mount it just fine, and the code in linux-loader for it is relatively old. shrug
for now I just patched linux-loader to load that file off the SD card separately.

Why do we need this to boot? Usually the PowerPC cores' bootrom verifies that the code it's loading is signed by Nintendo. Luckily, Nintendo are bad at writing code, so if we load the signed PowerPC kernel and then replace part of it after it's verified (but before it's booted), we can launch arbitrary code.

NanoKVM

Now this Wii U is just a fancy computer anyway - I had a spare NanoKVM lying around. It seems to work fine, including mouse&keyboard emulation.

Render of main PCB Render of main PCB

I wanted to be able to control the power button remotely as well, because you can't navigate the minute menus with a USB keyboard. The NanoKVM has the ability to do this, so I just have to hook it up...

Render of main PCB Render of main PCB

SATA?

With an adapter PCB, you can connect a normal SATA drive to the custom disc drive port - even though it's custom, it's just SATA underneath. Shoutouts to quarky for making this! Render of main PCB The drive type needs to be set correctly in the EEPROM for the disk to be initialized by Cafe OS, Linux seems to rely on it.
In minute go to Backup and Restore -> Set SEEPROM SATA device type and set it to GEN2-HDD (Kiosk CAT-I with HDD). This is usually for devkits, but it's fine for any drive.

Addendum: MEM0 silliness

It works well, except I'm getting filesystem corruption as soon as I try to update anything... Screenshot of EXT4 filesystem errors The device tree has three memory sections - MEM1 (32MB), MEM0 (3MB) and MEM2 (2GB). MEM0/1 are a holdover from the Wii, but MEM2 is the majority (2GB) of the memory. It seems like MEM0 is being corrupted, but I have no idea what by. Removing it from the device tree makes the system entirely stable again.