Home Homebrew Rilasciato Stroopwafel v2.2 in pre-release con avvio più rapido e fix...

[Scena Wii U] Rilasciato Stroopwafel v2.2 in pre-release con avvio più rapido e fix al payloader

51
0

Pubblicato un nuovo aggiornamento in pre-release di Stroopwafel, il framework e custom firmware personalizzato per console Wii U nato come evoluzione di iosuhax e costruito su basi simili a SaltyNX.

Si tratta di una soluzione avanzata pensata per offrire un controllo molto più profondo sul sistema rispetto al firmware originale, permettendo agli utenti più esperti di intervenire in maniera significativa sul comportamento della console.

Tra le sue caratteristiche principali spicca la possibilità di caricare direttamente firmware decriptati, semplificando operazioni che normalmente richiederebbero passaggi più complessi.

A questo si aggiunge un miglioramento delle prestazioni del redNAND, reso più veloce grazie a un sistema di cache ottimizzato, che contribuisce a rendere l’esperienza generale più fluida.

Il firmware consente inoltre di disabilitare il lettore disco senza modificare in modo permanente la SEEPROM, un aspetto particolarmente utile per chi desidera intervenire sull’hardware senza rischi irreversibili.

L’integrazione di plugin personalizzati amplia ulteriormente le possibilità, permettendo di adattare il sistema a esigenze specifiche e ottenere un livello di personalizzazione molto elevato.

Questo aggiornamento introduce una modifica orientata principalmente alle prestazioni: viene disattivato completamente il logging delle porte di debug, incluso debug_printf, riducendo così i tempi di avvio della console di alcuni secondi.

Per chi necessita delle funzionalità di debug, resta comunque possibile riattivarle tramite l’aggiunta del plugin dedicato 5debug.ipx.

La maggiore velocità di boot ha però evidenziato una race condition nel payloader, che in alcune circostanze poteva causarne il crash.

Per questo motivo è fortemente consigliato aggiornare anche il plugin payloader almeno alla versione 3.1 (5payldr.ipx), così da garantire piena stabilità e compatibilità con le nuove ottimizzazioni introdotte.

Attenzione: Stroopwafel resta una soluzione rivolta a un pubblico esperto: richiede la compilazione dai sorgenti tramite la toolchain devkitPro e una buona conoscenza del modding su Wii U. In cambio offre strumenti avanzati come supporto ai plugin, possibilità di overclock leggero, funzionalità di debug approfondite, interventi su hardware degradato e persino configurazioni dual-boot, trasformando la console in una piattaforma estremamente flessibile e potente.

Caratteristiche aggiuntive rilevanti

Nota: Vedere anche ios_process/source/config.h

  • Supporto de_Fuse: reindirizza tutte le letture OTP in RAM. Richiede minute_minute per patchare i dati.
  • Caricamento di fw.img decriptato in IOSU.
  • IOSU reload passa attraverso minute per semplificare le patch.
  • Scritture su SEEPROM disabilitate (per sicurezza).
  • Accelerazione redNAND MLC – sposta la cache MLC (SCFM) in SLCCMPT.
  • Hook semihosting – stampa kprintf e syslog sulla seriale del modchip Pico de_Fuse.
  • Disabilitazione del drive disco (senza scrittura su SEEPROM).
  • USB_SHRINKSHIFT – permette di avere sia il filesystem Wii U sia un filesystem normale su un drive, spostando la porzione Wii U dopo l’MBR.
  • USB_SEED_SWAP – sovrascrive la chiave USB SEEPROM per facilitare la migrazione del sistema.

Funzionalità sperimentali/instabili

  • Caricamento di kernel.img dalla scheda SD.

Avvertenze

  • La formattazione redNAND di Stroopwafel è incompatibile con altre implementazioni; utilizzare minute per formattare.
  • Mantenere USB_SHRINKSHIFT a 0 se si utilizza dispositivi USB esistenti.
  • L’opzione PRINT_FSAOPEN è utile ma estremamente lenta.
  • Testato solo su firmware 5.5.x (fw.img); non è stato portato su versioni precedenti.

Utilizzo dei plugin

I plugin consentono di applicare patch aggiuntive a IOSU. Per utilizzarli:

  1. Posizionare il plugin compilato (es. 00core.ipx) accanto a wafel_core.ipx nella directory sd:/wiiu/ios_plugins o /storage_slc/sys/hax/ios_plugins.
  2. All’avvio, minute caricherà automaticamente i plugin.
  3. Ogni plugin può implementare due hook:
    • void kern_main(): eseguito in modalità kernel prima di tutto il resto.
    • void mcp_main(): eseguito prima del thread principale di MCP; può generare nuovi thread.
  4. Entrambe le funzioni devono terminare (return), ma mcp_main() può avviare thread aggiuntivi.
  5. Un esempio di plugin è disponibile in wafel_plugin_example.

