Sono trascorsi diversi anni dall’ultimo aggiornamento di OpenOrbis PS4 Toolchain, la suite di strumenti open-source dedicata allo sviluppo di applicazioni homebrew per console PlayStation 4 jailbroken.
Con l’evoluzione costante della scena homebrew, era necessario un aggiornamento per restare al passo con gli sviluppi più recenti.
Questa nuova versione introduce numerosi miglioramenti e correzioni di bug, tra cui la risoluzione di errori di compilazione, l’aggiunta di nuove definizioni per la gestione dei trofei e delle applicazioni, il supporto per estensioni di controller e nuove funzioni di rete.
Sono stati inoltre aggiornati diversi file di sistema, migliorata la gestione dei dialoghi e delle sezioni ELF e introdotti aggiornamenti per la compatibilità con LLVM 14+.
L’aggiornamento include anche ottimizzazioni per le librerie di sistema, miglioramenti alla struttura del kernel e nuove definizioni per il driver Gnm e il sistema video.
Roadmap
Nei prossimi aggiornamenti è prevista l’aggiunta di quanto segue:
- v0.6 – Strumenti di debug (debugger, integrazione VS).
- v0.7 – Finalizzare il supporto per il rendering GPU.
- v1.0 – Rilascio stabile che funziona senza problemi e ha le discrepanze di intestazione per lo più risolte.
Documentazione
La documentazione specifica per lo strumento può essere trovata insieme al codice sorgente. La sottodirectory docs
contiene anche materiali e documentazione aggiuntivi. Di seguito è riportata una panoramica dello scopo di ciascuna sottodirectory:
Directory | Contenuti |
/bin | Eseguibili per strumenti per ogni piattaforma (Windows in /bin/windows , Linux in /bin/linux e macOS in /bin/macos ) |
/docs | Documentazione per le specifiche del formato PS4 (reverse engineering) e la toolchain stessa. |
/extra | File extra/varie. Attualmente, questo include i modelli di progetto per Visual Studio. |
/include | Contiene intestazioni specifiche per PS4 + EGL/GLES e freetype. |
/lib | Segnaposto per i file di libreria creati. |
/samples | Programmi di esempio per iniziare e per riferimento. |
/scripts | Script utili per visualizzare le informazioni Orbis ELF (OELF) e altri vari strumenti. |
/src | Contiene il codice sorgente per CRT, moduli e modelli VS. |
Setup e installazione
La toolchain clang e il linker llvm (lld) sono necessari per compilare e collegare utilizzando questo SDK. Per Windows, questi possono essere scaricati utilizzando i file binari predefiniti forniti da LLVM. Per Linux e macOS, la stessa pagina contiene file binari predefiniti, tuttavia è anche possibile usare i seguenti comandi (Debian/Ubuntu):
sudo apt-get update
sudo apt-get install clang
sudo apt-get install lld
Nel caso in cui si utilizzi un derivato Arch:
sudo pacman -S clang
sudo pacman -S lld
Gli utenti macOS possono utilizzare Homebrew per installare una copia pura di LLVM (la versione Apple non funzionerebbe con la toolchain).
brew install llvm
In futuro, potremmo includere binari predefiniti per clang/lld, tuttavia per il momento è necessario installarli separatamente, è inoltre necessario impostare la variabile di ambiente OO_PS4_TOOLCHAIN
.
Su Windows, questo può essere fatto utilizzando il pannello di controllo delle variabili d’ambiente. Su Linux e macOS, è possibile aggiungere il seguente comando a ~/.bashrc
(Debian/Ubuntu), ~/.bash_profile
(macOS Mojave e inferiore) o ~/.zshrc
(macOS Catalina):
export OO_PS4_TOOLCHAIN=[directory di installazione]
Ciò è necessario affinché gli script di compilazione e lo strumento di conversione sappiano dove cercare determinati file. Si consiglia inoltre di aggiungere la directory root SDK + /bin
alla variabile del percorso.
Windows Installer
Per PC Windows, viene fornito un programma di installazione tramite script Nullsoft, che automatizzerà il processo di estrazione dei file della toolchain e l’impostazione della variabile di ambiente OO_PS4_TOOLCHAIN
.
Linux
Per Linux, dopo aver installato le dipendenze richieste e aver impostato la variabile d’ambiente come indicato sopra, ti consigliamo di eseguire lo script setup-toolchain.sh
in /extra
. Ciò contrassegnerà tutti i file binari di Linux come eseguibili, poiché per impostazione predefinita sono in lettura/scrittura.
macOS
Per macOS, viene fornito un programma di installazione PKG, che automatizzerà il processo di estrazione dei file della toolchain e l’impostazione della variabile di ambiente OO_PS4_TOOLCHAIN
nelle shell bash e zsh.
Creazione di progetti homebrew
Per Windows, /extra
fornisce modelli di Visual Studio che possono essere aggiunti nella directory dei modelli dell’installazione VS per consentire una facile creazione di progetti homebrew, è inoltre possibile copiare e modificare le soluzioni dagli esempi forniti.
Per Linux e macOS, /extra
contiene uno script setup-project.sh
che creerà una directory di progetto basata sull’esempio hello_world
.
Strumenti
Ogni strumento avrà un file README.md
dedicato con informazioni più specifiche sullo strumento. Di seguito viene elencata una panoramica generica degli strumenti inclusi attualmente nella toolchain.
create-eboot
Lo strumento create-eboot
prende i normali file ELF (Executable Linkable Format) ed esegue le patch e il ricollegamento necessari per creare un ELF (OELF) Orbis.
Prenderà ulteriormente questo OELF e lo trasformerà in Signed Executable Linkable Format (SELF). Ciò è stato reso possibile grazie al precedente lavoro di flatz sullo script make-fself.py
, che può essere trovato in /scripts
. Per ulteriori informazioni su questi formati, consultare il wiki o /docs
.
Autore: Specter + flatz (fself stuff)
create-lib
Lo strumento create-lib
è simile allo strumento create-eboot
, tuttavia produce file della libreria Playstation Relocatable eXecutable (PRX) da un determinato file ELF.
Autore: Specter + flatz (fself stuff)
create-pkg
Lo strumento create-pkg
prende una serie di file che le applicazioni dovrebbero avere (eboot.bin
, param.sfo
, moduli necessari, ecc..) e crea un file di pacchetto (pkg) che può essere installato su PS4.
Autore: maxton
stub-generator
Il generatore di stub genera i file header e i file delle librerie condivise (.so
) per il collegamento con le librerie di sistema PS4. L’output di questo strumento è disponibile in /include/orbis
e in /lib
. Queste directory sono essenziali per collegarsi correttamente con le librerie PS4.
Autore: CrazyVoid
miralib
La libreria miralib
contiene codice C# e Python per interagire con Mira sul lato desktop delle cose. Ciò include la gestione di un elenco locale di console, la connessione a una console e l’esecuzione di varie azioni una volta connesse tramite RPC.
Autore: Specter + Kiwi
assistant
Assistant è in realtà una suite di strumenti per aiutare nello sviluppo di homebrew per PS4. Ciò include un visualizzatore di registri, un debugger, un launcher per Mira e un’applicazione della barra delle applicazioni per avviarli facilmente.
Autore: Specter
readelf replacement
Questo è uno strumento sostitutivo per la lettura di file ELF compatibili con PS4, altrimenti noto come ELF Orbis (OELF).
Autore: Specter
Script
Tutti gli script presenti nella directory /scripts
sono script Python 3, specifici per Python 3.7.0, ad eccezione di /scripts/make_fself.py
. Avrai bisogno di Python installato sul tuo sistema per eseguire questi script. L’uso di questi script è disponibile in /scripts/README.md
.
autobuild.py
– è uno script per la generazione automatica di file pkg basato sul contenuto della directory del progetto (potrebbe essere instabile, attendere la compilazione del rilascio).
dynamic_entries.py
– Questo script ottiene un elenco di voci dinamiche dalla tabella dinamica degli ELF Orbis.
make_fself.py
– Copia dello script flatz’ per generare file SELF falsi. Questa funzionalità è stata ora integrata come parte di create-eboot
e create-lib
.
program_headers.py
– Ottiene un elenco di intestazioni del programma dalla tabella delle intestazioni del programma degli ELF Orbis.
rela_entries.py
– Ottiene un elenco di voci di trasferimento con aggiunta (RELA) dalla tabella di trasferimento degli ELF Orbis.
symbol_entries.py
– ottiene un elenco di simboli dalla tabella dei simboli degli ELF Orbis.
Changelog
- Correzione della definizione di OrbisSaveDataParam da parte di @bucanero
- Correzione dell’errore di compilazione in
SaveData.h
in #173 - Aggiornamento di
SystemService.h
per includere la dipendenza da parte di @Al-Azif - Esempio Piglet: censura di sceKernelDlsym da parte di @sleirsgoevy
libkernel.h
: aggiunta della definizione di scePthreadSelf da parte di @Cpasjuste- Aggiunta di metodi RegMgr da parte di @bucanero
- .NET Core 3.0 Runtime richiesto per eseguire LibOrbisPkg da parte di @illusion0001
- Aggiornamento di
libkernel.h
da parte di @Backporter - Reintroduzione dell’esempio di tastiera (corretto un errore di battitura) da parte di @Klairm
- Rimozione della versione specifica dal Dockerfile da parte di @Al-Azif
- Correzione di #178 da parte di @Al-Azif
- Aggiunta del supporto ai trofei e di un esempio per il sistema trofei da parte di @Backporter
- Aggiunta di un esempio HTTP da parte di @bucanero
- Aggiunta di un esempio MsgDialog da parte di @bucanero
- Aggiornamento di
Rtc.h
da parte di @Backporter - Aggiunta di metodi
sceNetResolver...()
da parte di @bucanero - Correzione della struttura del firmware, correzione degli argomenti di sceKernelFstat e sceRtcCurrentClockLocalTime, aggiunta di strutture di error dialog e definizioni di funzioni, aggiunta di definizioni Np da parte di @Backporter
- Per comodità, aggiunta di 2 tag XML a
MyTemplate.vstemplate
da parte di @SummerFalls - Aggiornamento del fliprate e Screenshot Overlay Stub da parte di @illusion0001
- CI: correzione della build da parte di @illusion0001
- Aggiunta di metodi user service da parte di @bucanero
- Aggiornamento dello script bash per escludere cartelle non make da parte di @illusion0001
- dialogs: utilizzo di
show_dialog
per l’esempio di condizione da parte di @illusion0001 - Forzatura della visualizzazione delle sezioni sce nell’ELF da parte di @nkrapivin
- Spostamento di fliprate in enum da parte di @illusion0001
- Aggiornamento delle definizioni di ScreenShot da parte di @illusion0001
- Aggiunta del tipo di dati appinfo e relative funzioni da parte di @OSM-Made
- Definizione di alcune funzioni di rete da parte di @OSM-Made
- Correzione della build net http da parte di @illusion0001
- Aggiornamento dei badge del readme da parte di @illusion0001
- CI: Download delle ultime release dagli URL da parte di @illusion0001
- Aggiunta di definizioni da parte di @bucanero
- Correzione delle definizioni C da parte di @bucanero
- Aggiunta delle definizioni sceUsbd da parte di @InvoxiPlayGames
- Aggiornamento di
save_data.h
da parte di @illusion0001 - Correzione dell’ordine di
#endif
da parte di @illusion0001 - Aggiunta di alcune definizioni per GnmDriver e VideoOut da parte di @pipehuffer
- Aggiunta del supporto ai controller di estensione nell’header
Pad.h
da parte di @InvoxiPlayGames - kernel: sostituzione dei tipi BSD con quelli stdint nei flag di kevent da parte di @pipehuffer
- Aggiornamento di scePadReadExt e scePadReadStateExt da parte di @illusion0001
- Ridenominazione di int in int32_t e unsigned int in uint32_t da parte di @illusion0001
- Aggiornamento di
.gitignore
da parte di @illusion0001 - Correzione della build per llvm 14+ da parte di @illusion0001
- Correzione di simboli non definiti da parte di @illusion0001
- Modifica di
sys/time.h
intime.h
insave_data.h
in #238 - Aggiunta di informazioni mancanti sui dati di salvataggio da parte di @xXxTheDarkprogramerxXx
- Definizioni per l’avvio delle app (da @LightningMods) da parte di @illusion0001
- Conversione delle definizioni macro in enum da parte di @illusion0001
- Correzione dei tipi di protezione della mappa da parte di @illusion0001
- Aggiornamento di
libmonovm.h
da parte di @kiwidoggie - GnmDriver: aggiunta di definizioni per SetEmbeddedShader e DrawIndexAuto da parte di @pipehuffer
- Aggiornamento di
CommonDialog.h
da parte di @illusion0001 - Aggiornamento della versione CRT a 1.00 per consentire la build su firmware più vecchi da parte di @kiwidoggie
- Creazione di una libreria stub da file separato da parte di @0xcaff
- Aggiornamento delle versioni delle action e rebuild mensile da parte di @illusion0001
Video
Download: OpenOrbis PS4 Toolchain v0.5.3
Download: Source code OpenOrbis PS4 Toolchain v0.5.3
Fonte: github.com