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.
Yellow Linux?
We can try to boot into Linux with de_Fuse/minute directly, but it's not quite right:
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:
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.
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...
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!
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...
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.