Custom IOS Module Toolkit

From WiiBrew
Jump to navigation Jump to search
Custom IOS Module Toolkit
TypePC utility
Source Included

The Custom IOS Module Toolkit contains the necessary basic tools and project files needed to create a custom IOS module and interact with it. This is perfect for running test code on the Wii's Starlet processor.

Source code is delivered for all tools and projects.


In order to compile a custom IOS module you need devkitARM (arm-elf, or arm-eabi), and to compile the test application, you need devkitPPC and libogc.

Package contents

This package contains the following contents:

  • Stripios
  • Iosmodule
  • Iostester


This tool takes a traditional ARM ELF file and converts it into a format the IOS system understands.


This is the project which will create a custom IOS module.

In order to create a working IOS module, you must supply the fixed absolute memory addresses for the module to live in, in the linker script.

Currently, it defaults to the memory addresses set by the DIP module from IOS31.

To install a custom IOS module, you need to add it to the TMD of an existing IOS, and allocate it with an unused content id, or replace an existing one.

Currently, the produced IOS module is tested by replacing the DIP module from IOS 31. This is done by letting patchmii install IOS 31 as IOS 254, and replacing the contents of the DIP module with the custom IOS module.

The example main source file sets up a device called "/dev/haxx" and allows you to read/write to the IOS memory space (currently limited to the module's memory space because it is running from usermode), and allows you to upload and execute custom code.


This is the project which will interact with the custom IOS module.

In the first step, a completely position independent ARM program is compiled, and the file arm.bin is produced.

The ARM program is made position independent by means of an global offset table (GOT), which the ARM program will automatically correct upon boot up.

Then the arm.bin file is automatically added into the PPC program, so that it can upload it to the custom IOS module, and let it execute it from the IOS side.