HOWTO PSP
出自Gentoo Linux Wiki
| 安装方法 • 架构/平台 • 内核 & 硬件 • Portage • 系统相关 • 网络 & 服务器 • X服务器 • 软件 • 游戏 • 非x86平台 |
目录 |
[编辑] 介绍
我喜欢我的PSP和它里面的游戏,而且啊,我是一个Gentoo的用户。所以这里所呈现给你的就是一篇在Gentoo Linux上使用PSP的指南。
[编辑] 使用QPSPmanager
这里有一个很好的软件,它可以用来管理你的存档文件或其他的一些东西:http://qpspmanager.sourceforge.net/
QPSPmanager安装和使用指南:
1] 从上面给出的网址里面下载qpspmanager-x.x.x.tar.gz文件(源文件)。
2] 把文件解压缩到一个目录里面。
3] 你会在那个目录里面找到一个名字叫qpspmanager的文件夹。
4] 打开xterm,或者是其他的终端程序。然后进入到qpspmanager文件夹下的src文件夹里头。
5] 键入qmake。这个命令会自动建立编译所需的makefile文件。
6] 键入make。这个命令会编译这个程序。
7] 现在,键入make install来安装编译好的程序。
8] 你现在可以在终端里头输入qpspmanager来运行这个程序了。
9] 在程序第一次运行的时候,它会给出一个缺少选项的错误。那么你只要到Options里面设置一些必要的选项就可以了。
[编辑] 使用ivman来自动挂载PSP并使用zenity来管理ISO文件
这里有一些我的脚本。我的PSP有一些问题,这导致我无法使用我的UMD驱动器,但是我有很多UMD盘,而且我很喜欢它们。然后我就买了一张大容量存储卡并下载了一些ISO文件:S。接着我试着去简化那些解压、复制、更新和卸载的工作。我使用了4个程序:ivman,7zip,zenity和rsync,我还使用了一堆的脚本代码。 我使用“/home/ignacio/.icons/glass-icons/scalable/devices/usb-Sony_PSP_Type_A-part1.png”来作为每一个脚本的图标。然后用“/mnt/PSP”作为我的PSP的挂载根目录,然后我把我的存档游戏放到了“/mnt/treasure/Portable/PSP/SaveGames/”里头。 ISO文件要用7z压缩,并且只能包含一个文件(.cso或者.iso)。 首先emerge安装ivman,然后我们来配置它:
| 文件: IvmConfigActions.xml |
<ivm:Match name="hal.info.vendor" value="Sony">
<ivm:Match name="hal.info.product" value="PSP">
<ivm:Option name="exec" value="/usr/local/bin/pspmount" />
</ivm:Match>
</ivm:Match>
|
接下来是pspmount脚本:
| 代码: /usr/local/bin/pspmount |
#!/bin/bash
#Made by Dreamer to you.
zenity --notification --window-icon=/home/ignacio/.icons/glass-icons/scalable/devices/usb-Sony_PSP_Type_A-part1.png --text "PSP Mounted" & #我现在使用gnome。
echo "Play Station Portable Ready" | festival --tts --language english & #当我的PSP挂载好了,我喜欢听到提示。
sh /usr/local/bin/pspsave.sh #要求我存储我的游戏数据存档到我的硬盘。
sh /usr/local/bin/pspgames.sh #要求我管理我的ISO文件。
|
这里是savegames脚本:
| 代码: /usr/local/bin/pspsave.sh |
#!/bin/bash #Made by Dreamer to you. zenity --question --text="Do you want to save your GameData Saves to your Harddisk?" --window-icon=/home/ignacio/.icons/glass-icons/scalable/devices/usb-Sony_PSP_Type_A-part1.png || exit rsync -auvz /mnt/PSP/psp/savedata /mnt/treasure/Portable/PSP/SaveGames/ | zenity --text-info --title "Copying Savegames" --width 400 --height 200 --window-icon=/home/ignacio/.icons/glass-icons/scalable/devices/usb-Sony_PSP_Type_A-part1.png echo "Game Data Saved" | festival --tts --language english |
然后这里是我管理PSP游戏或ISO文件的脚本。我知道这个文件可能有很多错误,并且我的英文也不太好,请自己看着改一改吧:-)!
| 代码: /usr/local/bin/pspgames.sh |
#!/bin/bash
#Made by Dreamer to you.
##################### VARIABLES ######################
PSPISO=/mnt/treasure/Portable/PSP/ISO
PSPDIR=/mnt/PSP
PSPDIRISO=$PSPDIR/iso
MEM=0
MEMSTICK=$(df -h /mnt/PSP/ | grep -v Tamaño | awk '{print $2 }')
ICON=/home/ignacio/.icons/custom/png/psp-mounted.png
TEMPDIR=/mnt/treasure/tmp
GAMESLIST=/tmp/PSPGamesList.tmp
GAMESLIST2=/tmp/PSPGamesList2.tmp
GAMESCHOSEN=/tmp/PSPGamesChosen.tmp
GAMESINPSP=/tmp/PSPGamesInPSP.tmp
GAMESINPSP2=/tmp/PSPGamesInPSP2.tmp
GAMESDELETE=/tmp/PSPGamesDelete.tmp
#####################################################
function funcborra {
if [ -z $1 ]; then
TITLEVAR="Deleting Games.."
else
TITLEVAR="You need to free $1"
fi
####################################### CARGA DE JUEGOS de PSP ##############################
cd $PSPDIRISO
for j in *.*; do
echo "$j $(expr `stat --format=%s "$j"` / 1000000)MB check" >> $GAMESINPSP
done
jin=`cat $GAMESINPSP | wc -l`
head -n $[ $jin - 1 ] $GAMESINPSP > $GAMESINPSP2
tail -n 1 $GAMESINPSP | awk '{print $1,$2}' >> $GAMESINPSP2
rm $GAMESINPSP
#############################################################################################
filesin=$(zenity --list --title "$TITLEVAR" --checklist --column="Check" --column="Games" --column="Size" "" `cat $GAMESINPSP2` --window-icon=$ICON --separator=":" --width="800" --height="500")
if [ -z $filesin ];
then
sync | zenity --progress --title "Closing.." --pulsate --auto-close
exit
else
echo $filesin > $GAMESDELETE
rm $GAMESINPSP2
CUIN=$(expr `cat $GAMESDELETE | grep -o : | wc -l` + 1)
while [ $CUIN -ge 1 ]; do
rm $PSPDIRISO/"`cut -d: -f"$CUIN" $GAMESDELETE`"
zenity --info --title "It has been deleted successfuly" --text "El juego "`cut -d: -f"$CUIN" $GAMESDELETE`" has been deleted successfuly."
let CUIN=CUIN-1
done
rm $GAMESDELETE
fi
}
function funcinit {
if [ -a $GAMESLIST ];
then
rm $GAMESLIST
fi
if [ -a $GAMESLIST2 ];
then
rm $GAMESLIST2
fi
if [ -a $GAMESCHOSEN ];
then
rm $GAMESCHOSEN
fi
if [ -a $GAMESINPSP ];
then
rm $GAMESINPSP
fi
if [ -a $GAMESINPSP2 ];
then
rm $GAMESINPSP2
fi
if [ -a $GAMESDELETE ];
then
rm $GAMESDELETE
fi
if [ "$1" == 1 ];
then
funcgames
funccheck
else
MEMSTICKFREE=`df -h /mnt/PSP/ | grep -v Disp | awk '{print $4 }'`
if $(zenity --question --title "Space avialable" --window-icon=$ICON --text "Memory Stick Pro Duo : $MEMSTICK
Free Space : $MEMSTICKFREE
Do you want to delete some games?")
then
funcborra
funcgames
funccheck
else
funcgames
funccheck
fi
fi
}
function funcgames {
####################################### CARGA DE JUEGOS ####################################
cd $PSPISO
for i in *.*; do
echo "$i $(expr `7z l $i | grep : | awk '{print $4 }'` / 1000000)MB check" >> $GAMESLIST
done
jou=`cat $GAMESLIST | wc -l`
head -n $[ $jou - 1 ] $GAMESLIST > $GAMESLIST2
tail -n 1 $GAMESLIST | awk '{print $1,$2}' >> $GAMESLIST2
rm $GAMESLIST
#############################################################################################
######################################## ESCOGER JUEGOS ###############################################
MEMSTICKFREE=`df -h /mnt/PSP/ | grep -v Disp | awk '{print $4 }'`
files=$(zenity --list --title "Select games, MAX: $MEMSTICKFREE" --checklist --column="Check" --column="Games" --column="Size" "" `cat $GAMESLIST2 | sed -e 's,.7z, ,g'` --window-icon=$ICON --separator=":" --width="600" --height="500")
if [ -z $files ];
then
sync | zenity --progress --window-icon=$ICON --title "Closing.." --pulsate --auto-close
exit
else
echo $files > $GAMESCHOSEN
rm $GAMESLIST2
fi
#######################################################################################################
}
function funccheck {
######################################## COMPROBAR ESPACIO ############################################
cd $PSPISO
MEM=0
CUM=$(expr `cat $GAMESCHOSEN | grep -o : | wc -l` + 1)
while [ $CUM -ge 1 ]; do
MEM=$[$MEM + $(7z l `cut -d: -f"$CUM" $GAMESCHOSEN`.7z | grep : | awk '{print $4 }')]
let CUM=CUM-1
done
MEM=$[ $MEM / 1000000 ]
MEMSTICKFREES=$(df -h /mnt/PSP/ | grep -v Disp | awk '{print $4 }' | cut -c1-3)
if [ $MEMSTICKFREES -lt $MEM ]; then
if $(zenity --question --window-icon=$ICON --title "Not enough Space" --text "You need to free $[ ($MEM - $MEMSTICKFREES)]MB,
Continue?")
then
funcborra "$[ ($MEM - $MEMSTICKFREES)]MB"
funccheck
else
funcinit 1
fi
else
zenity --info --text "You have enough free space"
funccopy
fi
}
function funccopy {
CU=$(expr `cat $GAMESCHOSEN | grep -o : | wc -l` + 1)
cd $PSPISO
while [ $CU -ge 1 ]; do
file-roller -e $PSPDIRISO "`cut -d: -f"$CU" $GAMESCHOSEN`".7z
let CU=CU-1
done
rm $GAMESCHOSEN
sync | zenity --progress --window-icon=$ICON --title "Syncing.." --pulsate
}
if $(zenity --question --window-icon=$ICON --title "Change games of your PSP" --text "Do you want to change your PSP Games?")
then
funcinit
else
exit
fi
|
就是这些了!现在在你的PSP里面就应该有PSP游戏(ISO文件)了。因为我的记忆棒有时候不能很好地工作,有一次我甚至丢失了我的游戏存档,所以我写了pspsave.sh文件。现在,这类事情就永远不会再发生了:P。
[编辑] 手动拷贝文件到PSP或记忆棒
1、首先,我们要在内核里面编译好Mass-Storage的USB设备支持(不要忘了加上scsi suport和运行modprobe sd_mod以及modprobe usb_storage)
<M> USB Mass Storage support
2、然后在/etc/fstab里面加入下面这一行:
| 文件: /etc/fstab |
... /dev/sda1 /mnt/PSP vfat noauto,noatime,users,shortname=win95,check=s 0 0 |
有了这些,我们就可以完美地在Linux下使用我们的记忆棒了。我们也可以把EBOOT文件拷贝到PSP里面来升级固件。
我们可以通过一下命令来挂载PSP:
# mount -t vfat -o shortname=win95,check=s /dev/sda1 /mnt/PSP
[编辑] 配置你的Gentoo Box通过一个PCI无线网卡来进行网络对战
1、我们在这里使用xLink Kai(kaid)。
XLink Kai是一个全球的游戏网络——把XBox,Playstation 2,Gamecube和PSP用户联系在一个整合的团体里。 它是一个在Mac平台上运行的软件,它允许你免费玩支持system-link的在线游戏。 XLink Kai是唯一一个不一定要在终端下运行的服务,并且它吹嘘是现有的最友好的社区组织。
[编辑] 为无线游戏设置Gentoo Box
我成功运行了《反重力赛车》(《WipeOut Pure》)这个游戏,但是《横冲直撞》(《Burnout》)却丢失了连接! 让我们开始把!
- 我在Gentoo 2005.1上面使用net-wireless/wireless-tools
- 我现在在用:KAID 7.0.0.5和/etc/kaid.conf
- jKaiUI作为客户端
- 我没有使用/etc/conf.d/wireless
- 我的PCI无线网卡模块是来自于net-wireless/rtl8180的kernel module r8180
- 我使用r8180 kernel module net-wireless/rtl8180
- 这里有一些可用的PCI网卡列表
| 代码: lspci |
Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8180L 802.11b MAC |
- 在你的/ect/conf.d/net里面加上这些:
| 文件: /ect/conf.d/net |
#我们需要AD-HOC模式来使之正常工作
mode_wlan0="Ad-Hoc"
#为你的网卡设置IP地址
config_wlan0=("192.168.8.1")
#在你的PSP里面使用相同的频道
channel_wlan0="1"
#请在这里设置你的PSP设备的ESSID,请注意每一个游戏都有一个ESSID!
#NFSU Rivals
essid_wlan0="PSP_AULUS10007_L_"
#BurnOut Legends
#essid_wlan0="PSP_AULES00125_L_BOUTLLOB"
#你的Ethernet NIC,连接到一个switch,modem或其他的设备
#config_eth0=( "dhcp" )
config_eth0=( "192.168.254.1 netmask 255.255.255.0" )
routes_eth0=( "default via 192.168.254.254" )
|
[编辑] 如何从PSP和PSP游戏里面得到ESSID
把UMD放入PSP,开始游戏并进入多人游戏模式。 现在使用iwlist来检索ESSID:
| 代码: iwlist wlan0 scanning |
wlan0 Scan completed : Cell 01 - Address: 02:13:66:ED:DC:BF ESSID:"PSP_AULES00125_L_BOUTLLOB" Mode:Ad-Hoc Frequency:2.412 GHz (Channel 1) Bit Rate:1 Mb/s Bit Rate:2 Mb/s Bit Rate:5.5 Mb/s Bit Rate:11 Mb/s Quality=91/100 Signal level=-53 dBm Noise level=-256 dBm Encryption key:off |
ESSID:"PSP_AULES00125_L_BOUTLLOB"这一行显示了PSP或PSP游戏的ESSID。 接着在你的/etc/conf.d/net里面使用你得到的ESSID,然后重启网络接口。在这儿我们使用wlan0作为一个例子:
/etc/init.d/net.wlan0 restart
[编辑] 配置KAID客户端
请使用这样一个配置:
| 文件: /etc/kaid.conf |
Verbosity = 3 UIBind = :34522 OrbPort = 34525 EngineBind = :5000 EnginePAT = 0 SniffDevice = wlan0 MacLearningMode = Auto IgnoreMacs = ConsoleMacs = ConfigURL = www.teamxlink.co.uk/connector/clientgetconfig.php Username = Anunakin Password = XXXXXXXXX AutoLogin = 0 XBoxHomebrew = 0 |
请注意:
- EngineBind = :5000,因为有一些ISP会拦截高级端口。
- SniffDevice = wlan0,这是在这个例子里面的无线设备的名字。
[编辑] 把你的tcp/ip包送到Internet上去
| 文件: /etc/conf.d/local.start |
iptables -F iptables -t nat -A POSTROUTING -j SNAT -o eth0 --to 192.168.254.1 echo 1 > /proc/sys/net/ipv4/ip_forward |
[编辑] 在线游戏
1. 启动kaid
# kaid
2. 启动kaid GUI
# javaws jKaiUI
3. 请根据你的PSP游戏使用kaid GUI加入在xLink网络上特定的房间。
4. 在你的PSP上加载游戏并进入多人游戏模式,然后kaid GUI就会显示你的PSP设备的MAC地址了。
[编辑] 转换在PSP上播放的视频文件的格式
media-video/ffmpeg这个工具能够为我们做好一切转换的工作。
1.安装ffmpeg的最新版本,并记得加上aac这个USE标记:
#echo "media-video/ffmpeg ~x86" >> /etc/portage/package.keywords #echo "media-video/ffmpeg aac" >> /etc/portage/package.use #emerge -pv ffmpeg
2.把视频文件转换成PSP支持的格式:
#ffmpeg -i Video.avi -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320x240 M4V00001.MP4
2.1. 你也可以使用368x208这个分辨率来观看宽屏视频。
2.2. 请记住:我们必须用M4V00001.MP4,M4V00002.MP4……这样的名字来命名我们的视频。
2.3. 使用“AVC”profile编码的文件应该被命名成"MAQ#####.MP4"(“#”代表一个数字)。而与此相反的是,使用“SP”profile编码的文件应该被命名成“M4V#####.MP4”。(引用自pspvideo9.com论坛上Slordak所说的)
3. 提取缩略图(thumbnail image):
#ffmpeg -y -i Video.avi -f image2 -ss 5 -vframes 1 -s 160x120 -an M4V00001.THM
3.1. 请使用相同的输出文件名,但是请把文件扩展名改成THM。
4. 挂载PSP:
#mount -t vfat -o shortname=win95,check=s /dev/sda1 /mnt/PSP
5. 创建文件夹来存放你的视频:
#mkdir /mnt/PSP/MP_ROOT/100MNV01
6. 拷贝文件:
#cp M4V00001.MP4 /mnt/PSP/MP_ROOT/100MNV01/
[编辑] 批量转换你的视频文件
请使用这个脚本来实现这个功能:
| 文件: make_psp_movie.sh |
#!/bin/bash
#script name: make_psp_movie.sh
#I wrote and use this script for a while now -- Jonathan S.
#Updated and enhanced because the script was broken. This script has actually been tested with a PSP with firmware v3.x. -- Dominicus
if [ $# == 0 ]
then
echo "Use: make_psp_movie video1 video2 video3 ..."
fi
target="/tmp/`echo $LOGNAME`/pspmovies/MP_ROOT/100MNV01"
mkdir -p "$target"
for m in "$@"
do
echo "-------------------"
echo "Start converting $m"
echo "-------------------"
output="10001"
while [ -f "$target/M4V${output}.MP4" ]
do
let "output += 1"
done
#generate video
#If "-r 29.97" does NOT work try "-r 14.985"
ffmpeg -i "$m" -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 320x240 "${target}/M4V${output}.MP4"
#generate thumbnail
ffmpeg -y -i "$m" -f image2 -ss 5 -vframes 1 -s 160x120 -an "${target}/M4V${output}.THM"
#list the files that were just generated
ls -l "${target}/M4V${output}.MP4" "${target}/M4V${output}.THM"
done
echo
echo "---------------------------------------------------------------------------"
echo "You will find any newly generated PSP videos in:"
echo " ${target}"
echo
echo "Please copy them to your PSP's 'MP_ROOT/100MNV01/' folder."
echo
echo "Note: if that folder doesn't already exist, just create the folders first."
echo "---------------------------------------------------------------------------"
|
现在切换到你的视频收藏夹,然后输入以下命令来运行这个脚本:
find -type f -exec ./make_psp_movie.sh "{}" ";"
之后你就可以在/tmp/USER/pspmovies里面找到已经转换好了的视频了。
[编辑] 视频转换软件
PlayStation Portable Video Converter (pspvc) http://pspvc.sourceforge.net
这是一个ffmpeg的GTk前端。
http://pspvc.sourceforge.net/images/capture.png http://pspvc.sourceforge.net/images/capture2.png
这个软件需要一个ebuild,你可以在http://pspvc.sourceforge.net/#download 里面找到它。
[编辑] 开发
请参见文章HOWTO_PSP_Development。
Author:Unknown Translator:--JackSM 2008年3月29日 (六) 00:06 (UTC)