Patch di IOSU con Stroopwafel

Stroopwafel fornisce macro definite in wafel/patch.h per applicare patch a IOSU:

  • U32_PATCH_K(_addr, _val): Sovrascrive un indirizzo virtuale con un valore a 32 bit.
  • ASM_PATCH_K(_addr, _str): Applica codice assembly specificato come stringa, assemblato al momento della compilazione e copiato in runtime all’indirizzo specificato (non supporta riferimenti relativi esterni).
  • ASM_T_PATCH_K(_addr, _str): Come sopra, ma per codice Thumb.
  • BL_TRAMPOLINE_K(_addr, _dst): Genera un’istruzione BL relativa all’indirizzo specificato; non può saltare al codice del plugin (distanza eccessiva).
  • BL_T_TRAMPOLINE_K(_addr, _dst): Come sopra, ma per Thumb.
  • BRANCH_PATCH_K(_addr, _dst): Genera un’istruzione B relativa; non può saltare al codice del plugin.

Hook di IOSU con Trampolini

Stroopwafel offre funzioni in wafel/trampoline.h per agganciare codice C o assembly a IOSU:

  • trampoline_hook_before(uintptr_t addr, void *target): Crea un trampolino con un’istruzione BL per chiamare la funzione specificata, preservando i registri. Non supporta istruzioni con indirizzamento relativo al PC, tranne BL, che salta al target originale.
  • trampoline_t_hook_before(uintptr_t addr, void *target): Come sopra, ma per Thumb; sovrascrive due istruzioni (perché BL occupa 4 byte).
  • trampoline_blreplace(uintptr_t addr, void *target): Sostituisce una chiamata BL. La nuova funzione riceve i primi quattro argomenti (r0-r3), un puntatore al target originale e il LR salvato, seguiti dagli argomenti sullo stack.
  • trampoline_t_blreplace(uintptr_t addr, void *target): Come sopra, ma per Thumb.
  • trampoline_blreplace_with_regs(uintptr_t addr, void *target): Simile a trampoline_blreplace, ma salva anche i registri r4-r12 per usarli come argomenti.
  • trampoline_t_blreplace_with_regs(uintptr_t addr, void *target): Come sopra, ma per Thumb, salva r4-r7.

I trampolini supportano hook multipli sullo stesso indirizzo. Con blreplace, la funzione sostitutiva deve chiamare quella originale tramite il puntatore fornito per non interrompere la catena. Un esempio di trampolini è disponibile in wafel_trampoline_demo/source/main.c.

Interfaccia IPC

Stroopwafel fornisce un’interfaccia IPC personalizzata tramite il dispositivo /dev/stroopwafel, permettendo alle applicazioni userland di interagire con il kernel IOS. Questa interfaccia supporta operazioni di memoria, esecuzione di codice e molto altro.

Per un wrapper comodo per interagire con questa interfaccia, consulta libstroopwafel.

Informazioni tecniche dettagliate sui comandi e sulle strutture IPC sono disponibili in IPC.md.

Configurazione di USB_SHRINKSHIFT

Per utilizzare la funzionalità USB_SHRINKSHIFT (che consente di avere sia il filesystem Wii U che un filesystem normale sullo stesso dispositivo USB):

  • Formattare il dispositivo USB con una partizione FAT32 come prima partizione.
  • Creare una seconda partizione NTFS per il filesystem Wii U.
  • Assicuratevi che USB_SHRINKSHIFT sia abilitato (impostato a 1) nel file di configurazione (ios_process/source/config.h).
  • Collegare il dispositivo USB alla Wii U; la porzione Wii U sarà spostata dopo l’MBR per compatibilità.

Changelog

  • Disabilitato completamente il logging delle porte di debug, incluso debug_printf. Questo consente di risparmiare alcuni secondi durante l’avvio. Se necessario, è possibile riattivare il logging completo aggiungendo il plugin 5debug.ipx.

Assicurarsi di aggiornare anche il plugin payloader almeno alla versione 3.1 (5payldr.ipx)! Il tempo di avvio più rapido ha evidenziato una race condition nel payloader che ne causava il crash.

Download: Stroopwafel v2.2 pre-release (00core.ipx)

Download: Stroopwafel v2.2 pre-release (5debug.ipx)

Download: Source code Stroopwafel v2.2 pre-release

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS4

Vedi altri prodotti PS4

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-06-16 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.