简介这份资源面向复古游戏模拟器玩家与 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 21 | 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 的 BIOSscph5501.bin是美版scph5500.bin是日版scph5502.bin是欧版但有些核心只认其中一个名字。再比如 Neo Geo 的neogeo.zip里面包含多个文件不同版本的 MAME 核心要求的 zip 内容还不一样。下面这张表是我整理资源包里常见平台的对照关系实际使用时以你所用核心的文档为准平台核心示例BIOS 文件名存放位置校验要点PlayStationBeetle PSX / PCSX-ReARMedscph5500.bin / scph5501.bin / scph5502.binsystem/MD5 需匹配大小 512KBGame Boy AdvancemGBA / VBA-Mgba_bios.binsystem/16KBMD5 为 a860e8c0b6d573d191e4ec7db1b1e4f6Neo GeoFBNeo / MAMEneogeo.zipsystem/zip 内文件列表需匹配核心版本PC Engine CDBeetle PCE Fastsyscard3.pcesystem/256KB注意不是 syscard2Sega 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.md5md5sum -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只读分区需 remountbatocera/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 ) missing0 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) donetr 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 --chownpi: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 启动确认路径」这三步不再凭记忆拷文件。希望帮到你。本文还有配套的精品资源点击获取