Line 1:
Line 1:
{{Wikify}}
{{Wikify}}
{{Infobox homebrewapp
{{Infobox homebrewapp
−
| title = Custom IOS Module
+
| title = Custom IOS Module Toolkit
| image =
| image =
−
| desc = Create custom IOS
+
| desc = Allows the creation of custom IOS modules.
−
| type = App
+
| type = Utility
| author = neimod
| author = neimod
| display =
| display =
Line 13:
Line 13:
}}
}}
+
This package 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.
−
This package 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 IOS system.
+
== Requirements ==
−
Sourcecode 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.
−
For compiling the ARM IOS code, devkitARM (arm-elf or arm-eabi) is needed.
+
== Package contents ==
−
For compiling the PPC Wii code, devkitPPC and libOGC are needed.
−
Package contents:
+
This package contains the following contents:
+
* stripios
+
* iosmodule
+
* iostester
−
* stripios: This is a tool that will take a tradional ARM ELF file and converts it into a format the IOS system understands.
+
== stripios ==
+
This tool takes a traditional ARM ELF file and converts it into a format the IOS system understands.
+
== iosmodule ==
+
This is the project which will create a custom IOS module.
−
* iosmodule: 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.
−
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.
Currently, it defaults to the memory addresses set by the DIP module from IOS31.
Line 38:
Line 44:
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.
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.
−
+
== iostester ==
−
* iostester: This is the project which will interact with the custom IOS module.
+
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.
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 indepdenent by means of an global offset table (GOT), which the ARM program will automatically correct upon boot up.
+
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.
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.
−
−
−
−
Happy hacking!