You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vita-toolchain/README.md

111 lines
4.7 KiB
Markdown

vita-toolchain
==============
These are a set of tools that, along with an ARM compiler and linker, provides a
build system for PlayStation Vita(TM). Look at
[buildscripts](https://github.com/vitasdk/buildscripts) for more information on
building the complete toolchain with binutils/gcc/newlib. As such, this repo
only contains Vita specific host tools. Check out the
[specifications](doc/specifications.pdf) for more details on the Vita executable
format, these tools, and their inputs/outputs (including the YAML configuration
format).
### vita-elf-create
```
usage: vita-elf-create [-v|vv|vvv] [-n] [-e config.yml] input.elf output.velf
-v,-vv,-vvv: logging verbosity (more v is more verbose)
-n : allow empty imports
-e yml : optional config options
input.elf : input ARM ET_EXEC type ELF
output.velf: output ET_SCE_RELEXEC type ELF
```
Converts a standard `ET_EXEC` ELF (outputted by `arm-vita-eabi-gcc` for example)
to the Sony ELF format.
### vita-elf-export
```
usage: vita-elf-export mod-type elf exports imports
mod-type: valid values: 'u'/'user' for user mode, else 'k'/'kernel' for kernel mode
elf: path to the elf produced by the toolchain to be used by vita-elf-create
exports: path to the config yaml file specifying the module information and exports
imports: path to write the import yaml generated by this tool
```
Creates an import database YAML from a Sony ELF and config YAML. This import
database is a YAML file (not to be confused with the config YAML file) which
defines the NID mappings for a given module. This can be used by other tools for
debugging and reversing purposes.
### vita-libs-gen
```
usage: vita-libs-gen nids.yml [extra.yml ...] output-dir
-c: Generate CMakeLists.txt instead of a Makefile
```
Given a list of import database YAML files (either from `vita-elf-create` or
manually written by hackers for Sony owned modules), this will generate stub
libraries that can be linked to such that `vita-elf-create` can properly
generate a Sony ELF. After calling `vita-libs-gen` you need to run `make` or
`cmake` in the output directory to build the stubs.
### vita-make-fself
```
usage: vita-make-fself [-s|-ss] [-c] input.velf output-eboot.bin
-s : Generate a safe eboot.bin. A safe eboot.bin does not have access
to restricted APIs and important parts of the filesystem.
-ss: Generate a secret-safe eboot.bin. Do not use this option if you don't know what it does.
-c : Enable compression.
```
Generates a FSELF (the format expected of `eboot.bin` loaded by Vita) which
wraps around the Sony ELF file. Optionally supports compression of the input
ELF. Also allows marking a homebrew as "safe", which prevents it from harming
the system.
### vita-mksfoex
```
usage: mksfoex [options] TITLE output.sfo
-d NAME=VALUE Add a new DWORD value
-s NAME=STR Add a new string value
````
Generates a `param.sfo` file for a given title. `param.sfo` is required to
launch a homebrew from LiveArea. The `TITLE` id can be anything but it is
recommended that you use `XXXXYYYYY` where `XXXX` is an author specific
identifier and `YYYYY` is a unique number identifying your homebrew. For
example, molecularShell uses `MLCL00001`.
### vita-pack-vpk
```
Usage:
vita-pack-vpk [OPTIONS] output.vpk
-s, --sfo=param.sfo sets the param.sfo file
-b, --eboot=eboot.bin sets the eboot.bin file
-a, --add src=dst adds the file src to the vpk as dst
-h, --help displays this help and exit
```
Generates a VPK homebrew package. `eboot.bin` and `param.sfo` are required.
## Development
Required libraries are
[libelf](http://www.mr511.de/software/libelf-0.8.13.tar.gz),
[zlib](http://zlib.net/zlib-1.2.8.tar.gz),
[libzip](https://nih.at/libzip/libzip-1.1.3.tar.gz), and
[libyaml](http://pyyaml.org/download/libyaml/yaml-0.1.7.tar.gz). Please note
that there are some compatibility problems with built-in libelf so it is
recommended that you download it from the provided link.
After getting the dependencies, build with
```
mkdir build && cd build
cmake ..
make
```
### Note on Naming
Early in the development, there was a confusion on the meaning of "module" and
"library" in context of the Vita. After the tools were written initially, we
decided to reverse the meaning of those two words. All user-facing usage of
those words have been changed (console outputs, messages, etc) but it is too
much word to change all internal usage of those words (function/variable names,
etc). Therefore you may be confused when reading the source since the meaning of
"module" and "library" is used inconsistently. It would be great if someone
could take the time to correct all the usages ("module" exports one or more
"libraries" and imports zero or more "libraries"; `eboot.bin` is a module).