☰
RetroArch BIOS 资源包:一键补齐多平台模拟器 BIOS 文件
2026/10/15 13:01:23 网站建设 项目流程

简介:这份资源面向复古游戏模拟器玩家与 Retropie、Recalbox、Lakka、Retrobat、EmuVR 等前端使用者,集中提供 libretro 体系所需的系统固件与 BIOS 文件,解决模拟器因缺少底层固件而无法启动或运行异常的问题。压缩包共 262 个文件,约 78MB,以 bin 固件为主,另含 rom、zip、szx、pce、wav、dat、sms、jar、sfc、img 等类型,覆盖 3DO、Amiga、GameCube、64DD 等多平台,并附有 CRC、MD5、SHA1 校验信息,便于核对文件完整性。目前已有 855 人学习下载。内容按平台归类,包含 kick40068.A1200、kick34005.A500、kick40063.A600、64DD_IPL.bin 以及 gc-pal、gc-ntsc 系列等常见固件,可直接放入对应模拟器目录使用,适合需要一次性补齐多平台 BIOS、减少逐个搜集与校验成本的玩家与整合包制作者。

1. 从一堆散装 BIOS 到能开机的 retroarch_system:这份资源到底省了哪几步

如果你折腾过 retropie、recalbox、lakka、batocera 这类前端,大概率经历过同一个场景:系统刷好了,ROM 也拷进去了,点开某个主机模拟器却黑屏或者弹一句缺 BIOS。然后你开始满世界找scph5501.bin、gba_bios.bin、neogeo.zip,找到的文件名不对、大小不对、校验值不对,放错目录还是认不出来。retroarch_system 这个资源包解决的就是这件事——它把各种仿真平台需要的 BIOS 文件按平台归类整理好,并且附带了编译/构建相关的脚本和目录结构说明,让你不用再一个个手动去凑。

它适合三类人:一是刚入坑 retrogaming、用 rg351p 或 351elec 这类掌机固件的新手,想一次性把 BIOS 补齐;二是用 emulationstation 做前端、后端跑 retroarch 的玩家,需要搞清楚每个核心到底要哪个 BIOS、放哪个路径;三是想自己编译或裁剪 BIOS 集合的进阶用户,需要一套可复现的目录规范和构建流程。关键词里出现的 retropie、recalbox、lakka、retrobat、emuvr、arkos 这些系统,本质上都是围绕 libretro 核心做前端封装,BIOS 的命名和存放逻辑大同小异,这份资源的价值就在于把共性抽出来,让你换系统时不用重新踩一遍坑。

2. BIOS 在 libretro 体系里到底怎么被加载:路径、命名与核心匹配

2.1 RetroArch 的 system 目录与核心查找顺序

RetroArch 加载 BIOS 的逻辑并不复杂,但坑在于「它不会告诉你它找了哪些路径」。核心(core)在初始化时会调用RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY,拿到系统目录后按核心内部硬编码的文件名去查找。系统目录默认是 RetroArch 安装目录下的system/,但在 retropie 上是/home/pi/RetroPie/BIOS,在 lakka 上是/storage/system,在 arkos 上是/roms/bios。这就是为什么同一个 BIOS 文件,在 A 系统能用,换到 B 系统就找不到。

常见做法是先用 RetroArch 的日志功能确认它实际在哪个目录找。启动时加--verbose,日志里会打印[INFO] [Core]: Loading dynamic libretro core之后的一系列路径信息。我一般会先跑一次带 verbose 的启动,把 system directory 那行抓出来,再决定文件往哪放。

# 启动 RetroArch 并输出详细日志,过滤出系统目录相关行 retroarch --verbose 2>&1 | grep -i "system directory\|SYSTEM_DIRECTORY" # 典型输出示例(不同平台路径不同): # [INFO] [Core]: System directory: /home/pi/RetroPie/BIOS # [INFO] [Core]: Save directory: /home/pi/RetroPie/roms/saves

这段命令的作用是让 RetroArch 把内部环境变量的值吐出来。--verbose是关键参数,不加的话日志级别不够,看不到路径信息。grep过滤是为了在大量日志里快速定位。如果你用的是 batocera 或 recalbox,它们的前端会覆盖这个路径,所以要以实际输出为准,不要照搬网上的路径。

2.2 各平台 BIOS 文件名对照与校验

BIOS 文件最恶心的地方是「同名不同内容」和「同内容不同名」。比如 PlayStation 的 BIOS,scph5501.bin是美版,scph5500.bin是日版,scph5502.bin是欧版,但有些核心只认其中一个名字。再比如 Neo Geo 的neogeo.zip,里面包含多个文件,不同版本的 MAME 核心要求的 zip 内容还不一样。

下面这张表是我整理资源包里常见平台的对照关系,实际使用时以你所用核心的文档为准:

平台核心示例BIOS 文件名存放位置校验要点
PlayStationBeetle PSX / PCSX-ReARMedscph5500.bin / scph5501.bin / scph5502.binsystem/MD5 需匹配,大小 512KB
Game Boy AdvancemGBA / VBA-Mgba_bios.binsystem/16KB,MD5 为 a860e8c0b6d573d191e4ec7db1b1e4f6
Neo GeoFBNeo / MAMEneogeo.zipsystem/zip 内文件列表需匹配核心版本
PC Engine CDBeetle PCE Fastsyscard3.pcesystem/256KB,注意不是 syscard2
Sega CDGenesis Plus GXbios_CD_U.bin / bios_CD_E.bin / bios_CD_J.binsystem/三区域分别对应
DreamcastFlycastdc_boot.bin / dc_flash.binsystem/dc/部分核心要求放在子目录

校验这一步不能省。我见过太多次「文件放进去了但核心报错」,最后发现是下载的 BIOS 被截断或者被文本编辑器改过。用md5sum或sha1sum对一遍,比反复重启系统快得多。

# 批量校验 BIOS 文件的 MD5,与已知值对比 md5sum /home/pi/RetroPie/BIOS/*.bin # 如果资源包自带校验清单,可以这样批量比对 cd /home/pi/RetroPie/BIOS md5sum -c /path/to/retroarch_system/checksums.md5

md5sum -c会逐行读取校验文件并报告 OK 或 FAILED。资源包里如果带了 checksums 文件,这一步能一次性筛出所有损坏或不匹配的文件。注意校验文件里的路径要和你实际存放路径一致,否则会报「没有那个文件」。

2.3 核心与 BIOS 的版本绑定关系

一个容易被忽略的点是:BIOS 不是「有了就行」,它和核心版本是绑定的。比如 FBNeo 的neogeo.zip,核心更新后可能要求 zip 内包含新的 ROM 文件;Beetle PSX 在不同版本对scph5501.bin的读取方式也有差异。资源包如果按核心版本分类整理,就能避免「BIOS 对了但核心不认」的情况。

我一般会这样做:先确定我要用哪个核心(比如 FBNeo 还是 MAME 2003-Plus),然后去资源包里找对应核心目录下的 BIOS 集合,而不是从「平台」维度去找。因为同一个平台可能有多个核心,每个核心要的 BIOS 未必一样。这也是为什么单纯按主机名整理 BIOS 的包,用起来经常出问题。

3. 把 retroarch_system 落到掌机与电视盒:目录映射与批量部署

3.1 不同系统的 BIOS 目录映射关系

资源包拿到手之后,第一件事不是无脑拷贝,而是搞清楚你的系统把哪个目录当作 system directory。下面是我在几类常见环境里实测过的映射:

系统/固件实际 BIOS 目录备注
retropie/home/pi/RetroPie/BIOS可通过 retropie-setup 修改
recalbox/recalbox/share/bios共享分区,SMB 可访问
lakka/storage/system只读分区需 remount
batocera/userdata/bios用户数据分区
arkos/roms/bios与 ROM 同分区
351elec/roms/bios同上,rg351p 常用
emuvr随 VR 前端配置通常在应用数据目录

