近些年来,负责在游戏开始前控制主机的程序变得越来越复杂,这主要是由于对安全性和服务(可更新 API、在线多人游戏、多媒体等)的需求不断增加。 PSP 试图在非常有限的硬件条件下实现所有功能。 我并不是说结果十分中庸,但这些决策都是平衡成本、性能和稳健性的结果。
架构设计
首先,PSP 在 Tachyon 内包含一个隐藏、无文档的 4 KB ROM,其中包含引导加载程序。 换句话说,CPU 在接通电源后,就会在其中查找指令。 该 ROM 有很多名字,如"Bootrom"、"Pre-IPL"或"Lib-PSP iplloader"。 后者是索尼的内部代号。
系统的其余部分保存在主板上的 32 MB NAND 闪存内。 这里是 PSP 操作系统(OS)的主体部分。
操作系统由以下组件组成:
模块
模块在 PC/Windows 中被称为"程序"或"驱动程序"。 模块加载后可驻留在内存中,并执行以下任务 : - 暴露函数以简化对特定硬件的访问。 - 作为前台程序运行(如游戏)。
模块的二进制文件可以被加密或解密。 它还嵌入了元数据,以区分"用户模块"或是"内核模块";后者允许新模块控制内存中的特权区域(也就是内核所在区域)。
模块由"内核"或"Visual Shell"(VSH)启动。 用户模块可在内核的允许下运行其他模块。 这加强了安全性——例如,内核永远不会从通用媒体磁盘(UMD)上加载内核模块。
内核/IPL
虽然该操作系统本身不包含内核,但它有多个组件来履行传统内核的职责。
首先是 IPL,它由 Pre-IPL 加载,负责初始化硬件。 IPL 中名为 IDStorage 的部分还存储了控制台的唯一信息(如 MAC 地址、序列号和 UMD 身份验证密钥) 。 覆盖最后一个区域会导致灾难性后果! 因此,UMD 密钥会被多次复制,以防损坏。
然后,IPL 会加载一组内核模块,用于处理底层操作(内存管理、多线程和文件系统)。 它们还实现了由 MPU 触发的内存访问异常(还记得分段吗?) 简单起见,我在本文中使用"内核"一词时,指的就是这些内核模块。
尽管如此,内核并不进行多任务处理,但它确实为单个进程实现了协作式多线程。
只要主机通电,内核就会一直存在内存中,因为程序(用户模块)不是为裸机编写的。 相反,用户模块依赖于内核模块暴露的函数。 因此,内核预留了 4 MB 主内存和另外 4 MB"易失性内存"(用于许多操作的临时缓冲区,根据请求允许访问)。 这样,用户程序只能使用 24 MB 主 RAM(总共32 MB)。
其他部分
NAND 中还存储了固件的其他部分。
首先是Visual Shell或"VSH",这是用户打开 PSP 后首先看到的东西。 VSH 是一个图形用户界面,允许用户运行游戏和其他模块(仅限用户模块)。 它由多个模块组成,其中一些按需加载。
一个奇怪的事实是:用于启动零售游戏的系统调用首先会重启主机,然后加载可执行文件。 可能是为了卸载 VSH,为游戏释放资源。
其次,NAND 中还有第二个分区,用于存储用户相关数据,如网络设置。 该分区称为"flash1"(与"flash0"相对),其内容称为 系统设置。
启动过程
既然我们已经确定了主要部件,那么让我们看看它们是如何组织起来,使主机开机后进入"工作状态"的。 安全问题在此仅作简要讨论,下一节将进行更深入的介绍。
复杂的启动过程如下 :
- 主 CPU 的复位向量置为
0x1FC00000,指向 Tachyon 内部的 Pre-IPL ROM。- Pre-IPL 的前半部分告诉 CPU 将另一半复制到便笺存储器,然后继续执行。
- 之后,Pre-IPL 将从 NAND 或外部记忆棒中查找下一阶段的内容。 当选择后者时(在正常使用情况下从不选择),PSP 会进入工厂服务模式。 为简单起见,我们将重点讨论正常模式(选择 NAND)。
- Pre-IPL 初始化 NAND 控制器,并从 NAND 继续执行。 Pre-IPL 的第二部分运行 IPL,这会解密加密的 IPL(使用"KIRK",详情稍后介绍),并作为工作区复制到Graphics Engine中的 eDRAM 上。
- 解密完成后,它会继续在解密后 IPL 所在的 eDRAM 中执行。
- Pre-IPL 的前半部分告诉 CPU 将另一半复制到便笺存储器,然后继续执行。
- IPL 的执行过程分为三个阶段。
- 第一阶段称为 loader,重置主 CPU 并从内存映射中隐藏 Pre-IPL ROM。 加载程序还会初始化最低需求硬件,并在 eDRAM 中解压下一阶段的"Main.bin"。
- Main.bin主要用于初始化其余硬件,包括主存。 完成后,它会将第三阶段解密到主存中,然后继续执行。
- 最后一个阶段称为payload,它会加载内核。 内核以不同二进制文件、模块和元数据的形式存储,一旦加载到主存中,就能赋予系统生命。 随后就能显示交互式界面。
Visual Shell
该主机首次推出了(至少在国际上)著名的XrossMediaBar或"XMB"。 这是随 PSP 一起发布的功能丰富的图形用户界面。

游戏 "类别允许运行游戏、管理存档或搜索其他 PSP(游戏共享)
当用户选择实际的游戏项目时,XMB 会使用游戏提供的资产调整样式,直到用户选择其他项目

"设置"类别提供了大量自定义选项
某些项目将许多设置控件组合在一起
从人机交互的角度来看,XMB 为许多交互难题的提供了非常有趣的解决方法(例如深度的信息中进行导航,避免向用户提供大量选项,以及将所有这些解决方案布置在4.3英寸的屏幕上)。 从本质上讲,信息通过"类别"和"元素"组织,又通过十字键在类别和元素之间导航。 左右箭头在类别之间切换,上下箭头从类别中选择元素。 值得注意的是,所有类别都在同一层级结构中。 因此,没有条目显示在其他条目之上(阻碍了吸引注意力的广告等的插入)。
此外,XMB 还提供自定义选项,例如更改背景颜色和重新排列项目。 它还提供多媒体服务,也允许用户加载游戏(无论是 UMD 还是记忆棒)。
它还有用于多媒体和存档管理的内置文件查看器。
可更新性
正如我们之前所看到的,除 Pre-IPL 之外的所有内容都存储在可写存储器中,因此是"可更新"的。 索尼以可下载文件的形式分发固件更新。 用户可以手动下载,或使用 XrossMediaBar 上的"系统更新"助手通过 Wifi 自动下载和安装更新。
一些更新通过在启动过程中增加更多的加密层和对内核模块进行完整性验证来加强PSP的安全系统。
从开发人员的角度来看,一些更新通过添加更多功能和修正现有功能来增强API。 因此,游戏与其开发的系统版本强绑定,用户必须更新才能玩到更新的游戏。 新的更新总是向后兼容的,所以理论上老游戏在更新的系统上应该不会出错。
从用户的角度来看,一些更新带来了新的服务,如网络浏览器、RSS 阅读器等。 PlayStation 3 发布后,许多在线应用被移植到 PSP 上,如"PlayStation 商店"和"Remote Play"。



