1. 为什么我坚持把EmuELEC从TF卡挪进EMMC
接触EmuELEC 4.7的玩家,八成都是从一张TF卡开始的。我当时也是图省事,把整合包刷进TF卡,往盒子上一插就能开机进游戏。前两周确实爽,但这种用法说白了就是"应急方案",不是"长期方案"。用了一个月之后,三个问题把我逼得必须迁移到EMMC:
第一,TF卡在长时间运行RetroArch、DC、PSP这类模拟器时,发热非常明显。卡片背面烫手,偶尔还会出现掉盘卡死,玩到一半重启游戏的情况我至少碰上过三次。第二,盒子的TF卡槽基本都在底部或背面,插着卡的时候挪动盒子、拔插线缆都碍事,卡槽本身也容易松动。第三,不管怎么调优,TF卡在小文件随机读写的场景下就是比不过板载EMMC,进游戏列表、加载封面缩略图的时候,那个等待转圈让人很不耐烦。
其实EMMC和TF卡的底层协议有亲缘关系,但物理形态和使用环境差远了。EMMC是直接焊在主板上的存储芯片,走的是板载MMC总线,信号完整性、供电稳定性都比TF卡经过卡槽触点、再经过读卡器控制器转换要强得多。模拟器场景恰恰是大量小文件、高频随机读,这种负载下EMMC的优势会被明显放大。
在动手之前,我先把预期的账算了一遍:EmuELEC 4.7的底包加基础配置,系统分区大概占1.5GB到2GB;剩下的是STORAGE分区,用来放BIOS、ROM、存档、主题这些。如果你手里这台盒子EMMC容量只有4GB,装完系统后可用空间也就剩1.5GB左右,放几个PS1游戏就满了,不推荐;8GB是比较舒服的起步线,PS1、DC、SFC、MD这些经典平台的精选ROM都放得下;16GB就可以把多个平台的完整ROM集整理进去了。所以迁移之前,第一件事不是找教程,而是先确认盒子的EMMC容量。查看方式很简单:插着TF卡启动EmuELEC系统,SSH连上去执行cat /proc/partitions或者lsblk,就能看到内置存储的真实大小。
另外还要有一个风险预期:写入EMMC这个操作会覆盖盒子原来内置的系统。很多电视盒子出厂带的是安卓,一旦刷掉就回不去了。除非你提前备份原厂分区,否则不要贸然下手。这块内容我在第三节里专门讲,备份这个动作一定不能省。
2. 写入EMMC前需要备好的环境与工具
很多人迁移失败,不是步骤错,而是准备工作没做足。我先列个清单,每一项都值得你花时间确认,别嫌啰嗦,后面能少踩一半的坑。
2.1 确认盒子芯片与DTB匹配
EmuELEC 4.7主要面向晶晨(Amlogic)S905系列芯片方案,市面上S905X、S905D、S905W、S912这些芯片的盒子都能跑。但不同芯片、不同内存大小,对应的设备树文件DTB不一样。选错DTB的直接后果就是启动黑屏,或者系统起来之后WiFi、蓝牙、网口全部失灵。
在TF卡根目录下有个device_trees文件夹,里面是所有已知盒子的DTB文件。常见几个命名对应关系大概是:
| 芯片方案 | 常见DTB文件名 | 备注 |
|---|---|---|
| S905(老款) | gxbb_p200.dtb | 多见于初代S905盒子 |
| S905X | gxl_p212_1g.dtb / gxl_p212_2g.dtb | 1G和2G内存版本不一样 |
| S905D | gxl_p230_2g.dtb | 部分运营商盒子 |
| S905W | gxl_p281_1g.dtb | 多见于小体型盒子 |
| S912 | gxm_q200_2g.dtb / gxm_q201_2g.dtb | 注意区分Q200和Q201 |
确认方法很简单:先在TF卡方案下正常启动系统,进入EmulationStation界面,如果显示、声音、网络都正常,说明当前用的DTB没问题。然后执行cat /proc/cmdline,或者直接看启动脚本里写的dtb文件名,记住它,后面迁移到EMMC之后还要用同样的DTB。这个细节很多人忽略,结果系统写进EMMC后怎么调都不对。
2.2 制作TF启动卡的正确姿势
制作启动卡没人不会,但有几个细节直接影响后续迁移的可操作性:
一是TF卡容量建议8GB以上。虽然EmuELEC系统本身不大,但整合包往往带了大量ROM和BIOS文件,卡太小装不下,而且剩余空间太小在运行时会频繁写入存档,加快卡的老化。
二是刷写工具推荐用balenaEtcher或者 Rufus,写入时选择"整卡镜像"模式,不要手动分区再解压文件。EmuELEC的img文件里已经包含分区表,只有整卡写入才能保证引导层正确。写入完成后,不要急着拔卡,Windows如果提示"是否格式化"一律忽略。
三是写入完成后把TF卡插到盒子上之前,最好用磁盘工具看一眼分区是否都识别出来了。TF卡上通常会有EMUELEC、STORAGE等多个分区,如果Windows只显示一个无法识别的小分区,不要慌,这是正常的,镜像分区在Windows下本来就不完全可见。
我个人的习惯是:TF卡做好之后,先把device_trees文件夹里对应的dtb复制一份到TF卡根目录,重命名为dtb.img,这样即使默认脚本没选对,启动时也能用上正确的设备树。这个操作不保证对所有盒子都有效,但在不少S905盒子上是最快的救急手段。
2.3 SSH访问准备与常用命令
EmuELEC默认开着SSH服务。把盒子连上路由器,在EmulationStation界面按Alt+F4或者直接在设置里可以看到IP地址。SSH登录账号密码是:
用户名:root 密码:emuelecSSH是后面所有迁移操作的入口,所以先确认能连上。连上之后,我建议先跑一遍这几条命令,熟悉系统状态:
lsblk blkid cat /proc/partitionslsblk能列出所有块设备,blkid能看到分区UUID和文件系统类型,cat /proc/partitions则快速显示设备主次号和容量。这三条命令输出的信息,在迁移过程中反复用到,先跑一遍至少心里有底。
3. 完整迁移流程:从TF卡启动到写入内置存储
准备工作做完,就可以开始正式迁移了。整个流程我分成四条步骤:识别EMMC设备节点、备份原系统、写入系统到EMMC、拔卡验证。每一条都有对应的操作命令和注意事项。
3.1 第一步:识别EMMC设备节点,避免把数据写错盘
写入操作的第一步,也是最关键的一步:搞清楚当前系统里哪个设备是EMMC,哪个是TF卡。如果设备节点搞反,dd命令会把TF卡或者U盘覆盖掉,数据直接白给,还浪费时间。
SSH连上盒子后执行:
lsblk输出一般长这样:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT mmcblk0 179:0 0 7.3G 0 disk ├─mmcblk0p1 179:1 0 122M 0 part ├─mmcblk0p2 179:2 0 512M 0 part └─mmcblk0p3 179:3 0 6.7G 0 part /storage mmcblk1 179:32 0 29.7G 0 disk ├─mmcblk1p1 179:33 0 122M 0 part └─mmcblk1p2 179:34 0 29.5G 0 part这里有个通用规律:通常mmcblk0是内置EMMC,mmcblk1是TF卡。但也见过部分盒子反过来的情况,所以不能只看编号就下结论,还要结合容量和挂载点判断。如果系统当前是从TF卡启动的,/storage挂载的分区一定在TF卡上,那反过来另一个就是EMMC。比如上面例子中/storage在mmcblk0p3上,那就说明当前系统跑在EMMC——这明显不符合"从TF卡启动"的前提,所以遇到这种情况你要再次查看,通常启动的TF卡会有SYSTEM分区挂载在/flash或者类似路径。
再配合一条命令:
blkid看输出中每个分区的LABEL。EmuELEC镜像的分区一般带有EMUELEC、STORAGE这类标签,根据标签也能判断哪个是TF卡、哪个是EMMC。确认好节点后,下面的操作才敢放心执行。我自己在折腾盒子的头一两年,最怕的就是眼神一花把mmcblk0写成mmcblk1,写完直接傻眼。所以建议你执行写入命令前,单独开一个终端跑到lsblk截个图,照着截图敲命令。
3.2 第二步:备份原有EMMC系统,防变砖的最后盾牌
前面提过,写入EMMC会覆盖原有系统,所以备份这步必须做。虽然有部分盒子可以通过短接救砖,但那是硬件级操作,不是所有人都能上手。备份的方式是dd全盘镜像,或者只备份关键分区。全盘备份最稳妥,缺点是耗时较长、占用空间大。
假设识别到EMMC设备节点是/dev/mmcblk0,执行:
mkdir -p /storage/backup dd if=/dev/mmcblk0 of=/storage/backup/emmc_original.img bs=4M status=progress这条命令会读取整个EMMC并写入镜像文件。如果你的EMMC是8GB,备份时间差不多要5到10分钟,具体看盒子的读取速度和TF卡写入速度。如果TF卡剩余空间不够放整个镜像,可以退一步,只备份启动相关的分区。先看当前EMMC的分区布局,假设mmcblk0p1是bootloader分区,mmcblk0p2是原系统内核分区,只备份前几个分区也可以:
dd if=/dev/mmcblk0p1 of=/storage/backup/emmc_p1_bootloader.img bs=4M dd if=/dev/mmcblk0p2 of=/storage/backup/emmc_p2_system.img bs=4M这里要提醒一句:备份镜像放TF卡上没问题,但建议之后同步到电脑上一份。TF卡本身也有坏块风险,辛辛苦苦备份完结果卡先坏了,那这备份形同虚设。我习惯在电脑上建一个专门的文件夹,把每个盒子的原始备份、DTB文件、刷机固件按型号归档,哪天真出了事,翻出来就能恢复。
3.3 第三步:使用安装脚本写入EMMC,而不是手动dd
迁移写入这一步有两条路线。第一条是EmuELEC系统自带的安装脚本,推荐大多数玩家使用;第二条是手动用dd写入完整镜像文件到EMMC,适合你手上有一个独立的EmuELEC镜像、或者想跳过TF卡直接刷机的场景。
先讲推荐的自带脚本方式。EmuELEC 4.7提供了把系统从外部存储安装到内置存储的命令,叫emuelec-installtointernal,部分版本也叫installtointernal。在SSH终端执行:
emuelec-installtointernal执行后脚本会自动识别EMMC设备,询问确认是否安装。确认后系统开始把TF卡上运行的EmuELEC复制到EMMC,过程大概几分钟。安装完成后脚本会提示关机。此时先不要拔TF卡,直接执行:
poweroff等盒子完全断电后,拔掉TF卡,再通电开机。如果一切正常,盒子会直接从EMMC启动进入EmuELEC。
为什么推荐用自带脚本而不是手动dd?因为脚本会正确处理分区布局、引导配置和DTB选择。手动dd虽然也能用,但如果你用的img文件与当前盒子的分区结构不完全匹配,写入后还要手动调整分区大小、重新设置引导参数,对新手不算友好。自带脚本则是按当前运行的TF卡系统一比一复制到EMMC,几乎不会出兼容问题。这个选择思路跟你在电脑上装系统一样:有官方安装器的时候,没人会手动去dd磁盘镜像,除非是运维老手有特殊需求。
那什么时候需要手动dd?比如你想直接从一个全新的EmuELEC 4.7完整镜像写入EMMC,不经过TF卡过渡。这种情况一般出现在你已经知道这个盒子的DTB和兼容性没问题,想一步到位。命令如下:
dd if=/path/to/EmuELEC-4.7.img of=/dev/mmcblk0 bs=4M status=progress sync注意if=后面的镜像路径,of=后面必须是EMMC设备节点,千万不要写错。写入完成后执行sync,确保系统缓存全部落盘再到断电。手动dd写完后还有一个关键动作:重新把正确的dtb文件放进去。因为镜像默认的dtb不一定匹配你的盒子,直接启动大概率黑屏。处理办法是:dd写入完成后,先不要重启,用mount挂载EMMC的boot分区,然后把对应的dtb复制进去。这比写在TF卡上再迁移要复杂一些,所以我始终建议大家优先走自带脚本。
3.4 第四步:关机、拔卡、开机验证
写入完成并关机后,拔掉TF卡再开机,等待系统启动。这里有几个验证点:
第一,能否正常进入EmulationStation界面。如果能正常进系统,说明DTB和引导没问题。第二,进系统后可以重新SSH登录,执行lsblk看根目录挂载情况,确认系统确实运行在EMMC上而不是又从哪个外设启动了。第三,检查模拟器运行是否正常,随便加载一个游戏,看看加载速度、游戏内存档读写是否正常。
如果一切正常,就说明迁移成功。这时候TF卡就空出来了,可以拿来存别的游戏,或者专门当"游戏库扩展盘"用。我自己的做法是:EMMC只放系统、模拟器核心、常用的小游戏合集,大块头的PSP、DC游戏放在TF卡或移动硬盘里,用的时候插上,这样既稳定又灵活。
4. 实战中最容易翻车的四个坑(附完整排查链路)
说实话,迁移本身不难,真正让人头疼的是出了问题之后的排查。我把自己遇到过的、以及群里朋友反复问的问题,挑四个典型场景写出来,每个都给出完整的定位链路。
4.1 写入后拔卡黑屏:DTB问题的定位思路
现象:用自带脚本或者dd完成写入后,关机拔卡,再开机发现电视屏幕黑屏无信号,盒子指示灯常亮,但系统始终起不来。
排查链路第一步:确认是不是DTB配置错误。最常见的情况是镜像默认选用的DTB和盒子不匹配,加载设备树时卡住。处理逻辑是回到TF卡启动状态,确认TF卡根目录下用的哪个dtb.img,然后把这个dtb重新放回EMMC的系统分区里。
具体操作:插回TF卡正常启动,SSH连上,挂载EMMC的boot分区:
ls /dev/mmcblk0* mkdir -p /tmp/emmc_boot mount /dev/mmcblk0p1 /tmp/emmc_boot ls /tmp/emmc_boot看EMMC boot分区里有没有dtb.img,或者dtb文件夹。把TF卡根目录下已验证可用的dtb.img复制过去:
cp /flash/dtb.img /tmp/emmc_boot/dtb.img umount /tmp/emmc_boot注意/flash路径在EmuELEC里通常指向启动分区,里面放着TF卡正在用的dtb.img。复制完成后关机,拔卡,再开机验证。
排查链路第二步:如果dtb确认没问题还是黑屏,那就检查是不是系统根本就没从EMMC引导,而是引导顺序问题。有些盒子固件里设定了优先从外部存储启动,拔卡后无法回落到EMMC。这时候需要进盒子的引导界面(一般是开机时连续按遥控器上的特定按键,比如电源键或者菜单键,具体看盒子型号),手动选择从内部存储启动。
排查链路第三步:如果以上两步都试过无效,建议用备份镜像把EMMC完整恢复,回到迁移前状态,再重新走一遍写入流程。这也是为什么我强制要求备份——真到了这一步,备份就是唯一退路。
4.2 提示no space left on device:EMMC容量与镜像体积的账
现象:执行安装脚本时,终端提示no space left on device,或者dd写入过程中报磁盘已满。
原因分析:EmuELEC镜像默认是按照TF卡或U盘容量设计的,写入EMMC时如果EMMC容量比镜像预期的小,就会写不进去。比如有的整合包镜像做到8GB甚至16GB,而盒子EMMC只有4GB,这时候无论如何都塞不下。
另一个隐蔽原因:EMMC设备上还有原系统的分区残留,分区表没有清理干净。安装脚本检查容量时把原系统分区也算进去了,结果实际可用空间比预期少了一大截。
解决方案:先执行lsblk看EMMC真实容量,确认硬件容量。如果硬件容量足够,那就把EMMC的分区表清空,让安装脚本重新分区:
dd if=/dev/zero of=/dev/mmcblk0 bs=1M count=100 status=progress sync清除最前面的100MB数据,相当于抹掉了原分区表信息,之后再用安装脚本写入就不会被旧分区干扰。如果硬件容量确实不够,那就只能换更大的盒子,或者在整理整合包时精简内容,做一个小体积版本再迁移。
这个坑在八核S912盒子上特别常见,不少S912盒子标配EMMC只有8GB,但主流整合包动辄10GB以上。我的经验是先看整合包解压后的实际占用,再看EMMC容量,两者之间要留出至少1到2GB的富余量给存档和系统临时文件。
4.3 EMMC设备不识别:驱动与供电的排查顺序
现象:TF卡能正常启动EmuELEC,但lsblk里怎么都看不到EMMC设备,只有TF卡和一个空的mmc设备节点。
这个问题的排查顺序很重要,不要一上来就怀疑硬件损坏,先从软件层面排除:
第一步,确认内核是否加载了对应的MMC驱动。执行:
dmesg | grep -i mmc看日志里有没有EMMC相关的识别记录。如果输出里出现类似mmc0: new high speed SDXC card这样的记录,说明设备已经被枚举出来了,只是节点名或者分区问题让它没显示在lsblk里。这时候用cat /proc/partitions直接看内核层面的分区信息,可能设备管了,但分区表为空所以lsblk不显示。
第二步,如果dmesg里完全看不到EMMC相关记录,说明设备树DTB没有正确配置EMMC节点。这就回到第一节说的DTB问题——部分盒子的DTB里EMMC节点被禁用,需要换一个包含EMMC定义的dtb文件。可以对比测试:同一个盒子的安卓系统下能看到EMMC,说明硬件没问题,纯粹是EmuELEC的DTB不完整。
第三步,排查供电。这个情况比较少见,但确实存在:部分盒子外接设备功耗较高,导致EMMC供电不稳。如果你在EMMC不可见的同时,还发现TF卡读取速度明显波动,可以尝试拔掉所有USB外设再重启盒子。有个朋友跟我反馈过类似情况,最后发现是USB移动硬盘供电异常干扰了主板供电,拔掉后EMMC正常识别。虽然听起来玄学,但这种供电干扰在廉价盒子上时有发生。
4.4 写入成功后游戏加载变慢:存储规划的连锁反应
现象:系统启动速度确实变快了,但打开游戏列表、加载游戏时反而比TF卡还慢,甚至出现存档写入卡顿。
这个问题经常被误判为"写入EMMC失败",其实恰恰相反——系统正常从EMMC运行了,但你的ROM和BIOS文件还在TF卡上。EMMC和TF卡在随机读写上的性能差距是客观存在的,但拖着大量小文件从外部存储加载时,瓶颈仍然在外置存储那边。尤其是整合包动辄上千个封面图、视频预览文件,从TF卡读取这些文件时,比从USB移动硬盘或者好一点的U盘还慢。
我的解决思路是"分级存储":系统放EMMC,游戏ROM按使用频率分类。常玩的十几个游戏直接放EMMC的STORAGE分区,速度拉满;冷门游戏放USB移动硬盘或者TF卡,反正不常玩,加载慢一点可以接受。这样兼顾了稳定性和容量。
另外一个容易忽略的原因是文件系统碎片。TF卡长期写入删除,内部碎片严重的话,读取性能会明显下降。迁移到EMMC后,如果你还是照旧不断增删ROM,EMMC也会面临同样问题。EMMC内部有FTL层做磨损均衡,但实际使用中还是建议定期整理一下ROM目录,别把游戏塞得乱七八糟。
5. EMMC之外的延伸:这是不是折腾盒子的终点
写完EMMC之后,很多人会问我:后面还能玩什么?其实把系统从TF卡迁移到EMMC,只是让这台盒子成为"正常游戏主机"的第一步,后面还有不少可以深挖的方向,但也要认清边界,不要盲目折腾。
5.1 不同盒子型号的迁移差异
S905系列盒子的迁移流程大同小异,但有几个代表性型号值得单独说。比如斐讯N1,它的EMMC容量通常是8GB,整体兼容性在EmuELEC社区里评价很高,写入EMMC后基本能做到开箱即用,DTB选p230_2g系列;但它的缺点是没有TF卡槽,只能通过U盘启动系统,迁移EMMC后想要换系统就麻烦一些。再比如部分运营商盒子,出厂锁了bootloader,TF卡启动都困难,更别提写入EMMC,这类盒子建议先解决引导限制再考虑迁移。还有HK1 Box、X96 Max这类外贸盒子,EMMC容量从8GB到64GB都有,写入流程一样,但不同批次用的WiFi芯片不同,可能导致迁移后无线网络不可用,排查思路上还是从DTB下手。
5.2 硬改换大容量EMMC的参考思路
如果盒子的EMMC容量实在捉襟见肘,又不想舍弃这台设备,有一小部分玩家会走硬改路线:把主板上原装的EMMC芯片吹下来,换一颗更大容量的,再重新写入系统。这里就涉及一个热搜词里的概念——153Ball EMMC引脚定义。BGA153封装是eMMC最常见的封装之一,引脚间距很小,手工焊接难度不低。换EMMC芯片不是简单的"吹下来焊上去"就行,中间涉及原厂分区表、bootloader重写、容量参数适配等问题,对焊接功底和软件能力要求都很高。我自己评估过,最后没有动手,因为风险太大、收益有限。如果你的需求只是多放几百个游戏,不如像我前面说的,外挂一个移动硬盘,成本低得多,还不影响EMMC系统稳定性。硬改这条路,除非你本身就很熟练,不建议新手轻易尝试。
5.3 我的最终建议
迁移到EMMC之后,这台盒子才算真正"定下来"了。我手上几台设备,写入EMMC的这台已经稳定跑了很久,没再出现过TF卡时代的卡死、掉盘问题,启动速度也从原来的二十多秒缩短到十来秒。每次开机直接进游戏列表,随手就能打开一局,这才是游戏主机该有的体验。
最后再分享一个我自己一直在用的小技巧:EMMC上的系统稳定之后,把TF卡单独留一个干净的小分区,专门用来存BIOS和模拟器核心的备份。这样以后想换整合包、升级EmuELEC版本,或者哪次调试把系统搞崩了,不用重新折腾一遍外围配置,直接把备份拷回去,环境就恢复了。折腾得多了就会发现,备份这个动作,永远是省时间最有效的办法。