RetroPie是啥? 一个用于将树梅派等板子转变为游戏机的开源项目。 树梅派上运行RetroPie Github: https:github。comRetroPieRetroPieSetup 第一感觉,基于Shell,有啥牛逼的。 但仔细想想,一个简单的项目能获得9。4K的Star,肯定有其过人之处。 想要实现模拟复古游戏机最重要的2件事: 1、有能模拟运行复古游戏的模拟器。 最流行的模拟器是RetroArch。 RetroArch本身不负责模拟游戏,而且为各种更底层的各种模拟器提供一套统一的框架。 RetroArch负责音频、显示等各种基础功能,各种模拟器核心负责实际地对游戏模拟。 一个模拟器核心能模拟一个硬件平台,例如mGBA能模拟GBA掌机。 2。有一个能让用户选择启动游戏的菜单界面,即启动器。 最流行的开源启动器是Emulationstation。 树梅派上运行Emulationstation 另一个比较优秀的开源启动器是Pegasus: 树梅派上运行Pegasus Pegasus是Qt写的,感兴趣的话,可以看看其源码,代码质量挺好的。内部实现 我曾经阅读过一段时间的RetroPie的源码。 最深刻地感受是:优雅、真香。 从需求上看,RetroPie最核心的功能是要编译、安装、配置RetroArch、Emulationstation和各种模拟器软件包。 对于每一个软件包,RetroPie都会定义一组函数集:functiondepends{package}(){。。。}functionsources{package}(){。。。}functionbuild{package}(){。。。}functioninstall{package}(){。。。}functionconfigure{package}(){。。。} 分别对应获取源码、编译、安装、配置4个步骤。 每一个软件包都只要专注在实现这4个接口上,以便RetroPie的核心层调用。 嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去! 无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。 点击这里找小助理0元领取:加微信领取资料 RetroPie的核心层: system。sh,用于适配多个硬件平台。 helpers。sh,包含各种辅助函数。 packages。sh,软件包管理相关的API。 运行RetroPie的retropiesetup。sh时,首先会将所有的软件包注册进核心层,存放在数组里。 相关API是:rpregisterModule() 当要编译安装某个软件包时,以Retroarch为例,会通过rpcallModule()依次调用retroarch。sh里的:functiondependsretroarch(){。。。}functionsourcesretroarch(){。。。}functionbuildretroarch(){。。。}functioninstallretroarch(){。。。} RetroPie的核心设计就是上面这些内容,但是具体实现起来,还是有很多技巧在里面的,非常值得我们学习,这里我就不展开分析了。 另外,RetroPie的Shell编码风格非常好,我们可以将其作为标准。 我在工作中写过许多shell脚本,大致分类为:测试稳定性的脚本;辅助定位bug的脚本;辅助日常工作的自动化脚本;用于快速构建软件原型的脚本;公司内部软件; 最深刻地感受是: Shell是一把利器,用起来很爽,但是要小心一点,别伤着自己了。 总结 RetroPie是一个优秀的开源项目,它的功能并不复杂,这是由于它有极其的优秀的设计。 我从中学到的东西: 将简单的功能做好做稳定,是一件很了不起的事。 做板子的公司那么多,而做到全球流行的只有树梅派一家。 做一个好的产品,从来不是靠点子,不是靠能力,不是靠智力,而是看你有没全心全意为用户着想,是否始终从用户的角度出发。 参考资料 https:retropie。org。uk https:github。comRetroPieRetroPieSetup https:www。retroarch。com https:emulationstation。org https:pegasusfrontend。org 文章链接: https:mp。weixin。qq。comsqU3sbGX6SeFvBjL7dEqdA 转载自:老吴嵌入式,作者吴伟东Jack 文章链接:嵌入式界的顶流开源项目,RetroPie是怎么设计的?