映射关系搞错的话,文件放再多也没用。我一般会先在目标系统上ls一下这些路径,确认哪个存在、哪个可写,再决定拷贝目标。

# 在目标设备上确认 BIOS 目录是否存在并可写 for d in /home/pi/RetroPie/BIOS /recalbox/share/bios /storage/system /userdata/bios /roms/bios; do if [ -d "$d" ]; then echo "存在: $d" touch "$d/.write_test" 2>/dev/null && echo " 可写" && rm "$d/.write_test" || echo " 只读" fi done

这段脚本遍历常见路径,检查目录是否存在以及是否可写。touch一个临时文件再删除,是判断写权限最直接的方法。如果你在 lakka 上发现/storage/system只读,需要先mount -o remount,rw /storage再操作,改完记得 remount 回只读,否则系统更新可能出问题。

3.2 批量拷贝与权限修正

确认目录后,从资源包拷贝文件。如果资源包是按平台分目录的,而你的系统要求所有 BIOS 平铺在一个目录里,就需要批量展开。我一般用rsync而不是cp,因为 rsync 能保留权限、支持断点续传,拷贝大量小文件时更稳。

# 将资源包中所有 BIOS 文件平铺拷贝到目标目录 rsync -av --no-relative /path/to/retroarch_system/bios/*/ /home/pi/RetroPie/BIOS/ # 修正权限,确保运行 RetroArch 的用户可读 chmod 644 /home/pi/RetroPie/BIOS/* chown pi:pi /home/pi/RetroPie/BIOS/*

--no-relative的作用是去掉源路径的目录层级,只保留文件名,这样不同子目录下的同名文件会冲突——所以拷贝前要确认资源包里没有同名但不同内容的文件。chmod 644保证文件可读但不可执行,避免某些核心误判。chown根据你的系统用户调整,retropie 默认是pi,其他系统可能是root或odroid。

3.3 用脚本做部署前检查

手动拷贝容易漏文件。我习惯写一个简单的检查脚本,在拷贝后跑一遍,确认关键 BIOS 都在位。

#!/bin/bash # check_bios.sh - 检查关键 BIOS 文件是否存在 BIOS_DIR="${1:-/home/pi/RetroPie/BIOS}" REQUIRED=( "scph5501.bin" "gba_bios.bin" "syscard3.pce" "neogeo.zip" "bios_CD_U.bin" ) missing=0 for f in "${REQUIRED[@]}"; do if [ ! -f "$BIOS_DIR/$f" ]; then echo "缺失: $f" missing=$((missing + 1)) fi done echo "检查完成,缺失 $missing 个文件" exit $missing

这个脚本接收一个参数作为 BIOS 目录,默认用 retropie 的路径。REQUIRED数组里列出你实际用到的平台所需文件,按需增删。退出码等于缺失数量,方便在自动化流程里判断。注意neogeo.zip这类压缩包,脚本只检查文件存在,不检查内部内容,内部校验还是要靠前面的 md5 步骤。

4. 避坑与排查:BIOS 加载失败的六种典型翻车

4.1 文件放对了但核心报「BIOS not found」

现象:确认文件在 system 目录,权限也对,但核心启动时仍然提示找不到 BIOS。 原因:核心查找的路径和你以为的路径不一致。RetroArch 的 system directory 可能被前端覆盖,或者核心内部用了相对路径。 解决:用--verbose启动,看日志里实际打印的 system directory。如果和你的存放路径不一致,要么改 RetroArch 配置里的 system directory,要么把文件移到日志显示的路径。另外检查核心是否有独立的 BIOS 目录设置,比如 Flycast 的system/dc/子目录。

4.2 文件名大小写导致识别失败

