HOWTO PSP

出自Gentoo Linux Wiki

跳转到: 导航, 搜索
这篇文章属于 HOWTO 系列的一部分。
安装方法 架构/平台 内核 & 硬件 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》)却丢失了连接! 让我们开始把!

  1. 我在Gentoo 2005.1上面使用net-wireless/wireless-tools
  2. 我现在在用:KAID 7.0.0.5和/etc/kaid.conf
  3. jKaiUI作为客户端
  4. 我没有使用/etc/conf.d/wireless
  5. 我的PCI无线网卡模块是来自于net-wireless/rtl8180的kernel module r8180
    1. 我使用r8180 kernel module net-wireless/rtl8180
    2. 这里有一些可用的PCI网卡列表
代码: lspci
   Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8180L 802.11b MAC
  1. 在你的/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)
个人工具