Reading time (calculated automatically): 16 minutes, 0 seconds
Note: This is by no means complete. Maybe there will be more parts down the road with more information as I learn them. Lots of it here is just info I gathered on the internet myself or learned by experimenting. So.. no TLDR :/
Update February 2020
The original Dockerfile used base image Ubuntu 17.10 which since then went EOL. I've updated it to use Ubuntu 18.04 LTS so compiling works again. Please update your sources.
Info
To even get started using this "guide" you have to have a jailbreakable PS4. At time of writing this is the PS4 System firmware version 5.05 because we are gonna use a OpenSource SDK for the PS4 which is (right now) only available for the Firmware 5.05 (or older) and a public available Kernel Exploit for the PS4.
Whats a kernel exploit?
Basically this triggers the PS4 into thinking its a debug machine - which will then allow code execution.
Setting everything up
We will set it up using a enviroment inside a docker container. If you don't want that, you can obviously just let it all run on your machine without virtualisation. First are the links we're gonna use inside a docker container, then I will show you how I ended up virtualizing all this by using docker.
- https://github.com/psxdev/ps4sdk/tree/firmware505 - Open Source SDK for PS4 Firmware 5.05
- https://github.com/orbisdev/liborbis - Libraries and samples /w the Open Source SDK
- https://github.com/psxdev/ps4link - We're gonna use this to "talk" to the PS4 and by injecting our own code. This is obviously just for debugging, later on you could compile your code to a single package.
And here is my docker solution (which I just forked, thanks again https://github.com/ooPo/ps4sdk-docker) on Github: https://github.com/pquerner/ps4sdk-docker.
You start by cloning the repository and then building the image.
Important: Make sure you open the Dockerfile in a texteditor and change the local ip address of your PS4. This is important because ps4sh will be compiled to target that ip address only.
This will take some time as it will compile the SDK and other tools for you. Depending on your machine it can take up to 30 minutes.
git clone https://github.com/pquerner/ps4sdk-docker.git cd ps4sdk-docker docker build --rm==false -t ps4sdk-docker .
After thats done, the enviroment is set up and you can start by compiling examples found in this repository https://github.com/orbisdev/liborbis/tree/master/samples. We'll get to that in the next step.
- [x] SDK installation
- [ ] Write and compile first own code
- [ ] Execute on PS4
Write and compile first own code
Now that we have the proper tools to build our tools against an SDK, we shall do so! For this blog post however I use a pre existing example which can be found in the liborbis repository I mentioned earlier. Also I assume you copied the helper script ps4sdk-docker.sh
to your $PATH
variable to easier access it. So, clone the liborbis repository and cd
into a samples folder. I use the "starfield" demo.
git clone https://github.com/orbisdev/liborbis.git cd liborbis/samples/starfield ps4sdk-docker.sh make
The command "make" runs the Makefile
inside the starfield
folder - within the docker container.
After its compiled you'll find 2 new folders: bin and build. The bin folder actually contains the build homebrew.elf - ready to get send to the PS4!
➜ starfield git:(master) ls -lah total 28K drwxr-xr-x 6 pascal pascal 4,0K Mär 13 21:10 . drwxr-xr-x 10 pascal pascal 4,0K Dez 30 12:39 .. drwxr-xr-x 2 root root 4,0K Mär 13 21:10 bin drwxr-xr-x 2 root root 4,0K Mär 13 21:10 build drwxr-xr-x 2 pascal pascal 4,0K Dez 30 06:58 include -rw-r--r-- 1 pascal pascal 476 Dez 30 06:58 Makefile drwxr-xr-x 2 pascal pascal 4,0K Dez 30 06:58 source ➜ starfield git:(master) ls -lah build total 24K drwxr-xr-x 2 root root 4,0K Mär 13 21:10 . drwxr-xr-x 6 pascal pascal 4,0K Mär 13 21:10 .. -rw-r--r-- 1 root root 11K Mär 13 21:10 main.c.o -rw-r--r-- 1 root root 3,4K Mär 13 21:10 starfield.c.o ➜ starfield git:(master) ls -lah bin total 676K drwxr-xr-x 2 root root 4,0K Mär 13 21:10 . drwxr-xr-x 6 pascal pascal 4,0K Mär 13 21:10 .. -rwxr-xr-x 1 root root 666K Mär 13 21:10 homebrew.elf
Now that we build injectable .elf file we can go to the next step - running it on the PS4.
Note: Some samples try to load media assets. If the assets are not found within the correct folder from where you are sending the homebrew.elf
, the app will do nothing and simply show you a blackscreen on your TV screen.
- [x] SDK installation
- [x] Write and compile first own code
- [ ] Execute on PS4
Execute on PS4
We're gonna use the tool ps4sh
to "talk" to the PS4 and inject our compiled homebrew.elf
with the help of the tool orbislink
.
Note: To my knowledge homebrew.elf
is hardcoded within orbislink. Therefore you should just stick with that name and dont rename that file. Else it might not work.
First download and install orbislink on your PS4. Bring your PS4 into debug mode (you should know how) and install it.
At time of writing the orbislink tool was released with a hardcoded "server" ip address, therefor the computer you run ps4sh from must have the ip address 192.168.1.3
. Best way to do this is give your machine manually the ip address. Either on the machine itself (must disable DHCP for this) or in your router. Consult your routers handbook or the internet.
sh
into the docker container by calling the helper script: ps4sh-docker.sh
(again, assuming thats in your $PATH
or you are within the docker repository directory).
Within the docker container there are several aliases you can use. Consult the Dockerfile or README.txt to get to know them. Copy all needed assets (for example the starfield demo uses an asset called zweifeld.mod
- which is a audio file. (I added it to the repository in case you cannot find it on the internet, its just a audio file so you could use a different audio, convert it to .mod and rename the file - or change the filename in the main.c or completely disable that line and recompile it) --> https://github.com/orbisdev/liborbis/blob/2e67a9b9111345bb6aec1dd15b533d50faecd055/samples/copperbars/source/main.c#L258) and the homebrew.elf to the PS4SH
directory inside the docker container. (Alias elfcp
and enviroment variable $PS4SH
may help you.).
This is how my ps4sh
directory looks like with the starfield demo:
root@honeycomb:/usr/local/ps4dev/ps4link/ps4sh/bin# ls -lah total 772K drwxr-xr-x 1 root root 4.0K Dec 30 01:59 . drwxr-xr-x 1 root root 4.0K Dec 30 01:59 .. -rwxr-xr-x 1 root root 666K Dec 30 01:59 homebrew.elf -rwxr-xr-x 1 root root 59K Dec 30 01:59 ps4sh -rw-r--r-- 1 root root 34K Dec 30 01:59 zweifeld.mod
Start ps4sh
(with alias ps4sh
is quickest).
You should see ps4sh started and waiting for commands:
root@honeycomb:~# ps4sh ps4sh version 1.0 Verbose mode on log: [HOST][INFO]: [PS4SH] Ready ps4sh>
Typing help
shows you all available commands
ps4sh> help ? ? :: Synonym for `help'.. connect connect :: Connect to ps4sh.. cd cd [dir] :: Change ps4sh directory to [dir].. debug debug :: Show ps4sh debug messages. ( alt-d ). exit exit :: Exits ps4sh ( alt-q ). help help :: Display this text.. list list [dir] :: List files in [dir].. log log [file] :: Log messages from PS4 to [file].. ls ls [dir] :: Synonym for list. make make [argn] ... :: Execute make [argn] .... gmake gmake [argn] ... :: Execute gmake [argn] .... pwd pwd :: Print the current working directory ( alt-p ). quit quit :: Quit pksh ( alt-q ). setroot setroot [dir] :: Sets [dir] to be root dir.. status status :: Display some ps4sh information. ( alt-s ). execuser execuser :: Load and exec user elf. .... execkernel execkernel :: Load and exec kernel elf. .... exitps4 exitps4 :: Finish ps4link in ps4 side. .... execdecrypt decrypt :: decrypt file in ps4 side and dump to host0. .... execwhoami execwhoami :: show uid and gid in ps4 side. .... execshowdir execshowdir :: list file from directory in ps4 side. .... verbose verbose :: Show verbose ps4sh messages. ( alt-v ). ps4sh>
If orbislink is running on the PS4 you may connect to it via command connect
.
ps4sh> connect log: [HOST][INFO]: [PS4SH] Connecting to fio ps4link ip 192.168.1.5 log: [HOST][INFO]: [PS4SH] PlayStation is listening at 192.168.1.5 log: [PS4][INFO]: [PS4LINK] sock ps4link_fileio set 15 connected 1 log: [PS4][DEBUG]: [ORBISLINK] Initialized and connected from pc/mac ready to receive commands log: [PS4][INFO]: [PS4LINK] Waiting for connection log: [PS4][DEBUG]: liborbispad sceUserServiceInitialize return 0x 0! log: [PS4][DEBUG]: liborbispad scePadInit return 0 log: [PS4][DEBUG]: liborbispad scePadOpen return handle 0x 3040500 log: [PS4][DEBUG]: liborbis2d sceVideoOutOpen return video handle 0x4e110100 log: [PS4][DEBUG]: sceKernelCreateEqueue return 0 log: [PS4][DEBUG]: liborbis2d sceVideoOutAddFlipEvent return 0 log: [PS4][DEBUG]: liborbis2d video memory initialized log: [PS4][DEBUG]: liborbis2d orbis2dMalloc buffer 0, new pointer 210e00000 log: [PS4][DEBUG]: liborbis2d orbis2dMalloc buffer 1, new pointer 211184000 log: [PS4][DEBUG]: liborbis2d orbis2dAllocDisplayBuffer done log: [PS4][DEBUG]: liborbis2d sceVideoOutSetBufferAttribute done log: [PS4][DEBUG]: liborbis2d sceVideoOutRegisterBuffers return 0x 0 log: [PS4][DEBUG]: liborbis2d initialized log: [PS4][DEBUG]: [ORBISLINK] orbis2dInit return 1 log: [PS4][DEBUG]: [orbisAudio] sceAudioOutInit return 0 log: [PS4][DEBUG]: [orbisAudio] initialized! log: [PS4][DEBUG]: [orbisAudio] buffers 0 for audio 0 d3c820 created log: [PS4][DEBUG]: [orbisAudio] buffers 1 for audio 0 d3d840 created log: [PS4][DEBUG]: [orbisAudio] buffers for audio channel 0 created log: [PS4][DEBUG]: [orbisAudio] sceAudioOutOpen 1024 samples log: [PS4][DEBUG]: [orbisAudio] sceAudioOutOpen handle 20000007 log: [PS4][DEBUG]: [orbisAudio] audio channel 0 thread UID: 0x81D05BC0 created log: [PS4][DEBUG]: orbisAudioChannelThread channel 0 log: [PS4][DEBUG]: orbisAudioChannelThread channel samples 0 1024 log: [PS4][DEBUG]: orbisAudioChannelThread channel samples 1 1024 log: [PS4][DEBUG]: orbisAudioChannelThread buffer 0 d3c820 log: [PS4][DEBUG]: orbisAudioChannelThread buffer 1 d3d840 log: [PS4][DEBUG]: [orbisAudio] orbisAudioChannelThread 0 1 ready to have a lot of fun... log: [PS4][DEBUG]: [ORBISLINK] orbisAudioInitChannel return 0 log: [PS4][DEBUG]: liborbiskeyboard is initialized! log: [PS4][DEBUG]: orbisKeyboardInit 1 log: [PS4][DEBUG]: liborbiskeyboard sceImeKeyboardOpen in log: [PS4][DEBUG]: liborbiskeyboard orbisKeyboardConf not null log: [PS4][DEBUG]: liborbiskeyboard sceImeKeyboardOpen return success 0 log: [PS4][DEBUG]: orbisKeyboardOpen 0 log: [HOST][DEBUG]: [PS4SH] Opening homebrew.elf flags 0 log: [HOST][DEBUG]: [PS4SH] Open return 8 log: [PS4][DEBUG]: [ORBISLINK]Loading homebrew.elf from host log: [PS4][DEBUG]: [ORBISLINK] orbisExecUserElf called log: [PS4][DEBUG]: [PS4LINK] file open req (host0:homebrew.elf, 0 0) log: [PS4][DEBUG]: [PS4LINK] file open reply received (ret 8) log: [PS4][DEBUG]: [PS4LINK] file lseek req (fd: 8) log: [HOST][DEBUG]: [PS4SH] 681256 result of lseek 0 offset 2 whence log: [PS4][DEBUG]: [PS4LINK] ps4link_lseek_file: lseek reply received (ret 681256) log: [PS4][DEBUG]: [PS4LINK] file lseek req (fd: 8) log: [HOST][DEBUG]: [PS4SH] 0 result of lseek 0 offset 0 whence log: [PS4][DEBUG]: [PS4LINK] ps4link_lseek_file: lseek reply received (ret 0) log: [PS4][DEBUG]: [ORBISLINK] before orbisSysMmap log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: Reply said there's 681256 bytes to read (wanted 681256) log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 0 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 1 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 2 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 3 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 4 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 5 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 6 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 7 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 8 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 9 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 10 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 11 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 12 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 13 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 14 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 15 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 16 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 17 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 18 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 19 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 20 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 21 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 22 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 23 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 24 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 25 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 26 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 27 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 28 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 29 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 30 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 31 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 32 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 33 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 34 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 35 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 36 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 37 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 38 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 39 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 40 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 41 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 42 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 43 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 44 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 45 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 46 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 47 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 48 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 49 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 50 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 51 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 52 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 53 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 54 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 55 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 56 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 57 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 58 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 59 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 60 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 61 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 62 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 63 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 64 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 65 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 66 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 67 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 68 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 69 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 70 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 71 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 153 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 154 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 155 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 156 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 157 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 158 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 159 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 160 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 161 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 162 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 163 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 164 readed 4096 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 165 readed 5416 log: [HOST][DEBUG]: [PS4SH] took 0.460s log: [PS4][DEBUG]: [PS4LINK] ps4link_file: file close req (fd: 8) log: [PS4][DEBUG]: [PS4LINK] ps4link_close_file: close reply received (ret 0) log: [PS4][DEBUG]: [ORBISLINK] orbisExecUserElf ready to run elf log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun malloc for argument log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after malloc for argument log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after ps4MemoryProtectedCreate log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after ps4MemoryProtectedGetWritableAddress writable=21cea8000 log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after ps4MemoryProtectedGetExecutableAddress executable=21cea8000 log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate in segments length=8 log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21cea8040 21ce00040 448 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21cea8200 21ce00200 28 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21cea8000 21ce00000 452300 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21d116ed0 21ce6eed0 152800 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate orbisMemorySet log: [PS4][DEBUG]: [ORBISLINK] orbisMemorySet before memset log: [PS4][DEBUG]: [ORBISLINK] orbisMemorySet after memset log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate orbisMemorySet log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21d116ed0 21ce6eed0 304 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21cf12558 21ce6a558 2836 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate before elfLoaderInstantiate memcpy 21d116ed0 21ce6eed0 304 log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy before memcpy log: [PS4][DEBUG]: [ORBISLINK] orbisMemoryCopy after memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderInstantiate after elfLoaderInstantiate memcpy log: [PS4][DEBUG]: [ORBISLINK] elfLoaderLoad after elfLoaderInstantiate return=0 log: [HOST][DEBUG]: [PS4SH] Opening zweifeld.mod flags 0 log: [HOST][DEBUG]: [PS4SH] Open return 8 log: [PS4][DEBUG]: [ORBISLINK] elfLoaderLoad after elfLoaderRelocate return=0 log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after elfLoaderLoad return r=0 readable=21cea8000 executable=21cea8000 log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after set argument->main 21cedf050 log: [PS4][DEBUG]: [ORBISLINK] orbisUserRun after elfDestroyAndFree log: [PS4][DEBUG]: [ORBISLINK] New user elf thread UID: 0x81D06040 log: [PS4][DEBUG]: [ORBISLINK] orbisUserMain Configuration pointer 32c7e518, pointer_conf string 32c7e518 log: [PS4][INFO]: debugnet already initialized using configuration from ps4link log: [PS4][INFO]: debugnet_initialized=1 SocketFD=13 logLevel=3 log: [PS4][INFO]: ready to have a lot of fun... log: [PS4][INFO]: ps4link already initialized using configuration from ps4link log: [PS4][INFO]: ps4link_fileio_active=1 log: [PS4][INFO]: ps4link_cmdsio_active=1 log: [PS4][INFO]: ps4link_initialized=1 log: [PS4][INFO]: ps4link_requests_port=18193 log: [PS4][INFO]: ps4link_commands_port=18194 log: [PS4][INFO]: ps4link_debug_port=18194 log: [PS4][INFO]: ps4link_fileio_sock=15 log: [PS4][INFO]: ps4link_requests_sock=14 log: [PS4][INFO]: ps4link_commands_sock=16 log: [PS4][DEBUG]: [PS4LINK] Initialized and connected from pc/mac ready to receive commands log: [PS4][DEBUG]: liborbisPad already initialized using configuration external log: [PS4][DEBUG]: orbispad_initialized=1 log: [PS4][DEBUG]: ready to have a lot of fun... log: [PS4][DEBUG]: liborbis2d already initialized using configuration external log: [PS4][DEBUG]: orbis2d_initialized=1 log: [PS4][DEBUG]: ready to have a lot of fun... log: [PS4][DEBUG]: caching framebuffersize: 3686400b log: [PS4][DEBUG]: liborbisaudio already initialized using configuration external log: [PS4][DEBUG]: orbisaudio_initialized=1 log: [PS4][DEBUG]: ready to have a lot of fun... log: [PS4][DEBUG]: [PS4LINK] file open req (host0:zweifeld.mod, 0 0) log: [PS4][DEBUG]: [PS4LINK] file open reply received (ret 8) log: [PS4][DEBUG]: [PS4LINK] file lseek req (fd: 8) log: [HOST][DEBUG]: [PS4SH] 34148 result of lseek 0 offset 2 whence log: [PS4][DEBUG]: [PS4LINK] ps4link_lseek_file: lseek reply received (ret 34148) log: [PS4][DEBUG]: [PS4LINK] file lseek req (fd: 8) log: [HOST][DEBUG]: [PS4SH] 0 result of lseek 0 offset 0 whence log: [PS4][DEBUG]: [PS4LINK] ps4link_lseek_file: lseek reply received (ret 0) log: [HOST][DEBUG]: [PS4SH] read 34148 bytes of file descritor 8 log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: Reply said there's 34148 bytes to read (wanted 34148) log: [PS4][DEBUG]: [PS4LINK] ps4link_read_file: chunk 0 readed 34148 log: [PS4][DEBUG]: [PS4LINK] ps4link_file: file close req (fd: 8) log: [HOST][DEBUG]: [PS4SH] took 0.033s log: [PS4][DEBUG]: [PS4LINK] ps4link_close_file: close reply received (ret 0) log: [PS4][DEBUG]: In play 0 log: [PS4][DEBUG]: In play m_bPlaying 1 log: [PS4][DEBUG]: orbis2dDumpBuffer() ps4sh>
If everything worked correctly, you shouls see the demo running on your PS4 - the ps4sh shell might also hint you when somethings not right.
That blog post now concludes how you can execute own code on your ps4 with the help of an OpenSource SDK.
Good luck and show me your results sometime! :)
- [x] SDK installation
- [x] Write and compile first own code
- [x] Execute on PS4