Lo sviluppatore SciresM quasi 72 ore dall’ultima release ha rilasciato un nuovo aggiornamento di Atmosphère con la nuova versione 1.2.2. Atmosphère è composto da più componenti, ognuno dei quali sostituisce/modifica un diverso componente del sistema:
- Fusée: First-stage Loader, responsabile del caricamento e della convalida della fase 2 (TrustZone personalizzato) più pacchetto2 (Kernel/FIRM sysmodules) e dell’applicazione delle patch necessarie. Sostituisce tutte le funzionalità normalmente in Package1loader/NX Bootloader.
- Sept: Payload utilizzato per abilitare il supporto per la derivazione della chiave di runtime su 7.0.0.
- Exosphère: TrustZone personalizzato, per eseguire un Secure Monitor personalizzato
- Thermosphère: supporto EL2 EmuNAND, ovvero backup e utilizzo di immagini NAND virtualizzate/reindirizzate
- Stratosphère: Custom Sysmodule(s), sia in stile Rosalina per estendere il kernel/fornire nuove funzionalità, sia dello stile di reimplementazione del loader per agganciare importanti azioni di sistema
- Troposphère: patch del sistema operativo Horizon a livello di applicazione, utilizzate per implementare le funzionalità CFW desiderabili
Qui sotto il changelog completo.
Changelog
Quanto segue è stato modificato rispetto all’ultima versione:
-
- Sono state apportate numerose correzioni all’implementazione di Atmosphère del nuovo servizio “sprofile” aggiunto in 13.0.0.
- Nintendo sta finalmente trasmettendo dati su Internet a determinate console, il che ha consentito di convalidare l’implementazione del nostro servizio.
- Sfortunatamente, c’erano diversi problemi e se la tua console iniziasse a provare a utilizzare i nuovi servizi atmosphère mostrerebbe un errore fatale con il codice 0xCAF6 (sprofile::ResultInvalidState()).
- Con i dati di test effettivi in mano, è stato scritto un programma di test ed è stato verificato che la nostra implementazione può importare/accedere con successo ai dati del profilo ora.
- Si spera che non ci siano più problemi e mi scuso sinceramente con chiunque abbia avuto un 0xCAF6 fatale a causa di questo.
- Nintendo sta finalmente trasmettendo dati su Internet a determinate console, il che ha consentito di convalidare l’implementazione del nostro servizio.
- Sono stati apportati alcuni piccoli miglioramenti a
mesosphère
, tra cui:- KThread::GetContextForSchedulerLoop è stato implementato in assembly (usando asserzioni statiche per verificare che offset-of-context-in-struct sia corretto).
- Ciò salva una chiamata di funzione non necessaria nel mezzo dell’hot loop dello scheduler, sostituendola con un’istruzione di addizione, che dovrebbe migliorare le microprestazioni.
- Le istruzioni di manutenzione dell’hardware di Mesosphère sono state controllate tramite uno script e ora corrispondono direttamente ai kernel di Nintendo.
- In particolare, questo inserisce una barriera di sincronizzazione delle istruzioni mancante durante la convalida che possono essere costruiti gli stack di lastre.
- Questo ISB mancante potrebbe causare un’interruzione su determinati hardware (vedi: particolarmente sensibili) all’avvio se il relativo codepath è stato eseguito speculativamente (normalmente viene eseguito solo all’avvio del gioco…)
- I gestori SVC per l’esecuzione di IPC leggeri (normalmente inutilizzati) dal processo a 32 bit sono stati corretti.
- È stato corretto un bug che causava la sovrascrittura del registro x27 con il contenuto di x26 al ritorno da un gestore di eccezioni utente.
- È stato corretto un bug che faceva sì che il kernel utilizzasse il puntatore dello stack userland invece del puntatore dello stack del kernel durante la generazione di un rapporto di errore per un’interruzione del kernel.
- KThread::GetContextForSchedulerLoop è stato implementato in assembly (usando asserzioni statiche per verificare che offset-of-context-in-struct sia corretto).
- Miglioramenti generali della stabilità del sistema per migliorare l’esperienza dell’utente.
E quanto segue è stato modificato in 1.2.1:
- Il supporto è stato implementato per 13.1.0.
mesosphère
è stato aggiornato per riflettere le modifiche al comportamento del kernel apportate nella 13.1.0.- KScheduler ora emette una barriera di memoria dei dati quando si sblocca il blocco dello scheduler e quando viene restituito anticipatamente a causa del thread superiore corrente durante la pianificazione.
erpt
è stato aggiornato per riflettere gli ultimi comportamenti ufficiali.- Il nuovo servizio aggiunto in 13.0.0 (“sprofile”) è stato rivisto e i formati di dati previsti sono stati modificati.
- Questo sembra essere ancora (forse(?)) non verificabile a causa del fatto che i dati non sono ancora stati trasmessi, ma ho maggiore fiducia che le cose andranno lisce rispetto a quando è stato rilasciato 1.1.0.
- Il nuovo servizio aggiunto in 13.0.0 (“sprofile”) è stato rivisto e i formati di dati previsti sono stati modificati.
- Sono stati apportati numerosi miglioramenti a
mesosphère
, tra cui:- È stato creato un target di build per costruire mirando alla
virt
scheda qemu .- Ciò facilita la scrittura di unit test per il kernel (e altri componenti di atmosphère) e l’esecuzione su PC.
- Nota : il software di sistema ufficiale non funzionerà affatto in questo modo e il progetto Atmosphère non ha alcun interesse nel tentare di eseguire software ufficiale di alcun tipo. Questo è un macchinario per il test delle unità, e esplicitamente non di più.
- Si spera che questo dovrebbe consentirci di avere maggiore fiducia nel fatto che tutti i componenti di atmosphère funzionino come dovrebbero teoricamente in futuro.
- Nota : se sei uno sviluppatore che ha familiarità con il sistema operativo Horizon (o è in grado di acquisire familiarità), apprezzerei molto l’aiuto nella scrittura di test e nel miglioramento del framework di test.
- Si prega di contattare
SciresM#0524
se si è capaci e interessati.- Davvero, se sei davvero uno sviluppatore che vorrebbe aiutarmi a far decollare questo, lo apprezzerei profondamente.
- Detto questo, se non sei uno sviluppatore ma vuoi esserlo, questa probabilmente non è la migliore opportunità; Mi aspetto che sia altamente tecnico.
- Considera il canale #hack-n-all di ReSwitched discord per i tuoi scopi educativi.
- Stiamo (almeno per ora) usando catch2 per i test unitari.
- Si prega di contattare
- Ciò facilita la scrittura di unit test per il kernel (e altri componenti di atmosphère) e l’esecuzione su PC.
- Quasi tutte le chiamate virtuali nel kernel sono ora risolte staticamente.
- Ciò elimina un notevole sovraccarico delle chiamate virtuali e dovrebbe portare a migliori prestazioni del kernel in quasi tutte le funzioni.
- Le restanti operazioni di ricerca dell’albero rosso nero che non utilizzavano la variante “chiave di ricerca” ottimizzata ora utilizzano la versione ottimizzata.
- L’assembly personalizzato è stato scritto per migliorare la conversione da tick a timespan.
- Funziona attorno a gcc che emette un assembly non ottimale a -Os (emette un buon assembly a -O3, clang va bene sia a -O3 che a -Os).
- Le strutture di KThread e KSession sono state aggiornate per ottimizzare il layout dei membri, salvando 0x10 byte per oggetto KThread/KSession.
- Invece di azzerare inutilmente tutti i dati negli oggetti del kernel solo per sovrascrivere i membri in un secondo momento, ora inizializziamo solo i membri di cui abbiamo bisogno nei costruttori di oggetti del kernel.
- Questo è ciò che Nintendo stava già facendo.
- È stato implementato un set di primitive atomiche ottimizzate personalizzate e vengono utilizzate al posto di std::atomic<>
- Funziona intorno a un bug gcc che riduce l’ordine di memoria specificato a seq_cst e introduce clrex nei punti in cui è appropriato.
- Questo dovrebbe migliorare rigorosamente le microprestazioni di molte chiamate di sistema.
- È stata aggiunta un’estensione attivabile in fase di compilazione per supportare gli indirizzi fisici a 40 bit nelle capacità di MapRange (usando i bit attualmente riservati).
- Sono stati corretti numerosi bug minori, tra cui:
- La gestione iniziale della cache ora riflette meglio il comportamento ufficiale.
- Questo risolve un problema che causava a determinati hardware con sensibilità della cache di produrre kernel panic criptici durante l’avvio.
- La logica errata durante il controllo delle capacità di priorità del thread è stata corretta per riflettere il comportamento ufficiale.
- Lo scheduler è stato aggiornato per riflettere l’ultimo comportamento ufficiale e sono stati corretti numerosi bug minori che coinvolgevano clz/ctz.
- Gli accessi alla regione locale dei processi sono stati corretti per utilizzare correttamente la regione lineare del kernel, non i puntatori di userland.
- Gli SVC della cache esposti per i processi a 32 bit ora riflettono meglio la semantica ufficiale della richiesta della maschera di base.
- È stato corretto un bug che poteva causare un kernel panic se SvcArbitrateLock veniva chiamato su un thread con esattamente un riferimento nel mezzo della gestione di un’eccezione in modalità utente.
- La gestione iniziale della cache ora riflette meglio il comportamento ufficiale.
- È stato creato un target di build per costruire mirando alla
- Miglioramenti generali della stabilità del sistema per migliorare l’esperienza dell’utente.
- Sono state apportate numerose correzioni all’implementazione di Atmosphère del nuovo servizio “sprofile” aggiunto in 13.0.0.