Ps5sdk
Comme ce SDK est un travail en cours, il est sujet à des changements majeurs entre les versions jusqu'à ce qu'il approche une version stable (1.0). Ce dépôt...
Choisir une liste...
PS5 SDK
Remarque : Comme ce SDK est un travail en cours, il est sujet à des changements majeurs entre les versions jusqu'à ce qu'il approche d'une version stable (1.0).
Ce dépôt contient du code source et de la documentation pour une trousse de développement logiciel (SDK) pour le PS5. Il contient les en-têtes, bibliothèques et helpers pour construire des fichiers ELF pour la PS5. Actuellement, il est destiné principalement aux charges utiles à charger dans le chargeur ELF basé sur WebKit, bien qu'il peut également être utilisé pour la simple maisonbrew. C'estne peutconstruire des applications complètes appropriées pour le moment, car nous n'avons pas le soutien complet de la maisonbrew.
Les fichiers d'en-tête ainsi que le C Runtime (CRT) sont un WIP et nécessiteront une mise à jour; n'hésitez pas à fourcher et à soumettre des demandes de tirage pour mettre à jour le support. Ceci est particulièrement vrai pour les fonctions de bibliothèque spécifiques à Sony.
La bibliothèque standard C++ (STL) n'est pas prise en charge, bien que le C++ nu-métal devrait fonctionner.
Point d'entrée
Pour les demandes/charges,payload_main()est la routine d'entrée. Il fautstruct payload_argspointeur pour un argument. Ces arguments sont fournis par WebKit lors du chargement de l'ELF. Ils contiennent les informations nécessaires pour dlsym ainsi que le piratage du noyau si nécessaire. Cette structure est fournie dans leps5/payload_main.hheader, et devrait être inclus dans chaque projet.
struct payload_args
{
dlsym_t* dlsym;
int *rwpipe;
int *rwpair;
uint64_t kpipe_addr;
uint64_t kdata_base_addr;
int *payloadout;
};
dlsymetpayloadoutdevraient être ignorés car ils sont utilisés par le CRT en interne.rwpipe,rwpairetkpipe_addrdevrait être transmis à l'aide du noyaukernel_init_rw()à usage interne.kdata_base_addrest fourni pour faciliter le piratage du noyau. Pour voir comment ces args devraient être utilisés et comment le piratage du noyau fonctionne, voir lepipe_pirateexemple.
Soutien au piratage du noyau
Quelques exemplespipe_pirate) sont dépendants du firmware car ils ont des compensations qui sont spécifiques à ce FW. Pour ces types de projets, s'assurerPS5SDK_FWla variable d'environnement est définie. Par exemple, si vous ciblez 4.03,PS5SDK_FWdevrait être fixé à0x403. Voici les firmwares actuellement pris en charge pour le piratage du noyau:
- 3,00 (
0x300) - 3.20 (
0x320) - 3.21 (
0x321) - 4.02 (
0x402) - 4.03 (
0x403) - 4,50 (
0x450) - 4,51 (
0x451)
Les offsets qui sont courants comme ceux utilisés par les exemples sont dans/ps5/kernel_offsets.
Il y a unekernel_helperentête et support CRT pour lecture/écriture arbitraire. Pour plus d'informations, voirdocs/kernel_hacking.md
Dépendances
- Marque (version >= 3,20)
- Ninja
- Clang/lld
Construire le système
Ce SDK utilise cmake et ninja pour son système de construction. Le fichier de la chaîne d'outils peut être trouvé àcmake/toolchain-ps5.cmake. Si vous souhaitez construire un projet en dehors de l'arborescence source, assurez-vous dePS5SDKvariable d'environnement vers le chemin racine de ce dépôt.
La racineCMakeLists.txtconstruit le CRT en/crtet/examplesprojets. Chaque projet exemple a ses propres fichiers de construction, qui peuvent être référencés ou copiés à utiliser dans vos propres projets.
Instructions de construction
Premièrement, cloner ou extraire ce SDK dans un répertoire, et définir lePS5SDKvariable d'environnement pour le pointer. Ces instructions peuvent être utilisées pour la racine SDK ainsi que pour tous les projets utilisant l'exemple CMakeLists. La bibliothèque SDK doit être construite en premier si vous n'utilisez pas une version de sortie.
CLI
Note : Le script build.sh contient les commandes ci-dessous à exécuter facilement, en supposant que lePS5SDKenv var est réglé.
- Configurer cmake.
$ cmake -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_TOOLCHAIN_FILE=$PS5SDK/cmake/toolchain-ps5.cmake .
- Construire avec
ninja
$ ninja
IDE de clion
- Aller au fichier -> Paramètres -> Construire, exécuter, déployer -> faire
- Définir "C Make options":
-G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_TOOLCHAIN_FILE=[PS5 SDK root]/cmake/toolchain-ps5.cmake .
- Définir «Environnement» aux variables environnementales
PS5SDK=[PS5 SDK root]
PS5SDK_FW=[target FW]
Code VS
- Assurez-vous que ninja est disponible sur votre système et peut être trouvé dans votre PATH.
- Vous pourriez avoir besoin de mettre à jour
CMakePresets.json'stoolchainFilechemin vers[PS5 SDK root]/cmake/toolchain-ps5.cmake, particulièrement si construire en dehors de l'arbre source. - Une fois que vous ouvrez le projet, il devrait inviter à configurer cmake. Alternativement, allez à l'onglet "Make" et "Configurer tous les projets" + "Construire tous les projets"
Dlsym
Les symboles dynamiques de la bibliothèque sont résolus à l'exécution viadlsym()de libkernel. Ceci est géré par le CRT avant que le point d'entrée de la charge utile ne soit appelé. Les bibliothèques prises en charge dans le SDK auront un fichier source dans/crtainsi qu'un fichier d'en-tête/ps5. Avec le temps, nous ajouterons résolution et déclarations pour plus de fonctions.
Pour commencer, la plupart des fonctions de bibliothèque standard de libkernel/libc ont été ajoutées. Il y a quelques fonctions Sony qui ont été ajoutées grâce à l'inversion des efforts PS4.
Voirdocs/dlsym.mdpour plus d'informations sur la façon d'ajouter un support pour les fonctions ou les bibliothèques.
Licence
Ce projet est sous licence GPLv2 - voirLICENSEfichier pour les détails.
Mainteneurs + spéciaux Je vous remercie
- Spectre (mainteneur de plomb)
- Znullptr (responsable principal)
- ChendoChap (responsable principal)