现象:Linux 系统上文件明明叫SCPH5501.BIN,核心却找不到。 原因:Linux 文件系统区分大小写,核心代码里写的是小写文件名。 解决:统一改成小写。用rename或循环批量处理:

# 将 BIOS 目录下所有文件名转为小写 for f in /home/pi/RetroPie/BIOS/*; do mv "$f" "$(dirname "$f")/$(basename "$f" | tr 'A-Z' 'a-z')" done

tr 'A-Z' 'a-z'做大小写转换,basename和dirname拆分路径。注意如果目录下已有同名小写文件,mv会覆盖,操作前先备份。

4.3 neogeo.zip 内容不匹配核心版本

现象:neogeo.zip存在,但 FBNeo 启动 Neo Geo 游戏时提示 ROM 缺失。 原因:不同版本的 FBNeo 要求的neogeo.zip内部文件列表不同,旧版 zip 缺少新加入的文件。 解决:从资源包里找对应核心版本的neogeo.zip,或者用核心自带的 ROM 校验功能确认缺哪些文件。不要随便从网上找一个就用,版本不对照样报错。

4.4 拷贝后权限变成 root 导致前端无法读取

现象:用 root 拷贝文件后,普通用户运行的前端读不到 BIOS。 原因:cp默认保留源文件权限,如果源文件是 root 所有,目标也是 root 所有。 解决:拷贝后统一chown给运行前端的用户。或者用rsync -a --chown=pi:pi在拷贝时直接指定属主。

4.5 存储空间不足导致文件截断

现象:拷贝过程没报错,但文件大小不对,核心加载失败。 原因:目标分区空间不足,cp或rsync写入不完整。 解决:拷贝前用df -h确认空间,拷贝后用md5sum -c校验。资源包如果带了校验清单,这一步能直接发现问题。

4.6 前端缓存导致 BIOS 更新不生效

现象:换了新 BIOS 文件,重启前端后仍然用旧的。 原因:某些前端(如 emulationstation)会缓存核心配置,或者 RetroArch 的配置文件没重新加载。 解决:重启整个系统而不是只重启前端,或者手动删除 RetroArch 的配置缓存文件(通常在~/.config/retroarch/下)。我一般直接reboot,比找缓存文件快。

5. 进阶:自己维护一份可复现的 BIOS 集合

资源包用久了,你可能会想自己维护一份,方便换设备时快速部署。我的做法是建一个 Git 仓库,按平台分目录,每个目录放 BIOS 文件和一份checksums.md5,再加一个顶层脚本做部署和校验。

# 初始化 BIOS 仓库结构 mkdir -p retroarch_system/bios/{psx,gba,neogeo,pce,segacd} cd retroarch_system # 生成校验清单 find bios -type f -exec md5sum {} \; > checksums.md5 # 部署脚本 cat > deploy.sh << 'EOF' #!/bin/bash TARGET="${1:?用法: ./deploy.sh /目标/BIOS/目录}" rsync -av --no-relative bios/*/ "$TARGET/" cd "$TARGET" && md5sum -c /path/to/retroarch_system/checksums.md5 EOF chmod +x deploy.sh

这个结构的核心是「校验清单跟着文件走」。每次更新 BIOS 后重新生成checksums.md5,部署时自动校验,避免拷贝不完整。rsync的--no-relative让文件平铺到目标目录,适合大多数前端的要求。如果你的系统要求保留子目录结构(比如 Flycast 的dc/),去掉--no-relative即可。

还有一个技巧:用git-annex或git-lfs管理大文件,这样仓库本身不会因为 BIOS 文件而膨胀,同时保留版本历史。我一般用git-lfs,配置一次之后git add大文件会自动走 LFS,换设备时git clone加git lfs pull就能拿到完整集合。

从那以后我每次换设备或刷固件,都强制走一遍「部署 → 校验 → verbose 启动确认路径」这三步,不再凭记忆拷文件。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询