手上这台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环境了。