撰写了文章 发布于 2021-04-14 18:39:14
PS Vita自制软件开发环境搭建
索尼已经确定会在不久后关闭PS3和PSV的网络商店,虽然很惋惜,但也是没有办法的事。只不过相比之下PSV显得更加可怜一点。不过自PSV的自制系统问世之后,PSV还是有很多可以鼓捣的东西(如果你喜欢折腾的话),很多黑客围绕这些工具开发了很多有意思的软件(你甚至可以玩到安卓版移植过来的GTA),甚至可以用一个卡套装上micro SD卡来扩充你的存储空间(不管怎么说PSV的记忆卡着实是邪恶的玩意儿)。有了这些自制软件,也算是让PSV这台机**尽其用吧。
如果你也有一定的开发能力,看到这些你可能也想要尝试开发自己的自制软件。这当然是可以的,开发者已经对相关SDK进行了整合,本文就会介绍如何安装和配置这个SDK。当然首先需要一台已经安装自制系统的PSV,不过破解过程不在本文的内容范围内,不过你可以参考这里的教程,还是很详细,我最早就是看的这个,没有任何问题就成功了。
本文也没涉及太多高深的技术,主要是自己试着装了一下,遇到一些坑,算是找到一些解决办法然后分享一下吧。这些东西本身就是骇客神侠开发的,很多东西都要靠自己慢慢摸索。
电脑上的准备
其实啥电脑都行,但主要是需要一个类UNIX的环境比较稳当。Linux和macOS就不用多说了,没毛病。但是Windows需要一些额外的操作。Windows上如果想要一个类UNIX的环境其实可以选择MYSYS,但是这里还是推荐微软自己搞的WSL(Windows Subsystem Linux,Windows Linux子系统)比较好。
首先在控制面板>程序>启用或关闭Windows功能中,找到适用于Linux的Windows子系统。打勾然后等它完成,重启。
在应用商店(Microsoft Store)里面搜索WSL,选择一个你喜欢的Linux版本安装即可。
还是有好几个Linux发行版可以选择
安装完成之后,打开PowerShell或者命令提示符,输入wsl(或者你安装的Linux系统名称,还可以在开始菜单中点击子系统的图标启动)就可以启动子系统了。
这种方式安装的是WSL1,微软已经推出了WSL2。WSL2有一些更先进的特性,你甚至可以在WSL2中运行Linux上的图形界面。如果你在未来需要经常用到WSL2的一些特性,可以参考微软的文档把它升级到WSL2。
然后你需要安装版本控制工具Git,不过我估计本文的读者可能不需要过多的解释了。其实这些系统应该都是自带了Git的,所以应该不需要单独安装。
如果你的网络环境无法下载GitHub上的内容,那么你可能需要进行一些操作。网上也有说可以通过DNS或者hosts解决,但是我没有试过,我直接用的代理。在macOS上一般很多代理客户端都会提供一个复制终端代理命令的选项,使用类似于export http_proxy="http://127.0.0.1:8888"这样的命令设置终端运行程序时所用的代理。其它的Linux系统也就是类似地设置环境变量就行了。
不过如果你现在使用的是WSL2,需要注意,在WSL2中每次启动可能会把宿主系统的本地地址映射到不同的地址,需要查看一下/etc/resolv.conf这个配置文件中的nameserver字段,然后以这个地址为基础设置代理。
另外你可能需要更换Linux的软件源以方便下各种软件包,不赘述,可以看这里。
安装前置工具
主要就是参照Vita SDK的官网进行安装。Vita SDK的安装脚本需要用到wget、cmake、make、python,新安装的Linux系统有些东西可能没有,直接运行下面的命令就行了。macOS自带Python所以也就不需要单独安装,主要是安装wget和cmake。但是要注意貌似Python3执行安装脚本会出问题,所以如果你给python3取了python的别名可能会出问题,不过macOS自带的python命令也是Python2所以无需担心。
Linux及WSL直接执行如下命令(以Ubuntu为例,其他包管理器自行修改):
apt-get install make git-core cmake python
macOS安装brew或者MacPorts,分别执行brew install wget cmake或port install wget cmake。
安装Vita SDK
接下来正式安装Vita SDK,其实本身都是傻瓜式的安装脚本,最可能出现的还是网络问题,它会从GitHub上下一些文件。
设置VITASDK所在位置的环境变量:
export VITASDK=/usr/local/vitasdk
export PATH=$VITASDK/bin:$PATH
也可以直接写到你的shell配置文件中。
反正执行下面这些命令的时候最好使用sudo,不然很可能不会让你执行那些脚本。
git clone https://github.com/vitasdk/vdpm
cd vdpm
./bootstrap-vitasdk.sh
./install-all.sh
克隆仓库的时候应该没什么问题,主要是执行后面的脚本的过程中可能有点问题。 如果在执行bootstrap的时候提示类似于invalid host name的错误,那么多半是网络因素。该设置代理设置代理。
这个安装脚本其实也不复杂,可以简单看一下。出现上述问题主要是wget的时候出的问题,你可以先单独执行一下这一段wget -O- https://github.com/vitasdk/vita-headers/raw/master/.travis.d/last_built_toolchain.py。原本的脚本里面是加了q参数让wget静默处理的,取消q选项可以让它显示详细信息。出现invalid host name很有可能是访问raw.githubcontents.com这个域名的时候被拒绝了,这个时候你只能选择代理(或者试着改DNS啥的)。
bootstrap主要是安装SDK本体,install-all是安装其它一些包。
如果你没设置VITASDK环境变量,记得设置。
测试示例程序
安装完成后应该测试一下能不能正常构建示例程序。执行命令git clone https://github.com/vitasdk/samples.git克隆示例程序仓库到你喜欢的地方。
以hello_world为例,进入示例程序对应的目录中,执行cmake . && make构建程序。正常情况下应该会成功生成PSV所用的vpk安装包。传输到PSV上安装运行即可看到效果。
如果想要构建全部的示例程序:
mkdir build && cd build
cmake ..
make
开发相关的配置
创建一个新项目时,需要使用cmake,并且最好参照hello_world的cmakelist进行修改。不过CMake这个配置文件本身也不是啥善类,详细的还得看CMake的文档。
## This file is a quick tutorial on writing CMakeLists for targeting the Vita
cmake_minimum_required(VERSION 2.8)
## 包含PSV工具链,必须出现在项目定义之前
# It is a convenience so you do not have to type
# -DCMAKE_TOOLCHAIN_FILE=$VITASDK/share/vita.toolchain.cmake for cmake. It is
# highly recommended that you include this block for all projects.
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
if(DEFINED ENV{VITASDK})
set(CMAKE_TOOLCHAIN_FILE "$ENV{VITASDK}/share/vita.toolchain.cmake" CACHE PATH "toolchain file")
else()
message(FATAL_ERROR "Please define VITASDK to point to your SDK path!")
endif()
endif()
## 项目参数
# 项目名称
project(hello_world)
# This line adds Vita helper macros, must go after project definition in order
# to build Vita specific artifacts (self/vpk).
include("${VITASDK}/share/vita.cmake" REQUIRED)
## app的配置选项
# LiveArea气泡下面显示的名称
set(VITA_APP_NAME "Hello World")
# Unique ID must be exactly 9 characters. Recommended: XXXXYYYYY where X =
# unique string of developer and Y = a unique number for this app
set(VITA_TITLEID "VSDK00007")
# 在LiveArea上显示的可选的版本号
set(VITA_VERSION "01.00")
## 设置一些构建标志
# Note that we make sure not to overwrite previous flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
# Optional. You can specify more param.sfo flags this way.
set(VITA_MKSFOEX_FLAGS "${VITA_MKSFOEX_FLAGS} -d PARENTAL_LEVEL=1")
# 添加额外的include路径
include_directories(
../common # This is for debugScreenPrintf(), you shouldn't need it in your projects
)
# 添加额外库
# ${CMAKE_CURRENT_BINARY_DIR} lets you use any library currently being built
link_directories(
${CMAKE_CURRENT_BINARY_DIR}
)
## Build and link
# Add all the files needed to compile here
add_executable(${PROJECT_NAME}
src/main.c
../common/debugScreen.c
)
# Library to link to (drop the -l prefix). This will mostly be stubs.
target_link_libraries(${PROJECT_NAME}
SceLibKernel_stub # this line is only for demonstration. It's not needed as
# the most common stubs are automatically included.
SceDisplay_stub # This used by debugScreenPrintf()
)
## Create Vita files
vita_create_self(${PROJECT_NAME}.self ${PROJECT_NAME})
# The FILE directive lets you add additional files to the VPK, the syntax is
# FILE src_path dst_path_in_vpk. In this case, we add the LiveArea paths.
vita_create_vpk(${PROJECT_NAME}.vpk ${VITA_TITLEID} ${PROJECT_NAME}.self
VERSION ${VITA_VERSION}
NAME ${VITA_APP_NAME}
FILE sce_sys/icon0.png sce_sys/icon0.png
FILE sce_sys/livearea/contents/bg.png sce_sys/livearea/contents/bg.png
FILE sce_sys/livearea/contents/startup.png sce_sys/livearea/contents/startup.png
FILE sce_sys/livearea/contents/template.xml sce_sys/livearea/contents/template.xml
)
如果你想要利用一些比较现代的编辑器来写代码的话,可能需要设置一些include路径。 主要涉及到:
"/usr/local/vitasdk/include",
"/usr/local/vitasdk/arm-vita-eabi/include",
"/usr/local/vitasdk/share/gcc-arm-vita-eabi/samples/common/"
最后一行是示例程序用到的一些头文件,你自己写的时候可能不需要。
阅读材料
目录