In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Changes

Jump to navigation Jump to search
5,664 bytes removed ,  01:42, 1 September 2024
←Replaced content with 'BOOTMIX'
Line 1: Line 1: −
{{Infobox homebrew
+
BOOTMIX
| 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}}
 
4

edits

Navigation menu