2012年2月14日星期二

构建PS2开发环境

手上这台39001的PS2跟了我很久了,对我来说也算是一个很特别的存在吧。今年过年的时候又想起了他,于是又把他翻了出来,还在淘宝上花了260人刀买了块美版的网卡打算玩玩HDL。可是因为很久没用,主板上的电池没电了。在自己动手换了电池之后,却没想到一直用得好好的uLaunchELF出问题了,黑屏。

我遇到的是一个看起来很诡异的问题,读盘打游戏都OK,同样基于LaunchELF改的LbFn可以用,HDLoader也可以用,但是uLaunchELF、Free MC Boot和Open PS2 Loader都用不了。

拿到修理店,磨了老板一个下午却没找到究竟是哪里出了问题,最后只能把本来装的Magic 3直读换成了Modbo 3,先将就着用,可心里一直有点不太舒服。

前几天总算是找到时间弄了弄PS2的Homebrew编译环境,用最原始的scr_printf去跟,终于发现了问题所在。我的两个手柄接口,凑巧第二个口坏掉了。因为第一个没坏所以打游戏什么的都正常,但uLE在启动时会去尝试初始化第二个手柄,不知道是因为短路还是啥,总之uLE等不到正确的信号,于是就挂在那儿了。

好吧,以下是Ubuntu下PS2编译环境的构建过程:

安装需要的一些工具:

sudo apt-get install gcc patch wget make subversion

下载ps2toolchain(ps2dev.org的SVN服务器当掉了,找了个mirror):

cd ~/
svn co http://psp.jim.sh/svn/ps2/trunk/ps2toolchain

修改ps2toolchain/scripts下的005-ps2sdk.sh和006-ps2client.sh,将svn://svn.ps2dev.org/替换为http://psp.jim.sh/svn/,然后编译:

cd ps2toolchain
sudo ./toolchain-sudo.sh

编译完成的内容会被安装在/usr/local/ps2dev下,现在修改~/.profile,增加以下内容:

export PS2DEV=/usr/local/ps2dev
export PATH=$PATH:$PS2DEV/bin
export PATH=$PATH:$PS2DEV/ee/bin
export PATH=$PATH:$PS2DEV/iop/bin
export PATH=$PATH:$PS2DEV/dvp/bin
export PS2SDK=$PS2DEV/ps2sdk
export PATH=$PATH:$PS2SDK/bin
export GSKIT=$PS2DEV/gsKit

读取环境设置,删掉已经不需要了的东西:

source ~/.profile
rm -R ~/ps2toolchain

PS2 SDK在后期似乎是处于没人管的处境,所以很多homebrew针对SDK的修改也没地方提交,只好把补丁随源代码发布,这也导致了不同的homebrew需要不同的SDK来编译的状况。这个问题没什么好的解决办法,只能把需要用到的N份SDK都留着。

先把编译好的SDK移回个人目录并修改权限:

mkdir -p ~/PS2dev/SDK
sudo mv /usr/local/ps2dev ~/PS2dev/SDK/
sudo chmod -R a+w ~/PS2dev/SDK/

原始SDK留着,复制一份准备编译uLE用:

cp -R ~/PS2dev/SDK/ps2dev ~/PS2dev/SDK/ps2dev-ULE

创建~/PS2dev/switch-ps2dev.sh,内容为:

#!/bin/bash
if [ $# -eq 0 ]
then
echo "usage: sh $0 "
exit 1
fi
unlink /usr/local/ps2dev &>/dev/null
ln -s ~/PS2dev/SDK/ps2dev-$1 /usr/local/ps2dev || exit 1
echo "$1 dev environment ready."

切换编译环境:

chmod +x ~/PS2dev/switch-ps2dev.sh
sudo sh ~/PS2dev/switch-ps2dev.sh ULE

这里下载uLE的源码,解开来,打开“Source/Changed source for external projects/setup.sh”,同样把SVN地址修改一下,sudo sh setup.sh就可以得到一个可以编译uLE的SDK环境了。