Changes

5,664 bytes added ,  01:52, 1 September 2024
Undo revision 120418 by Bootmii (talk)
Line 1: Line 1: −
BOOTMIX
+
{{Infobox homebrew
 +
| title      = MINI
 +
| type        = system tool
 +
| author      = [[Team Twiizers]]
 +
| source      = https://github.com/fail0verflow/mini
 +
}}
 +
'''MINI''' Is Not [[IOS]] -- but it is a limited replacement that can fulfill many low-level tasks that IOS might interfere with.
 +
The name is an allusion to GNU, which stands for "GNU's Not Unix"
 +
 
 +
It was developed alongside [[BootMii]] as a replaceable [[Starlet]] executable, however, it was made mostly redundant by the [[Homebrew Channel]] and AHBPROT. There are still a few features that cannot be achieved that way, such as arbitrary ARM execution without exploits or NAND modification.
 +
 
 +
Code from MINI was later re-used for [https://github.com/AsahiLinux/m1n1 m1n1] as part of a project to boot Linux on the [https://en.wikipedia.org/wiki/Apple_M1 Apple M1].
 +
 
 +
== Homebrew using MINI ==
 +
* [[CEIL1NG_CAT]]
 +
* [[HackMii Installer]]
 +
* [[Wii-Linux]]
 +
* [https://github.com/lewurm/ppcskel ppcskel], basic example code that runs alongside MINI
 +
 
 +
== Features ==
 +
* Light-weight -- binary is approximately 50kbytes, 11,673 lines of code as of first release
 +
* Mostly IRQ driven :)
 +
* Supports debug output over the GPIO pins and [[USBGecko]]
 +
* Supports loading both ARM and PPC-side binaries over USBGecko (ala [[Wiiload]])
 +
* Allows any memory address to be peeked or poked from the PPC (via IPC)
 +
* Contains drivers for the following hardware:
 +
** OTP, SEEPROM
 +
** [[Hardware/AES Engine|AES Engine]]
 +
** SDHC (at the sector level, or can load a file from a FAT FS on SD)
 +
** [[NAND]] (read/write at the physical level)
 +
** PowerPC (can read a PPC ELF file from SD into memory, and kickstart execution on the PPC)
 +
* Not dependent on IOS in any way -- as long as you can run it, it can do whatever it wants, regardless of what security features Nintendo patches into newer versions of [[IOS]].
 +
 
 +
== Limitations ==
 +
* No real kernel architecture; no threading model, but most calls are asynchronous
 +
* No USB support (including Bluetooth for Wiimotes)
 +
* No WiFi support
 +
* No NAND FS support
 +
* No audio/visual capability (hardware limitation)
 +
 
 +
All registers are exposed over IPC, so some or all of the missing driver functionality could conceivably be implemented on the PPC side.
 +
Note that this cannot execute at the same time as IOS; you can only have one or the other executing at any point in time. Switching back and forth between the two is left as an exercise for the developer.
 +
 
 +
Since the discovery of the AHBPROT register, MINI enables direct PPC access to all devices. It is often used together with [[Wii Linux]] to enable full hardware functionality and performance.
 +
 
 +
== IPC documentation ==
 +
IPC messages take the following format:
 +
struct {
 +
    u32 code;
 +
    u32 tag;
 +
    u32 args[6];
 +
}
 +
 
 +
{| class="wikitable"
 +
! Command
 +
! Description
 +
|-
 +
| IPC_SYS_PING
 +
| Simply pings the [[Starlet]] for testing.
 +
|-
 +
| IPC_SYS_JUMP
 +
| Shuts down MINI and jumps to the code passed.
 +
|-
 +
| IPC_SYS_GETVERS
 +
| Fetches the MINI version.
 +
|-
 +
| IPC_SYS_GETGITS
 +
| Fetches MINI's Git version.
 +
|-
 +
| IPC_NAND_RESET
 +
| Disables and re-enables the [[Hardware/NAND Interface|NAND Interface]].
 +
|-
 +
| IPC_NAND_GETID
 +
| Retrieves the [[Hardware/NAND|NAND]]'s physical ID.
 +
|-
 +
| IPC_NAND_STATUS
 +
| Sends the GETSTATUS command to the NAND.
 +
|-
 +
| IPC_NAND_READ
 +
| Reads a raw page from the NAND.
 +
|-
 +
| IPC_NAND_WRITE
 +
| Writes a raw page to the NAND.
 +
|-
 +
| IPC_NAND_ERASE
 +
| Erases a block on the NAND.
 +
|-
 +
| IPC_NAND_SETMINPAGE
 +
| Changes the lowest writable page enforced by MINI to prevent accidental bricking.
 +
|-
 +
| IPC_NAND_GETMINPAGE
 +
| Fetches the lowest writable page enforced by MINI.
 +
|-
 +
| IPC_SDHC_DISCOVER
 +
| Initializes the SDHC handler.
 +
|-
 +
| IPC_SDHC_EXIT
 +
| Shuts off the SDHC handler.
 +
|-
 +
| IPC_SDMMC_ACK
 +
| Clears the "new SD card" flag, resulting in [[#IPC_SDMMC_STATE|IPC_SDMMC_STATE]] returning SDMMC_INSERTED instead of SDMMC_NEW_CARD.
 +
|-
 +
| IPC_SDMMC_READ
 +
| Reads raw data from the front SD card.
 +
|-
 +
| IPC_SDMMC_WRITE
 +
| Writes raw data to the front SD.
 +
|-
 +
| IPC_SDMMC_STATE
 +
| Returns whether there is no SD card (SDMMC_NO_CARD), a card inserted since the last [[#IPC_SDMMC_ACK|IPC_SDMMC_ACK]] (SDMMC_NEW_CARD), or a card inserted before the last IPC_SDMMC_ACK (SDMMC_INSERTED).
 +
|-
 +
| IPC_SDMMC_SIZE
 +
| Returns the number of sectors in the front SD.
 +
|-
 +
| IPC_KEYS_GETOTP
 +
| Returns the cached [[Hardware/OTP|OTP]] keys.
 +
|-
 +
| IPC_KEYS_GETEEP
 +
| Returns the cached [[Hardware/SEEPROM|SEEPROM]] keys.
 +
|-
 +
| IPC_AES_RESET
 +
| Sends a reset signal to the [[Hardware/AES Engine|AES engine]].
 +
|-
 +
| IPC_AES_SETIV
 +
| Sends the contents to be AES-decrypted to the AES engine.
 +
|-
 +
| IPC_AES_SETKEY
 +
| Sets the AES key used for decryption.
 +
|-
 +
| IPC_AES_DECRYPT
 +
| Decrypts the contents in the AES engine.
 +
|-
 +
| IPC_BOOT2_RUN
 +
| Shuts down MINI and launches [[boot2]].
 +
|-
 +
| IPC_BOOT2_TMD
 +
| Fetches the [[TMD]] of boot2.
 +
|-
 +
| IPC_PPC_BOOT
 +
| Reboots the [[Hardware/Broadway|Broadway]] to a location in memory.
 +
|-
 +
| IPC_PPC_BOOT_FILE
 +
| Similar to [[#IPC_PPC_BOOT|IPC_PPC_BOOT]], but boots a file. <!--TODO: SD or NAND? -->
 +
|}
 +
 
 +
== Changelog ==
 +
 
 +
=== v1.4 ===
 +
* Fixed integer overflow when calculating SD card free space
 +
 
 +
=== Beta 5 (v1.2) ===
 +
*Compatible with more SD cards.
 +
 
 +
=== Beta 3 (v1.0) ===
 +
* Improved the SD card compatibility
 +
* Enable HW_AHBPROT to fix RESET issue with [[CEIL1NG_CAT]]
 +
 
 +
=== Beta 2 (v0.9) ===
 +
* SD card performance has been improved, decreasing the boot and the NAND backup / restore time
 +
* backupmii accepts fragmented SD cards now, reformatting is not performed anymore. Old NAND dumps are still compatible.
 +
* [[boot2]] patcher now works with [[boot2v4]]
 +
 
 +
=== Beta 1 ===
 +
* First Public Release
 +
 
 +
{{Navbox IOS|skipCat=true}}
 +
[[Category:IOS]]
 +
{{Navbox fail0verflow}}
31

edits