技术参考
shadPS4 的固件模块(sys_modules)是什么?LLE 和 HLE、游戏格式、更新补丁和 DLC 放哪
要点
- shadPS4 的 sys_modules 文件夹放的是 PS4 系统里的个别模块(.sprx 文件,比如 libSceNgs2.sprx、libSceFont.sprx),不是整个固件;README 列了 34 个支持的模块。
- HLE 是模拟器自己重写系统库,LLE 是直接加载 PS4 原本的模块。shadPS4 大部分系统库用 HLE,放进 sys_modules 的模块会改走 LLE。
- v0.8.0(2025-04)起 shadPS4 不再安装 PKG,只读解包后的游戏文件夹,文件夹里必须有 eboot.bin 和 sce_sys/param.sfo。
- 更新补丁放在游戏文件夹旁边,命名为「游戏文件夹名-UPDATE」或「-patch」;DLC 放在 user/addcont 下和游戏同名的子文件夹里。
- PS5 模拟器各有做法:KytyPS5 写明不需要、也不打算支持外部系统模块。
目录
shadPS4 说的「固件模块」,是放在 sys_modules 文件夹里的 PS4 系统模块文件(.sprx),比如 libSceNgs2.sprx(音频)、libSceFont.sprx(字体),不是整个 PS4 固件。 shadPS4 大部分系统功能是自己重写的(HLE),放进 sys_modules 的模块会被直接加载(LLE),用来补上重写得还不完整的部分。游戏本身则是一个解包后的文件夹,里面有 eboot.bin 和 sce_sys/param.sfo;从 v0.8.0 起 shadPS4 不再安装 PKG。更新补丁、DLC 各有固定的放法,下面逐一说明。
以下按 shadPS4 v0.21.0(2026-10-30)核对。
shadPS4 用到的几样东西
| 东西 | 是什么 | 放在哪(默认) | 必需吗 |
|---|---|---|---|
| 游戏文件夹 | 解包后的 PS4 游戏,含 eboot.bin、sce_sys/param.sfo | 任意位置,在启动器里添加为游戏文件夹 | 必需 |
| 系统模块(.sprx) | PS4 系统里的个别库文件 | user/sys_modules/ | README 说游戏正常运行需要;缺了部分游戏会出问题 |
| 字体 | PS4 系统字体 | user/fonts/ 下的 font、font2 | 部分游戏需要 |
| 更新补丁 | 游戏的版本更新 | 游戏文件夹旁边的 <文件夹名>-UPDATE | 看游戏 |
| DLC | 追加内容 | user/addcont/<游戏编号>/ | 看游戏 |
| 着色器缓存 | 模拟器自己生成 | user/cache/<游戏编号> | 自动生成 |
用户目录(user)在哪:如果 shadPS4 程序旁边有 user 文件夹就用它(便携模式);否则 Windows 是 %APPDATA%\shadPS4,macOS 是 ~/Library/Application Support/shadPS4,Linux 是 ~/.local/share/shadPS4。配置文件从 v0.16.0 起是 config.json(以前叫 config.toml,旧配置启动时会提示迁移)。
HLE 和 LLE:模拟器怎么处理 PS4 的系统库
PS4 游戏运行时会不停调用系统提供的库:画图、放音频、读手柄、解码视频、渲染字体……模拟器必须把这些库也「提供」给游戏。办法有两种,shadPS4 官方 wiki 是这么定义的:
| HLE(高层模拟) | LLE(低层模拟) | |
|---|---|---|
| 定义 | 模拟器提供对原模块的重新实现 | 直接使用主机的固件文件 |
| 好处 | 不需要主机文件;通常更快;可以针对电脑优化 | 行为和原机一致,没写完的功能也能用 |
| 坏处 | 没实现完的函数会出错或被跳过 | 需要对应的模块文件;只有部分模块能这样加载 |
shadPS4 的做法是以 HLE 为主:内核(libkernel)、显卡驱动(GnmDriver)、画面输出(VideoOut)、手柄(Pad)等约 80 个系统库都是模拟器自己写的。对一部分 HLE 还不完整的库(主要是音频解码、视频播放、字体、JSON / XML 解析这类),shadPS4 允许用 LLE 加载真实模块。
加载逻辑很简单:sys_modules 里有这个模块,就加载它;没有的话,有 HLE 版本就退回 HLE(日志里会写「switching to HLE」),连 HLE 都没有就空跑(日志写「No HLE available」),这时游戏可能缺声音、缺字幕、闪退或卡在某个画面。
另外,放进 sys_modules/<游戏编号>/ 子文件夹的模块只给那一款游戏用,可以针对个别游戏单独处理。sys_modules 的位置也能在设置里改。
sys_modules 支持哪些模块
shadPS4 README(2026-11-01)列出的 34 个模块,按名字大致归类:
| 类别 | 模块 |
|---|---|
| 音频 | libSceAt9Enc、libSceAudiodec、libSceAudiodecCpu、libSceAudiodecCpuDdp、libSceAudiodecCpuDtsHdLbr、libSceAudiodecCpuHevag、libSceAudiodecCpuM4aac、libSceNgs2 |
| 视频播放 | libSceAvPlayer、libSceAvPlayerStreaming、libSceBeisobmf、libSceBemp2sys |
| 字体 | libSceFont、libSceFontFt、libSceFreeTypeOl、libSceFreeTypeOptOl、libSceFreeTypeOt、libSceWkFontConfig |
| 图片 | libSceJpegDec、libSceJpegEnc、libScePngEnc |
| 数据格式 | libSceJson、libSceJson2、libSceXml、libSceCesCs(字符编码) |
| 系统与其他 | libSceLibcInternal、libSceUlt、libSceRtc、libSceRudp、libScePsmKitSystem、libSceSystemGesture、libSceDepth、libScePadTracker、libSceMoveTracker |
文件名后缀都是 .sprx。从名字就能看出各自管什么:开场视频归 AvPlayer,音效和音乐归 Ngs2 和 Audiodec 系列,文字显示归 Font、FreeType 系列。所以缺模块时的症状也多半落在这些地方:没声音、视频黑屏、文字显示不出来。
为什么不需要整个 PS4 固件
PS4 的系统更新包是一个叫 PS4UPDAT.PUP 的文件,里面是整个操作系统。shadPS4 走的是「重写为主、个别模块补位」的路线,不加载完整的系统,所以只用得到上面那几十个模块和字体。
另有一类 PS4 模拟器走相反的路:Obliteration 打算直接运行真正的 PS4 系统软件,Emulation General Wiki 指出它因此需要 PS4 的固件文件——但截至 2026-11-01 它还跑不了任何游戏。
游戏格式:PKG、解包后的文件夹、eboot.bin
| 名称 | 是什么 | shadPS4 能用吗 |
|---|---|---|
| PKG | PS4 的安装包格式,PS Store 下载的游戏、更新、DLC 都是这种格式,内容是加密的 | v0.8.0(2025-04-23)起不能,官方移除了 PKG 支持 |
| 解包后的游戏文件夹 | 安装后的游戏文件,未加密 | 能,这是现在唯一的格式 |
| eboot.bin | 游戏的主程序(可执行文件),在游戏文件夹根目录 | 必须有 |
| sce_sys/param.sfo | 游戏的元数据:标题、编号(Title ID)、版本号 | 必须有,shadPS4 靠它识别游戏 |
| .sprx / .prx | 动态库。游戏自己带的放在游戏文件夹里,系统的放在 sys_modules | 游戏自带的自动加载 |
shadPS4 早期能装一部分 PKG,源码里带着处理这类包的代码;2025 年 3 月的一次提交把这部分整体删除,v0.8.0 的更新说明写的是「Removed fpkg support」。所以现在的 shadPS4 不再处理加密的安装包,它读的就是一个普通文件夹。
CUSA 编号:PS4 游戏的 Title ID,格式是 4 个字母加 5 位数字,例如《血源》欧版年度版是 CUSA03173。PS4 不按前缀区分地区,同一款游戏不同地区的版本各有一个编号;系统自带的程序用 NPXS 开头。shadPS4 的游戏文件夹通常就用这个编号命名,更新文件夹、着色器缓存、单个游戏的模块文件夹也都靠它对应。
更新补丁和 DLC 放哪
更新补丁:放在游戏文件夹同一层,文件夹名是「游戏文件夹名」加 -UPDATE(也认 -patch)。shadPS4 启动游戏时会把它当作覆盖层叠在本体上,不用合并文件:
games/
├── CUSA00900/ ← 游戏本体(eboot.bin、sce_sys/…)
├── CUSA00900-UPDATE/ ← 更新补丁
└── CUSA00900-mods/ ← 可选:mod 文件
同样的规则还支持一个 -mods 文件夹放 mod。设置里也有选项可以暂时忽略更新补丁。很多游戏的兼容报告会注明测试时的游戏版本(比如《血源》1.09),版本不同表现可能不同。
DLC:放在「额外内容目录」下,和游戏同名的子文件夹里。默认是 user/addcont/<游戏编号>/,在启动器(QtLauncher)的设置里可以改位置。v0.21.0 的更新说明里专门改进了 DLC(addcont)的加载。只有授权、没有实际文件的 DLC(比如某些解锁类 DLC)放在 user/licenses。
多个游戏文件夹:启动器设置的「Paths」页可以添加多个游戏目录,sys_modules、字体、DLC 的目录也在这里单独设置。
奖杯
shadPS4 支持 PS4 的奖杯系统,显示奖杯需要在 user/keys.json 里填写奖杯用的密钥。没有它不影响游戏本身运行。
PS5 模拟器需要这些吗
- KytyPS5 的 README 写明:外部的低层模拟模块「既不需要,也不打算支持」。
- SharpEmu 的 README 写明项目不包含任何固件、游戏数据或 PlayStation 的专有资源。
- PS5 游戏的主程序同样叫
eboot.bin。据游民星空 2026 年 7 月转述 SharpEmu 当时的项目说明,它已经能加载真实游戏的 eboot.bin,并支持加载系统模块(PRX 和 sys_module)。PS5 模拟器现状见 PS5 模拟器出来了吗。
相关教程
- 安装和第一次设置:shadPS4 Windows 安装教程
- 电脑够不够用:PS4 模拟器配置要求
- 模拟器怎么选:2026 年 PS4 模拟器推荐
- 为什么 PS4 能这样模拟:为什么 PS4 能模拟、PS5 难
- 法律问题:PS 模拟器合法吗
常见问题
shadPS4 的 sys_modules 是什么?
是 shadPS4 用户目录里的一个文件夹(user/sys_modules),用来放 PS4 系统里的个别模块文件(.sprx),比如负责音频的 libSceNgs2.sprx、负责字体的 libSceFont.sprx。shadPS4 README 列了 34 个支持的模块。放进去的模块会被直接加载(LLE),没放的就用模拟器自己重写的版本(HLE)。
shadPS4 需要 PS4 固件吗?
不需要整个固件(系统更新包)。shadPS4 只会加载 sys_modules 里的个别模块和 user/fonts 里的字体。README 说这些模块是让游戏正常运行所需要的;没放时,有 HLE 替代的会自动改用 HLE,没有替代的功能就会缺失,部分游戏因此出问题。
LLE 和 HLE 有什么区别?
shadPS4 wiki 的说法:LLE(低层模拟)是直接使用主机的固件文件;HLE(高层模拟)是模拟器提供对原模块的重新实现。HLE 不依赖主机文件、通常更快,但没写完的功能会出错;LLE 更接近原机,但需要对应的模块文件。
shadPS4 能装 PKG 吗?
现在不能。shadPS4 早期版本能安装一部分 PKG,v0.8.0(2025-04-23)起移除了 PKG 支持。现在它只读取解包后的游戏文件夹,文件夹里要有 eboot.bin 和 sce_sys/param.sfo。
CUSA 是什么?
CUSA 开头的编号是 PS4 游戏的 Title ID,格式是 4 个字母加 5 位数字,比如 CUSA00900。同一款游戏不同地区的版本各有一个编号;PS4 的系统程序用 NPXS 开头。shadPS4 的游戏文件夹、更新文件夹、着色器缓存都用这个编号来对应。
shadPS4 的游戏更新和 DLC 放在哪?
更新补丁放在游戏文件夹的同一层,文件夹名是游戏文件夹名加 -UPDATE(或 -patch),比如 CUSA00900 和 CUSA00900-UPDATE 并排,模拟器会自动叠加。DLC 放在额外内容目录(默认 user/addcont)下面和游戏同名的子文件夹里,路径可以在启动器的设置里改。