Lo sviluppatore SciresM dopo il rilascio del firmware 13.1.0 ha rilasciato un nuovo aggiornamento di Atmosphère con la nuova versione 1.2.1. 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:
- Il supporto è stato implementato per 13.1.0.
mesosphère
è stato aggiornato per riflettere le modifiche comportamentali 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 dei dati non ancora trasmessi, ma ho maggiore fiducia che le cose andranno lisce rispetto a quando è stato rilasciato sulla 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 dell’atmosfera) 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 che tutti i componenti dell’atmosfera funzionino nel modo in cui dovrebbero teoricamente funzionare 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 dell’atmosfera) 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 attorno 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.