PSP自制软件编译环境构造简介



掌叔
2008-06-07 11:15:08

摘自:[url]http://hi.baidu.com/vrman[/url]
作者:小虎子

这是一片简单介绍如何构造PSP开发环境的文章,要开发PSP Homebrew,首先要建立起一个适合编译PSP可运行程序的环境,由于我猜想得到愿意读这个帖子的人,肯定是有编程基础的人,所以省略一些约定俗成的,不影响理解的东西。

一。构造编译环境

由于GCC是世界上公认的编译器标准,且其对Cross Compile的良好支持,代码的高效性,易扩展性,开放性,所以无论是公式的PSP编译器还是Homebrew界里,都是使用GCC。这里介绍两种构造windows环境下使用GCC开发PSP软件的方法。

方法A:
1. 先下载 [url]http://www.internalreality.com/PS2Dev_Setup.zip[/url]
这是原来的PS2非公式开发工具,使用的windows版gcc编译器MingGW.下载后直接点击安装。
2. 然后下载 [url]http://nnoble.nerim.net/ps2dev/ps2dev-toolchain-mingw32-20050504.zip[/url]
将解压包打开后直接覆盖安装PS2Dev目录下的同名目录
这样就有了一个基本的编译环境。
方法B:
1. 下载及安装Cygwin从[url]http://www.cygwin.com/[/url],这样就可以在Windows下获得一个类Linux环境
(关于安装,如果没有接触过Cygwin或Linux的话,建议All:install,网络安装,硬盘要求2G左右)
2. 下载[url]http://www.oopo.net/consoledev/files/psptoolchain-20050619.tgz[/url],在Cygwin环境下解压,
chmod +x toolchain.sh
./toolchain.sh
这个脚本会自动从FTP里下载gcc,binutils,newlib源代码,然后自动编译,大概需要2-3小时。
3. 设置环境变量
编辑~/.bashrc,加上
export PSPDEV="/usr/local/pspdev"
export PSPSDK="/pspsdk"
export CVSROOT=":pserver:anonymous@cvs.ps2dev.org:/home/pspcvs"
export PATH=":/bin:/psp/bin:/bin"
具体的请看Readme.txt

这样就具备了基本的编译环境。
方法A的优点是安装快,初期的很多软件就是用的A,缺点是版本老,生成代码大,主要对象为PS2,和PSPcpu
指令不完全兼容,且逐渐在被淘汰。
方法B的优点是,新,支持部分PSP指令,生成代码小,利用范围在增大,且接近Linux环境,缺点是下载需要
的时间长,硬盘需要容量大,编译耗时(2-3小时?)

我个人推荐B。

二。 下载所需工具。

1。outpatch
[url]http://sec.pn.to/pub/hellopsp_src_Rel1.zip[/url]
nem的helloworld里所附带的工具,将生成的ELF文件格式转换为PSP可执行的ELF格式.
2。elf2pbp
[url]http://www.internalreality.com/elf2pbp3.zip[/url]
将执行文件打包生成EBOOT.PBP
3。PBP Unpacker
[url]http://pdc303.pwp.blueyonder.co.uk/pbp-unpacker-094-setup.exe[/url]
制作或抽出EBOOT.PBP内容。
4。PSPE
[url]http://psp-dev.org/pukiwiki/index.php?plugin=attach&refer=PSPE&openfile=pspe09b.zip[/url]
在PC上模拟PSP,开发阶段,但是是现阶段唯一的PSP模拟器,需要SDL库

这样,就完全具备了PSP开发的环境。

三。Step By Step 编译步骤

一个小小的例子,来看看如何从头开始编译hello,world,使用刚才我们下载的hellopsp的源代码。

1。进入Cygwin
2。建一个临时目录,比如说~/hello_src,并解压压缩包
3。打开mk.bat文件,根据你的环境修改路径
(由于这个mk.bat会自动运行同目录下的outpatch.exe,所以记得编译别的程序时自己写Makefile,或手动运行,
我的习惯是将outpatch.exe放到/usr/local/pspdev/psp/bin/下面)
4。如果成功就会生成“outp”这个文件。
使用elf2pbp打包(同样,我喜欢把它也放到/usr/local/pspdev/psp/bin/下面)
elf2pbp outp "MyHelloWorld"
这样我们就得到了EBOOT.PBP,可以在PSP上,或PSPE上运行了。


补充,如果在编译自己的(或别的)程序时,outpatch时遇到“modulename not found” Error的话,要么将startup.s里

.ascii "XXXXXXXXXX" #up to 28 char
改成
.ascii "HelloWorld" #up to 28 char

hellopsp_src_Rel1.zip里有outpatch的源代码,改成你喜欢的字符串然后重新编译。





关于NEOGEO CD的编译需要以下,开发包
msys ([url]www.mingw.org[/url])
SDL development libraries for mingw ([url]www.libsdl.org[/url])
nasm (nasm.sourceforge.net)