Rinrin 的个人资料永远的羁绊照片日志列表更多 ![]() | 帮助 |
|
|
7月25日 The (New) PSP Technical DocsAuthor: SilverSpring
E-mail: silverspringpsp [at] gmail [dot] com 翻译: Rinrin
2. 介绍
当PSP处于完全关断状态时,只有SYSCON芯片是通电运行的,SYSCON控制绝大部分PSP硬件。包括外接电源接口及电池。
给SYSCON提供电源的是主板上的纽扣电池,所以即使PSP电池没有接入SYSCON仍在运行。 SYSCON会监控电源开关,当你打开电源开关时,SYSCON会控制硬件向主CPU上电。 主CPU是索尼定制的MIPS32核并且内嵌一块4KB掩膜ROM(像大多数嵌入式系统那样)。
ROM中储存"preipl"(它可以将PSP启动至工厂模式、加载和解密nand或记忆棒中的IPL)。 这块ROM被映射到物理地址0x1FC00000处(MIPS处理器的复位中断向量),这是CPU冷启动之后执行第一条指令的地址。 3. Pre-IPL启动顺序
3.1. Pre-IPL第一部分(加载器)
Pre-IPL分成两个部分:加载器和主体
因为preipl存储在非挥发只读内存中,所以程序中不能使用变量。 这样,第一部分的preipl(加载器)会将第二部分的preipl(主体)复制到CPU的暂存RAM中(启动时可用的RAM之一,另外还有一块4KB的RAM,2MB EDRAM和主内存DDR SDRAM这时并没有初始化) 暂存RAM映射到物理地址0x00010000处,当第一部分的preipl结束复制后,就跳转到新地址0x00010000。 3.2. Pre-IPL第二部分(主体) 现在CPU在暂存RAM中执行(即preipl主体),preipl主体初始化闪存并读入闪存块表(包含了已加密的IPL存放的块号)。
这张表起始于闪存中第四个块(即偏移0x10000),并且之后的七个块都是它的镜像。这就是为什么即时这些块中出现坏块,闪存块表仍然能被读取。不过如果8个块都损坏了,preipl无法找到IPL,PSP也就变砖了(唯一的解决方法是从记忆棒启动 或使用定制的IPL修补preipl使得它重定位这张表,这两种办法都需要潘多拉)。 闪存上的所有IPL块是加密的,preipl主体使用4KB的RAM(这个RAM映射到物理地址0x1FD00000处,但之后就会映射到0x1FC00000,作为媒体处理器的复位中断向量)作为加载和解密IPL块的临时存储,因为这块RAM只有4KB大小,所以加密的IPL块以4KB大小组织存放在闪存上。 preipl完成一块IPL的解密后,就将其加载到物理地址0x040F0000处并累积追加,这个物理地址位于2MB EDRAM(本来被用作显存)中,主内存DDR SDRAM这时还是没有被初始化。当preipl完成所有IPL块的解密和加载后就跳转到新地址。 ------------------------------------------------------------------------
4. IPL启动顺序
解密后的IPL分为三部分:
第一部分 加载器 第二部分 main.bin 第三部分 主体 第一部分是一段MIPS代码,第二部分使用gzip压缩,第三部分是加密的(从2.60版本开始,第二部分和第三部分都被加密了)。
4.1. IPL第一部分(加载器)
加载器做的第一件事就是重置主CPU,重置后内嵌的掩膜ROM就不再映射到内存区域(0x1FC00000被重新映射到上面提到的RAM)。
这就是为什么IPL启动后preipl就不可访问了,加载器执行一些非常基本的硬件初始化并将第二部分main.bin解压缩到0x04000000(仍然是EDRAM)。随后加载器跳转到这个地址开始初始化硬件。 4.2. IPL第二部分(main.bin)
main.bin负责初始化PSP硬件,它有自己的驱动模块(类似于固件中的驱动模块,包括sceNAND_Driver,sceDDR_Driver, sceIdStorage_Service,sceSYSREG_Driver,sceSYSCON_Driver,sceGPIO_Driver,sceClockgen_Driver,sceI2C_Driver等等) 有些初始化依赖idstorage key(例如key 4,5,6),这就是1.50核心刷到TA082/086主板的PSP上变砖的原因: 一部分是因为TA082/086主板改变了时钟硬件,1.50核心不能识别它;另一部分是因为某些初始化步骤依赖key 5,当破坏key 5时,初始化就会终止,固件不会继续运行。 硬件初始化(包括主内存DDR SDRAM)完成后,main.bin就将IPL第三部分(主体)加载到物理地址0x08400000(这是DDR SDRAM)处并跳转到新地址启动系统。 |
|
|