资讯详情

资讯详情

RK3568平板定制EmuELEC复古游戏机全流程指南

去年翻出抽屉里一台吃灰的RK3568平板屏幕不大不小电池没有鼓包扔了实在可惜。琢磨了一圈决定把它改造成一台复古游戏机。研究各种系统时发现EmuELEC算是这类设备上最成熟、最顺手的复古游戏方案但RK3568的适配资料远不如Amlogic盒子那么完整网上信息零散编译流程也常常语焉不详。这篇文章把我从零开始定制RK3568平板EmuELEC系统的完整过程写清楚包含环境准备、完整编译命令、设备树和开机动画的定制思路以及刷机部署和实际排错记录。希望给手头有同款芯片平板的折腾党一条可以直接照做的路线。1. 选型RK3568为什么适合当复古游戏机底座很多人在做复古游戏机时会优先考虑树莓派或老旧手机但RK3568这颗瑞芯微芯片其实是更适合的选项。它和RK3566经常被放在一起比较两者同属一个家族但定位有明显差异。搞清楚它们的具体区别你才能明白为什么RK3568更适合跑模拟器。1.1 RK3568与RK3566的核心差异对照RK3568和RK3566都采用4核Cortex-A55架构GPU也都是Mali-G52系列二弟很多平台看起来参数几乎一样实际用起来差距却很大。我把关键差异整理成了表格项目RK3568RK3566CPU4×Cortex-A55 2.0GHz4×Cortex-A55 1.8GHzGPUMali-G52 2EE 800MHzMali-G52 1EE 800MHzNPU0.8 TOPS0.6 TOPS视频解码4K H.264/H.265 解码4K H.264/H.265 解码内存支持LPDDR4/LPDDR4X通道更多LPDDR4/LPDDR4XPCIe支持PCIe 3.0不支持SATA支持不支持千兆网口可支持双路通常单路典型产品工控板、NAS、开发板、中高端盒子平板、学习机、电子相框从模拟器需求来看CPU主频和GPU核心数的差距最直接影响游戏性能。Mali-G52 2EE对比1EE着色器翻倍在需要硬件加速的PSP、N64、DC模拟器上帧率差距可能从勉强能玩变成顺畅运行。1.2 RK3568跑各类模拟器的实际表现我在这台平板上实测的模拟器性能如下给各位一个参考基准。这里说到的都是默认分辨率下、不做过猛优化的表现8位16位主机FC、SFC、MD、GB/GBA毫无压力全速运转这部分核心负载很低哪怕A55小核都能轻松应付。PS1画面流畅配合PCSX ReARMed核心几乎通吃即使开启高分辨率渲染也基本不掉帧。N64大部分游戏能稳在流畅线以上个别复杂的场景会掉帧可以接受。PSP2D游戏和平常的低要求3D游戏能跑但战神这类重负载场景需要开启跳帧体验有折扣。DC、NDS部分可玩需要逐游戏调参数这不是RK3568的强项。PS2、GameCube、Wii不用指望A55加Mali-G52的底线摆在那里即使能进界面也没有流畅度可言。RK3568的实际潜力大约到PS1和部分PSP为止再往上就有些勉强。如果你对PS2有执念建议直接换X86平台或RK3588不要在3568上浪费时间。1.3 为什么选择EmuELEC而不是其他系统RK3568平板能装的操作系统路径不少比如Android、Debian、Ubuntu、Armbian、Batocera为什么最终我选了EmuELEC专为模拟器优化EmuELEC是一个精简Linux发行版启动后直接进游戏前端不需要任何桌面环境所有系统资源服务游戏。模拟器核心集成完整内置RetroArch以及几乎所有常用libretro核心省去了逐个安装配置的麻烦。前端体验好自带EmulationStation前端支持手柄导航、游戏列表配图、视频预览客厅电视和自带屏幕都能用。更新活跃EmuELEC社区更新频率不错新核心和内核补丁会持续跟进。Batocera其实也是个好选择但它的默认配置偏向通用PC和热门单板机对RK3568这种芯片的针对性不如EmuELEC社区里的适配来得灵活。综合考虑EmuELEC是最省事的路线。2. 编译环境准备依赖项、源码与工具链EmuELEC走的是Buildroot那套体系源码编译需要在Linux环境下进行。我踩过不少环境相关的坑这里把最稳妥的准备流程整理一下。2.1 编译主机选择与基础依赖安装先说结论编译RK3568的EmuELEC镜像一台Ubuntu 20.04或22.04的虚拟机就够用。我实际用的是一台4核8G内存的云服务器编译过程比较费时间但没有遇到资源瓶颈。如果你是本地机器建议确保磁盘剩余空间至少50G因为Buildroot会下载大量源码包并生成中间产物。装好系统后先更新软件源并安装基础编译依赖sudo apt update sudo apt install -y \ git build-essential make gcc g \ ncurses-dev file lzop bc u-boot-tools \ texinfo gperf bison flex diffutils \ cpio rsync wget unzip \ python3 python3-distutils \ device-tree-compiler \ swig libssl-dev注意这部分依赖是编译Buildroot镜像的基础。缺了device-tree-compiler会导致后面编译设备树时报错缺了swig会在编译Python相关组件时失败我见过很多人在这一步翻车看起来是后面报错实际是前面依赖漏了。2.2 拉取EmuELEC源码与目录结构理解依赖装好后拉取EmuELEC源码。国内访问GitHub可能速度不理想建议配置好代理或者使用镜像加速具体看你的网络情况git clone https://github.com/EmuELEC/EmuELEC.git cd EmuELEC拉取完成后先执行初始化操作这一步会下载Buildroot子模块和必要的工具链组件make init这里需要解释一下EmuELEC的源码目录结构。它的核心概念是PROJECT和DEVICEPROJECT定义了芯片体系架构比如Amlogic、RockchipDEVICE定义了具体设备比如某个开发板型号、某款盒子型号。我们在RK3568上要做的就是找到或创建一个合适的DEVICE配置然后以它为编译目标。如果你在projects目录下找不到现成的RK3568设备配置目录通常可以从projects/Rockchip下已有的相近设备改起。社区里一般会把通用的Rockchip平台配置放在一起板级差异通过DEVICE目录区分。这一步不复杂但需要耐心看目录结构。3. 完整编译流程从内核配置到镜像生成环境准备好之后接下来是整个流程的核心——编译。这部分我直接给出完整命令并解释每条命令的作用以及可能遇到的报错。3.1 创建设备配置目录假设这台平板没有现成的配置文件我从一个同芯片方案的设备配置开始ls projects/Rockchip/ mkdir -p projects/Rockchip/devices/RK3568_TABLET cp -r projects/Rockchip/devices/默认设备目录/* projects/Rockchip/devices/RK3568_TABLET/实际执行时你需要把默认设备目录替换为你参考的那个具体设备名。这一步的目的是让编译系统知道我们正在为RK3568平板构建镜像它会自动选择对应的内核、bootloader和用户空间软件包。接着看一下设备配置目录里的关键文件一般有options编译选项、kernel内核版本选择、ubootbootloader配置等。真正需要手动改的核心是设备树源文件dts和内核配置这些后面小节会具体说。3.2 执行编译配置就绪后进入编译阶段。命令如下make PROJECTRockchip DEVICERK3568_TABLET ARCHarm image分解理解一下PROJECTRockchip告诉编译系统选用Rockchip平台相关的基础软件包和补丁。DEVICERK3568_TABLET指定设备级配置。ARCHarm指定架构RK3568是64位ARM芯片但EmuELEC在部分场景下会把用户空间编译为32位以兼容更多游戏核心具体以源码中的默认值为主。如果你用的源码里默认是arm64就保持原样。image最终生成可烧写的镜像文件。这里容易遇到的问题第一次编译会因为需要下载大量源码包和工具链而耗时很久正常情况3到6小时不等。如果中途断网或磁盘满了再次执行相同命令是可以续跑的Buildroot会自动跳过已完成的步骤。编译完成后镜像文件输出在target或dist目录下具体名称取决于编译脚本常见的是.img格式比如EmuELEC-RK3568_TABLET-xxx.img。3.3 编译前常见报错与对策我把编译过程中遇到的报错分为三类方便你快速定位问题报错现象根因解决办法fatal error: openssl/xxx.h: No such file or directory缺少OpenSSL开发库sudo apt install libssl-devconftest.c:9:10: fatal error: swig/swig.h缺少SWIGsudo apt install swig/bin/sh: 1: lzop: not found缺少LZOP压缩工具sudo apt install lzopError: Device tree overlay not found设备树文件名配置不对检查options中DEVICE_DTS路径下载源码包卡住不动网络连接不稳定配置代理或手动下载源码包放入dl目录你可能会注意到大多数编译报错不是代码级别的问题而是环境依赖缺失。所以我在前面强调一次性把依赖装全能省下很多来回排查的时间。4. 定制开机动画从uboot到系统启动画面的替换思路玩游戏最讲究氛围开机动画先拉胯体验分直接打对折。这节说清楚RK3568平台的启动画面在哪几个阶段以及每一步怎么改。4.1 uboot阶段动画resource.img的处理方法RK3568平台的开机logo分为两个阶段第一阶段显示在uboot中第二阶段在kernel启动过程中。很多人觉得改开机logo要重编uboot其实不需要Rockchip专门为这个场景设计了一个resource.img分区里面打包了uboot阶段显示的logo图片。处理流程我是这样操作的先准备一张1920x1080或平板屏幕原始分辨率的BMP图片注意一定要是BMP格式尺寸最好和屏幕分辨率一致否则显示时会被拉伸变形。然后将图片放到一个工作目录下使用Rockchip提供的resource_tool工具进行打包./resource_tool --unpack resource.img # 解包后得到logo.bmp和一系列资源文件 # 替换logo.bmp为你的新图片 ./resource_tool --repack生成的新的resource.img在刷机时烧写到对应分区即可。resource_tool在Rockchip的uboot源码包里能找得到或者在GitHub上搜索rkbin/resource_tool也能找到成品工具。有一个小坑需要提醒不同版本的resource_tool对图片文件名有硬性要求。有些版本只认logo.bmp有些版本会读取logo_kernel.bmp同时用于内核阶段显示。稳妥的做法是解包后先看里面到底有哪些文件按原有文件名替换不要自创文件名。4.2 EmuELEC系统启动动画的替换uboot阶段搞定后进入系统后还有一段EmuELEC启动画面。EmuELEC默认的启动画面是在显示服务启动前由console或splash服务绘制的通常是一张PNG图片。直接替换对应路径即可# 进入设备系统后挂载系统分区为可写 mount -o remount,rw /flash cp /storage/splash/splash.png /usr/config/splash/splash.png具体路径可能因版本略有差异你可以在编译后的镜像系统中查找splash相关目录。如果你想改得更彻底一点可以做一个简单的视频动画但PNG图片在稳定性和兼容性上最省心推荐从PNG开始。4.3 开机动画定制的常见误区和建议很多攻略会建议直接改uboot源码里的LOGO_BMP配置项实际上对于RK3568平台标准国内平板出厂时往往已经带了开机logo但这些logo是厂商静态图片。你用resource_tool解包替换不改代码、不动uboot源码风险最小回退也容易。这里也要强调开机动画定位是视觉体验优先级远不如系统稳定性和模拟器运行效率。建议先把系统跑通了最后再做动画美化否则会因为折腾动画而浪费大量调试时间这种本末倒置的情况在折腾圈实在见得太多了。5. 屏幕与触摸设备树定制竖屏平板改横屏的完整方案这台平板出厂是竖屏而我需要横屏模式玩游戏。EmuELEC默认情况下不会像Android那样自动根据重力感应旋转界面必须在设备树层面做定制。5.1 屏幕显示旋转设备树里的rotate属性RK3568适配的Linux内核中显示接口已经是DRM/KMS体系了。屏幕旋转需要修改设备树源文件dts找到对应的DRM面板节点或DSI节点添加旋转属性。以MIPI DSI接口的屏幕为例设备树配置大致如下dsi1 { status okay; panel0 { compatible boe,tv080wum-nl0; reg 0; backlight backlight; rotation 90; }; };这里的rotation 90表示将屏幕顺时针旋转90度。如果你的屏幕是另一款面板需要找到对应的panel compatible字符串在内核源码的drivers/gpu/drm/panel/目录下可以查到相关驱动支持的panel列表。修改完dts后重新编译内核或如果你使用的是预编译内核可以通过设备树overlay方式加载修改但EmuELEC下编译时直接改dts最干净。这里有一个容易混淆的细节rotation属性的值一般取90、180、270但具体行为依赖DRM驱动实现部分老内核可能不支持该属性。如果不生效你需要在DSI控制器节点下配置video-mode或者在fb节点上做旧方式旋转又或者在系统的console启动参数里设置fbconrotate:1。排查思路是由设备树到内核参数逐层试。5.2 触摸屏坐标校准横屏模式下触摸翻转处理屏幕转了触摸坐标也得跟着转否则会出现点击位置和图标对不上的情况。Linux的触摸屏驱动提供了标准坐标映射属性在设备树中直接配置i2c2 { touchscreen1a { compatible goodix,gt911; reg 0x1a; touchscreen-inverted-x; touchscreen-inverted-y; touchscreen-swapped-x-y; }; };这里三个属性的含义touchscreen-swapped-x-y交换X轴和Y轴对应屏幕旋转90度或270度的坐标交换。touchscreen-inverted-x反转X轴方向。touchscreen-inverted-y反转Y轴方向。具体启用哪些属性取决于你屏幕旋转的方向。比如旋转90度时通常需要swapped-x-y加上某一个方向的inverted。如果方向不对逐个组合试一下每次改完重启观察最多试四次就能定下来。注意这些属性是内核标准触摸屏框架定义的不管你的触摸IC是哪家Goodix、Himax、FocalTech等只要驱动是基于input/touchscreen框架的这些属性就都适用。如果碰到老旧的厂商私有驱动可能需要在内核驱动代码中手动映射坐标那就要另外处理了。5.3 设备树编译刷入的完整流程改动dts后不需要整体重编镜像可以单独编出内核和设备树然后替换。整体编译命令里已经包含了设备树生成编译完成后在输出目录找到kernel.img和resource.img刷机时单独烧写这些分区就行。如果你像我一样一开始图省事只改了dts却没把所有配套驱动编译进内核启动时会直接黑屏或者提示找不到面板。所以这里建议面板和触摸驱动需要开启为内核内置CONFIG_DRM_PANEL_XXXy而不是编译为模块m否则加载顺序混乱会导致屏幕亮起时机不确定。这个经验排查了我一个晚上。6. 刷机部署与首次启动配置镜像编译完成后接下来就是把它刷到平板上。RK3568平板的刷机方式和主流开发板类似但一些细节需要注意。6.1 RK3568刷机工具与分区概念RK3568使用Rockchip的Maskrom模式进行刷机。你需要准备Type-C数据线一条确保支持数据传输不要用只能充电的线。RKDevTool刷机工具Windows版本比较常见也有Linux版本的升级工具。编译生成的完整镜像。刷机的第一步是让平板进入Loader模式或Maskrom模式。通常做法是先按住音量键或特定组合键再通过Type-C线连接电脑设备会被识别为Rockchip USB设备。具体进入方式因平板型号而异我这台是按住音量减再接线的建议查阅你自己的平板型号对应的进Loader模式方法。打开RKDevTool后工具会列出已识别的设备。在烧写配置中将编译生成的各个分区镜像对应到正确位置。需要烧写的核心分区包括uboot、boot、rootfs、resource等。最稳妥的方法是使用编译时生成的统一刷机配置或者直接使用工具提供的按分区烧写模式逐个指定。6.2 从U盘启动改为从eMMC启动的调整多数RK3568开发板支持从U盘或TF卡启动系统但平板通常只有eMMC没有可插拔的TF卡槽或SD卡槽。因此我们需要把系统刷进eMMC。这个过程在刷机时直接把EmuELEC镜像写到eMMC即可。刷写完成后首次启动时可能要注意如果设备同时存在eMMC和TF卡EmuELEC默认会找TF卡作为第一启动设备。平板上没有TF卡时就跳过这个逻辑直接进eMMC了实际使用中不会出现问题。首次启动会比较慢因为系统需要进行resize2fs扩展文件系统将rootfs分区扩展到整个可用容量。这个过程只执行一次后续启动会恢复正常速度。屏幕上出现EmulationStation前端界面时就算大功告成。6.3 首次启动必做配置清单系统跑起来后下面几件是优先要做的连接手柄EmuELEC支持蓝牙手柄和USB手柄。有线手柄是插上就能用的蓝牙手柄需要进蓝牙配对界面。没有手柄纯靠触摸屏操作会很痛苦强烈建议先用有线手柄过一次配置。设置Wi-Fi进EmuELEC设置菜单连接网络。网络不仅是下载游戏列表封面的前提也是后期通过SSH修改系统配置的入口。音频输出确认平板自带扬声器通常会被内建声卡驱动识别但输出通道可能默认到HDMI或耳机口。在设置里检查音频输出设备确保默认走内置扬声器。设置中文界面EmuELEC支持中文界面在设置中切换语言后重新扫描游戏列表中文游戏名才能正确显示。准备游戏ROM建立存放ROM的目录通常放在/storage/roms对应平台目录下。拷贝游戏时既可以通过U盘也可以开启Samba共享通过局域网传输。版权提醒一句请只使用你自己拥有版权或合法获取的游戏ROM。7. 实测中遇到的典型问题与排查思路这部分我按照从编译到使用的顺序把自己踩过且有共性的坑记录下来给后来者一个排查参考。7.1 启动黑屏但系统其实在运行这个现象最迷惑人。第一次在平板上启动EmuELEC屏幕一直黑着但能听到系统提示音SSH也能连上。判断是显示链路的问题平板使用的MIPI DSI屏幕与默认设备树配置的显示接口不匹配。排查过程分三步走SSH连接设备查看dmesg里关于panel、dsi、drm的报错日志。确认内核是否成功识别并初始化了DSI控制器和面板。检查设备树中面板节点的compatible字符串是否与你屏幕模组一致。这个问题最后定位到屏幕panel驱动未编译进内核导致DRM子系统没有创建出有效的framebuffer。把对应的panel驱动从模块改成内建后重新编译问题解决。7.2 游戏运行卡顿或声音爆音RK3568的性能跑PS1基本没问题但如果你开启了过高的分辨率缩放或滤镜可能造成CPU性能瓶颈。例如PCSX ReARMed核心里的内部渲染分辨率一般设为2倍即可再往上就容易掉帧。声音爆音多数和音频缓冲区配置有关。在RetroArch的音频设置里把输出缓冲调到256ms或更高爆音现象就会缓解。这是ARM平台模拟器很常见的通病倒不一定是RK3568特有的问题。7.3 触摸屏能显示但无法操作游戏EmuELEC本身有触摸支持但RetroArch会把触摸事件当作手柄按键映射。如果你的设备有触摸屏建议额外接一个游戏手柄别指望纯触摸玩格斗游戏。触摸屏在EmuELEC里的定位更适合做菜单浏览而不是游戏操作。如果你想在菜单界面启用触摸导航需要在EmulationStation设置中开启触摸支持但游戏内建议用实体手柄体验差距还是比较大的。7.4 编译时内核配置反复被重置EmuELEC编译系统在每次执行make image时会根据设备配置重新生成内核defconfig。如果你直接改了内核源码目录下的.config下次编译会被覆盖。正确的做法是在设备配置目录的options文件或内核补丁目录中修改配置或者使用内核的saveconfig机制提交配置变更。我当时图省事直接改了.config结果重新编译后配置全部回到默认排查了很久才发现是编译流程的问题。这个教训写在这里帮你少走弯路。8. 进阶玩法把EmuELEC与平板硬件特色结合起来到这里基础系统已经跑通。但RK3568平板的优势不应该止步于此还能挖掘一些进阶功能。8.1 利用平板内置传感器实现自动旋转部分平板带有加速度传感器理论上可以在EmuELEC中通过读取传感器数据实现自动横竖屏切换。但定制工作量大需要编写udev规则和脚本监听传感器节点同时还要让DRM重设旋转属性。说实话对游戏机场景意义有限游戏一般固定一个方向玩不值得为自动旋转投入太多时间。8.2 把平板当作串流游戏终端RK3568支持硬解码H.264/H.265这意味着它可以充当低延迟串流终端。在EmuELEC中通过Moonlight或Steam Link插件可以串流PC上的游戏。实测下来局域网内的画质和延迟表现都还不错等于把复古游戏机扩展成了现代PC游戏的低成本显示终端。不过这个功能需要系统支持对应的硬件解码接口EmuELEC对Rockchip视频解码的集成程度直接影响串流效果建议提前确认你的系统是否包含相关解码服务。8.3 联想RK3568在工业场景的其他玩法经常看到有人在RK3568上折腾其他驱动比如适配ov5695或ov8858摄像头模组、移植EtherCAT主站等。这些思路本身没有问题但我建议不要在游戏机上深挖这些方向。同一个硬件平台可以用来做工业视觉或运动控制但与EmuELEC游戏系统的软件栈差异极大相互之间没有太多可复用的东西。如果确实需要建议单独准备一块运行Linux的板卡去折腾。结语一点实际操作后的体会整套RK3568平板定制EmuELEC的流程走下来我最大的体会是先把最简系统跑起来再一步步往上加东西。很多人一上来就想着改动画、改主题、配全手柄灯效结果卡在编译环境上几天没有进展最后越搞越泄气。正确的节奏是先确认编译环境没问题用默认配置跑出一个能开机进前端的镜像然后花时间解决屏幕和触摸这两个最影响使用的部分最后才轮到开机动画和主题这种锦上添花的功能。分区和刷机流程多实验几次就会很熟练不要怕把平板刷坏Rockchip的Maskrom模式就是拿来救砖的只要硬件没烧随时能刷回来。如果你手头也有一台吃灰的RK3568平板照着这个流程走一遍大概率能收获一台属于自己的复古游戏机。折腾过程本身也是乐趣的一部分祝玩得开心。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →