gadget2k 2007-10-9 13:52
[教程]转换1.50自制程序为3.xx程序的方法(翻译版)
英文原版见版主发的[url]http://bbs.pspchina.net/viewthread.php?tid=227537[/url]。
编程门外汉,可能有翻译错误,凑合着看吧。
----------------------------------------------------------------------------------------------------------------
3.xx固件要求你的自制软件以prx格式运行。要得到这种格式,需要如下基本步骤:
[b][u]1. 修改你的Makefile [/u][/b]- 你需要添加如下语句至Makefile以编译prx(在 include $(PSPSDK)/lib/build.mak 这一行前):
[quote]BUILD_PRX = 1
PSP_FW_VERSION = 371[/quote]
[u][b]2. 设置你的软件为用户模式[/b][/u] - 自制软件需以用户模式启动。要达此目的,将PSP_MODULE_INFO 中的第2个参数改为 0。大多数软件还需要增加堆栈(heap)大小。堆栈大小是指malloc可用的内存量。我自己设为20mb。以下代码应置于你自己的源代码之前(通常是main.c):
[quote]PSP_MODULE_INFO("My Homebrew", 0, 1, 0);
PSP_HEAP_SIZE_KB(20480);[/quote]
或者你可以用PSP_HEAP_SIZE_MAX();前提是你用的toolchain是在2007年9月30日以后编译的(修订号2321)。它将尽可能分配最大的堆栈。请注意要使用此方法你需要重新编译整个toolchain(或者至少pspsdk和newlib),否则你的软件会因Exception - Bus错误(数据)崩溃。
[b][u]3. 尝试运行你的程序[/u][/b] - 你现在应该能够以通常方式编译程序并覆盖原有的eboot.pbp。3.xx固件不适用kxploit或者%文件夹。如果你从psplink运行你的程序,你需要运行prx文件而不是elf文件,否则无法运行。到了这一步你的自制软件应能正常运行,除非你的代码有核心模式的调用。如果代码有核心调用,启动程序会导致0x8002013C错误。别慌,看第4步。如果你的程序运行没问题,那好,跳过第4步。
[b][u]4. 找到并处理的你的核心调用[/u][/b] - 你需要了解什么是核心调用,什么不是。你可用 prxtool -f <prx file> 来验证。以下是一个例证输出:
[quote]
$ prxtool -f project.prx
... output left out (it's a lot of output) ...
Import 9, Name UtilsForUser, Functions 1, Variables 0, flags 40010000
Functions:
0x79D1C3FA [0x0008CF34] - UtilsForUser_79D1C3FA
Import 10, Name LoadExecForUser, Functions 2, Variables 0, flags 40010000
Functions:
0x05572A5F [0x0008CF3C] - LoadExecForUser_05572A5F
0x4AC57943 [0x0008CF44] - LoadExecForUser_4AC57943
Import 11, Name IoFileMgrForKernel, Functions 1, Variables 0, flags 00010000
Functions:
0x411106BA [0x0008CF4C] - IoFileMgrForKernel_411106BA
Done
[/quote]
查看上述输出你会发现有一个导入称为 IoFileMgrForKernel。该导入有一个函数。参考下页:
[url]http://silverspring.lan.st/1.5x/kd/iofilemgr.html.[/url]
在该页搜索你会发现[b]0x411106BA[/b]匹配函数[b]sceIoGetThreadCwd[/b]。你现在可以搜索该函数并有两个选项:
(a) 使用用户模式代码替换核心调用,或者
(b) 将核心调用移入一个核心模式的prx并在程序中载入该核心模式prx。
选项B不在本教程讨论范围内,你可以搜索论坛找到相关方法。选项A是我推荐的方案,除非你必须使用核心调用。
[[i] 本帖最后由 maxhoov 于 2008-3-2 17:22 编辑 [/i]]
tfm 2007-10-9 20:59
楼主为老P慢慢脱离1.5核心做出的贡献!
脱离1.5核心意味着F0空间解放!
dr_watson 2007-10-9 21:21
[quote]原帖由 [i]gadget2k[/i] 于 2007-10-9 13:52 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2743929&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
英文原版见版主发的[url]http://bbs.pspchina.net/viewthread.php?tid=227537[/url]。
编程门外汉,可能有翻译错误,凑合着看吧。
------------------------------------------------------------------------------ ... [/quote]
辛苦了! 謝謝幫忙 :)
2131503 2007-10-14 15:01
[s:4] 不是编程滴看不懂
ETcheng 2007-10-14 17:32
有人测试过这个方法么?[s:3]
dr_watson 2007-10-14 22:07
建議大家看一下 cooleyes 的 PPA 代碼包, 我跟著來弄 JGE++ 對於3.XX系統的支持, 基本上已搞定了! 幾個JGE++ 的例子, 都可在 3.10 系統上運行了 (即M33系列的, 應該也沒問題了)!
cooleyes 2007-10-15 12:58
[quote]原帖由 [i]dr_watson[/i] 于 2007-10-14 22:07 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2758144&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
建議大家看一下 cooleyes 的 PPA 代碼包, 我跟著來弄 JGE++ 對於3.XX系統的支持, 基本上已搞定了! 幾個JGE++ 的例子, 都可在 3.10 系統上運行了 (即M33系列的, 應該也沒問題了)! [/quote]
这个翻译很好,很正确
基本上fw3xx程序就是这样
要是多媒体播放或网络方面的程序,就还有一点要注意的是加载系统prx的地方要改动一下
还有就是fw371和以前的fw3xx(fw360以前)比较,有些核心函数的nid发生了变化,需要注意一下
crzwmzzj 2007-10-17 13:01
没看懂,[s:4] [s:4] [s:4] 我的是3.71的,有什么自制程序可用吗
snow007 2007-10-20 13:57
非常好,2000的自治程序很多都用不了,用了这个就好了
油条 2007-10-22 13:17
想学编程,不知如何入门....[s:8]
liqiinhit 2007-11-11 18:28
编译出错!
打开
BUILD_PRX = 1
参数后说找不到/d/pspdev/pspdev/psp/sdk/lib/linkfile.prx 这个文件,可是在目录我明明看到有这个文件呀!真晕!有人解决了吗?
dr_watson 2007-11-14 22:05
[quote]原帖由 [i]liqiinhit[/i] 于 2007-11-11 18:28 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2825372&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
打开
BUILD_PRX = 1
参数后说找不到/d/pspdev/pspdev/psp/sdk/lib/linkfile.prx 这个文件,可是在目录我明明看到有这个文件呀!真晕!有人解决了吗? [/quote]
你的 pspsdk 要更新!
rockyo 2007-11-30 18:50
[quote]原帖由 [i]liqiinhit[/i] 于 2007-11-11 18:28 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2825372&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
打开
BUILD_PRX = 1
参数后说找不到/d/pspdev/pspdev/psp/sdk/lib/linkfile.prx 这个文件,可是在目录我明明看到有这个文件呀!真晕!有人解决了吗? [/quote]
装MSYS,在MSYS里面编译就不会出现这个问题了
在Windows带的命令行里面编译prx会出现这个问题
[[i] 本帖最后由 rockyo 于 2007-11-30 18:58 编辑 [/i]]
新峰海阳 2007-12-7 15:24
建议楼主干脆再开贴做个教程哈!!详细教程再附上SDK等的编译调试软件~呵呵~麻烦了!!
willreno 2007-12-9 18:22
我在MSYS还是一样出错啊~
rockyo 2007-12-12 16:09
[quote]原帖由 [i]willreno[/i] 于 2007-12-9 18:22 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2899866&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
我在MSYS还是一样出错啊~ [/quote]
这是因为MinGW/MSYS中,路径是[b]区分大小写[/b]的(devkitpsp和devkitPSP以及devkitPsp不同),所以编译出来的GCC使用的路径也是区分大小写的。
[[i] 本帖最后由 rockyo 于 2007-12-12 16:17 编辑 [/i]]
snow007 2007-12-12 17:57
晕死,希望高手把1.5的自制程序都转成新P能用的让大家下载不更好吗??我门是菜鸟,不会弄
szwein 2007-12-14 00:04
[quote]原帖由 [i]cooleyes[/i] 于 2007-10-15 12:58 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2759177&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
这个翻译很好,很正确
基本上fw3xx程序就是这样
要是多媒体播放或网络方面的程序,就还有一点要注意的是加载系统prx的地方要改动一下
还有就是fw371和以前的fw3xx(fw360以前)比较,有些核心函数的nid发生了 ... [/quote]
新手
环境: devkitPSP 1.4.4版
在svn下的pmplayer
编译出现在以下情况,请求帮助。。。。
psp-gcc -g -O2 -G0 -Wall -I/c/devkitPro/devkitPSP/psp/sdk/include -DF_Makefile s
ceVideocodec.S -c -o Makefile.o
cc Makefile.o -o Makefile
make: cc: Command not found
make: *** [Makefile] Error 127
rm Makefile.o
make[2]: Leaving directory `/c/devkitPro/prj/pmplayersvn/libmpeg'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/c/devkitPro/prj/pmplayersvn'
make: *** [all] Error 2
babywolf2918 2008-1-12 23:38
[quote]原帖由 [i]willreno[/i] 于 2007-12-9 18:22 发表 [url=http://bbs.pspchina.net/redirect.php?goto=findpost&pid=2899866&ptid=227565][img]http://bbs.pspchina.net/images/common/back.gif[/img][/url]
我在MSYS还是一样出错啊~ [/quote]
这个没用到MSYS,而只是有着MSYS标题的CMD而已
zqhwe 2008-1-18 09:04
请高人把1.5的斗地主转换为3.xx程序吧~~