开源掌机程序编译
主要记录一些开源软件的跨平台编译:TriForceX/MiyooCFW
热知识:
1.arm架构一般新兼容旧,比如armv6就支持armv5(一般情况下,arm-gcc编译出来的程序,所有arm32以上架构都通用,除非用的gcc不是通用arm,而是指定版本的例如armv6)
2.所以miyoo(v5)编译出来的程序,树莓派(v6)可以直接运行。不过需要注意的是,有的miyoo程序是通过精简C库(uClibc 或 musl)而不是glibc编译的,树莓派里直接运行可能会因为缺少相应的链接库而出错,可通过'file xx'查看文件是用什么C链接库,如果是静态程序则找不到链接库,也意味着可以直接运行。(glibc全,musl/uClibc精简适合嵌入式,newlib精简适合裸机)
3.x86的window的wsl内置虚拟化技术,可以直接运行arm程序(但是不少arm程序依赖了各种arm库,可能没法直接运行,可以编译成静态的-static,或装相应的链接库(比较麻烦)或者简单粗暴直接运行一个环境相同的arm版docker,在里面跑)
4.但对于不是wsl的其他x86平台,可以通过qemu-static跟binfmt来模拟运行arm架构,参考Linux学习笔记(树莓派/嵌入式) - JeasonBoy - 博客园 (cnblogs.com) (117条)
5.miyoo sdk的musl版本默认是静态编译的,所以编译好的程序能直接在树莓派或者wsl里运行,但是uClibc版本默认是动态链接的,并且uClibc库缺少静态链接库,导致无法静态编译
解决方法:
1.手动把miyoo sdk的动态库链接给系统,就能直接运行uClibc编译的程序了
2.先确认miyoo sdk已经放到了/opt/下面:
sudo ln -s /opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/lib/* /lib/
sudo ln -s /opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/lib/* /lib/
跨平台编译miyoo程序,需要有miyoo的sdk(跨平台编译器和各种链接库等),下面1跟2的区别就是,1是gcc工具而已,而2在1的基础上增加了一些sdk,例如sdl,sound等常用库
1.musl或uclibc跨平台编译工具链的获取方式:Linux学习笔记(树莓派/嵌入式) - JeasonBoy - 博客园 (cnblogs.com) (135条)
2.miyoo的sdk获取方式有多种,官方链接:Making Games · TriForceX/MiyooCFW Wiki (github.com)
注意:有些项目代码写的不够好,跟SDK工具绑定太多,导致不同版本的sdk(uclibc或musl)可能会出现编译错误,甚至同一个c库uclibc,用最新的官方跟用司徒的旧sdk,都不一样。所以如果编译失败,换个sdk试试。
a.手动编译(太慢了不推荐):
sudo mkdir /opt/miyoo cd /opt/miyoo sudo git clone https://github.com/MiyooCFW/toolchain.git cd toolchain make sdk //注意,这里记得切换成root账号编译,否则在config的时候会出错,编译的过程会很久,会下载一些库,可能网络不好会卡住 sudo mv /opt/miyoo/toolchain/output/host/* /opt/miyoo/
然后就可以正常编译其他程序到miyoo了,至于怎么引用miyoo sdk,上面的官方wiki里有,不少miyoo的项目,都可以直接make -f Makefile.miyoo来编译,会自动识别/opt/miyoo文件夹来定位编译器
b.下载官方编译好的sdk,手动放到/opt/miyoo文件夹:
到Releases · MiyooCFW/toolchain (github.com)下载:https://github.com/MiyooCFW/toolchain/releases/download/v2.0.0/miyoo-toolchain-v2.0.0-arm-buildroot-linux-musleabi_sdk-buildroot.tar.gz
解压,把文件夹名字改为miyoo,移到/opt/目录下,最终目录应该是类似这样的:/opt/miyoo/arm-buildroot-linux-musleabi/...
为自己的程序编译的时候,可以设置环境变量来指定用miyoo sdk来跨平台编译
CROSS_ROOT=/opt/miyoo CROSS_TRIPLE=arm-buildroot-linux-musleabi SYSROOT="${CROSS_ROOT}/${CROSS_TRIPLE}/sysroot" PATH="${CROSS_ROOT}/bin:${SYSROOT}/usr/bin:${PATH}" ARCH=arm CROSS_COMPILE="${CROSS_TRIPLE}-"
c.手动创建docker项目(很慢)
原理大致就是直接创建一个Dockefile,引用与debian系统,然后把miyoo的sdk解压进入,创建一个拥有sdk的镜像文件
我自己创建一个github项目了:jeason1997/MiyooSDK: 可以编译横米miyoo程序的docker 🐳 Docker environment for developing Miyoo Linux apps. (github.com)
用起来也很简单,就是先运行:./install.sh,生成一个docker镜像,然后./run.sh运行起来测试生成的镜像能否正常编译demo程序
其实我已经创建好docker镜像并上传到hub了,直接拉取就行:docker pull jeason1997/miyoo_sdk
然后:sudo docker run -it --rm -v "$(pwd)":/root -w /root jeason1997/miyoo_sdk make (跟下面的官方docker一个用法)
或者:sudo docker run -it --rm -v "$(pwd)":/root -w /root jeason1997/miyoo_sdk /opt/miyoo/bin/arm-linux-gcc test.c -lc (直接指定arm的gcc编译,但记得加上-lc,指定标准C库编译)
d.用官方的docker项目(推荐)
由于标准C太大,所以嵌入式设备一般用精简C,有常用两种:
musl:兼容性更好,性能高
uclibc:更精简,简洁,体积小
docker pull miyoocfw/toolchain:2.0.0 (默认是musl)
docker pull miyoocfw/toolchain-shared-uclibc (uclibc版本)
然后进入到要编译的项目目录下:
sudo docker run -it --rm -v "$(pwd)":/root -w /root miyoocfw/toolchain:2.0.0 make
这行命令的意思是:让docker以一个叫miyoocfw/toolchain:2.0.0的镜像运行一个容器,并且-d在后台运行的无头模式,--rm运行结束后直接删除,不保留容器,-v将当前的目录挂载到容器里的root目录下,并且进入容器后以root为工作目录,并且执行make命令
结果就是当前目录的源码,在运行这条命令后,会被容器里的sdk编译,并将编译后的程序保留在当前目录下。很方便
e.用司徒大神的sdk文件(推荐):Release miyoo · steward-fu/archives (github.com)
先下载并解压到/opt/下:https://github.com/steward-fu/archives/releases/download/miyoo/env_toolchain.7z (备份在百度云)
然后跟上面的SDK一样使用即可。
SDL所需要的依赖库:
// SDL2 sudo apt install -y libsdl2-dev \ libsdl2-image-dev \ libsdl2-mixer-dev \ libsdl2-ttf-dev \ libsdl2-net-dev \ libsdl2-gfx-dev // SDL1 sudo apt install -y libsdl1.2-dev \ libsdl-image1.2-dev \ libsdl-mixer1.2-dev \ libsdl-ttf2.0-dev \ libsdl-net1.2-dev
1.mgba:一个性能比较强的gba模拟器,支持SDL跟QT

linux编译:
mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. make sudo make install
不过不知道为啥,Lua5.1的路径总是找不到,即使安装了,导致编译报错,解决方法是把Lua去掉:cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DUSE_LUA=OFF ..
依赖:
Qt 5: for the GUI frontend. Qt Multimedia or SDL are required for audio. SDL: for a more basic frontend and gamepad support in the Qt frontend. SDL 2 is recommended, but 1.2 is supported. zlib and libpng: for screenshot support and savestate-in-PNG support. libedit: for command-line debugger support. ffmpeg or libav: for video, GIF, WebP, and APNG recording. libzip or zlib: for loading ROMs stored in zip files. SQLite3: for game databases. libelf: for ELF loading. Lua: for scripting. json-c: for the scripting storage API.
运行:
mgba game.gbc // 默认sdl版本
mgba-qt game.gbc //qt版本(有菜单)
2.gmenu2x:一个嵌入式设备用的轻量级菜单UI

编译:
make -f Makefile.miyoo //构建miyoo平台的bin文件
make -f Makefile.miyoo dist //构建miyoo平台的发布项目,会生成一个文件夹,包括gmenu2x需要用到的各种资源文件
注意,以上miyoo平台的构建需要有miyoo的sdk,毕竟是跨平台编译,需要跨平台编译器
linux通用编译:安装依赖:
sudo apt-get install -y build-essential libsdl-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libboost-all-dev libfreetype6-dev libbz2-dev libmpg123-dev
make -f Makefile.linux dist
最近更新把Makefile.linux改为Makefile了:
make dist
运行:
cd dist/linux
./gmenu2x
网友移植的树莓派版本(其实树莓派也可以直接用上面的版本):lualiliu/GMenuNext-on-raspberry-pi: GMenuNext is a fork of GMenu2X developed to Raspberry Pi (github.com)
编译:
在raspberry pi中安装各种libsdl依赖
make dist
编译后的文件在dist文件夹中。
安装屏幕驱动(install screen driver)
将:gmenu2x.cpp(lines 367)
putenv((char*)"FRAMEBUFFER=/dev/fb0");
putenv((char*)"SDL_FBDEV=/dev/fb0");
修改为:
putenv((char*)"FRAMEBUFFER=/dev/fb1");
putenv((char*)"SDL_FBDEV=/dev/fb1");
3.commander:一个轻量级文件管理器,支持查看编辑文件,运行程序

编译:
mkdir build
cd build
cmake ..
//注:在树莓派A+里编译会报AddressSanitizer相关的错,cmake的时候把这个东西屏蔽掉就行了 cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_SANITIZER=OFF
make
依赖:
因为是基于SDL的,所以需要安装各种SDL库,例如:
sudo apt-get install libsdl2-dev
sudo apt-get install libsdl2-image-dev
运行:
程序的执行需要res文件夹里的东西,所以把commander拷贝到github项目的根目录,然后直接运行
4.Simple Terminal:一个轻量级终端

编译:
make
运行:
./st
5.Snes9x4D:SFC模拟器

编译:
make -f Makefile.linux
运行:
./snes9x4d game.sfc
5.fake-08:PICO-8 模拟器,支持3ds,psv,ns,pss,miyoo,funkey等许多平台

注意,该项目依赖子仓库,要拉取全:git clone --recursive https://github.com/jtothebell/fake-08.git
依赖:
不确定需不需要安装(25.2.20更新:好像不用,我没装也能编译成功,但另一个项目yocto-8里好像提到这个东西,应该是跟键鼠有关的?),devkitPro :
wget https://apt.devkitpro.org/install-devkitpro-pacman chmod +x ./install-devkitpro-pacman sudo ./install-devkitpro-pacman
编译:
make sdl (需要什么平台把sdl换成对应的平台)
运行:
./platform/SDL1_2/FAKE08
更新:官方的github页面下build部分好像有提到他们的github工作流里有自动化构建任务,通过docker实现(我还没尝试过),类似:
docker run -v $PWD:/build_dir {docker-image} /bin/sh -ex /build_dir/.github/workflows/{platform}.sh
更新:这个项目编译成功后,暂不知在Linux上怎么读取游戏,而且好像键盘操作也没反应,推荐另一个项目,编译也一样简单,运行也很合理些:tac08

克隆并更新子项目 git clone --recurse-submodules https://github.com/0xcafed00d/tac08.git 安装SDL2 sudo apt install libsdl2-dev 构建LUA解释器 cd tac08/src/z8lua make a 在根目录下执行构建 make 运行游戏 ./tac08 游戏.p8
6.gpsp:GBA模拟器(未通过)
据说性能很高,但我没运行起来,注:这个模拟器貌似需要依赖GBA的BIOS ,要先下载这个,不然模拟不起来
树莓派版本:DPRCZ/gpsp: gpsp - Raspberry pi port (github.com),在docker的树莓派环境里可以成功编译,但是新版树莓派系统运行不起来,缺乏某些链接库,参考:GpSP - A ‘Beginners Guide’ to Compiling and Using - Raspberry Pi Forums
cd gpsp-master/raspberrypi
make
miyoo版本:Apaczer/gpsp: gpSP fork tuned for ARM Linux (port for MiyooCFW - PocketGo/V90/Q90 etc.) (github.com)
cd miyoo
make -f //需要依赖miyoo sdk,确保/opt/下面有miyoo文件夹,目前只有司徒的sdk能正常编译成功。
cp assets/gba_bios.bin ./ // 把bios复制到跟模拟器同一个目录
./gpsp (在树莓派上运行黑屏)
7.1 Doom(chocolate-doom):毁灭战士

卡马克大神开源的游戏,原版代码太久远,用现在的gcc工具编译各种报错:id-Software/DOOM: DOOM Open Source Release
github上有大佬已经修改了一个比较现代的版本:chocolate-doom/chocolate-doom: Chocolate Doom is a Doom source port that is minimalist and historically accurate. (github.com)
Linux可以直接安装:sudo apt install chocolate-doom
编译:
sudo apt-get install autotools-dev autoconf automake libtool
sudo ./autogen.sh //会检查各种依赖,如果没报错,会生成一个叫config.status的文件
sudo make -j36
sudo make install
依赖:
SDL >= 2.0.14 (但是实际经过测试,自己编译的新版SDL 2.29.0无法通过编译,用ubuntu apt安装的2.0.20版本可以正常编译,应该是只支持2.0.x版本)
sudo apt-get install libsdl2-mixer-dev
sudo apt-get install libsdl2-net-dev
运行:
如果上面成功安装可以直接:chocolate-doom
不然可以到src目录下:
cd src
./chocolate-doom
注意:这游戏开源的是源代码,并不包含游戏资源(美术,关卡,音效等),所以直接运行是无法游戏的,需要游戏数据包 wad 文件。
解决方法,先在电脑上安装一下游戏sudo apt install chocolate-doom,然后把游戏资源提取出来,把电脑 /usr/share/games/doom/ 下面的wad文件复制到编译好的机器的相同目录下
或直接在这个项目里下载:Gaytes/iwad: Doom Wads ,下载后解压放到游戏根目录
7.2 fbDoom:毁灭战士(帧缓冲版)
偶然发现的一个项目,对doom移植了一个可以直接在framebuffer上运行的版本,无需x11
依赖:
SDL1:sudo apt install -y libsdl1.2-dev
原生编译:
比较简单,不管PC还是树莓派A+上,直接make即可
交叉编译:
先安交叉编译工具链,以树莓派A+的armv6为例:
git clone https://github.com/raspberrypi/tools.git ~/raspberrypi-tools
make CROSS_COMPILE=~/raspberry-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-ra
spbian-x64/bin/arm-linux-gnueabihf-
不出意外的话应该会报错,因为该项目依赖sdl1,PC上没有sdl1的arm链接库,链接过程会失败
解决办法:
1.从树莓派A+上拷贝过来
2.自己交叉编译sdl1
7.3 doomgeneric(在上面的fbDoom上优化而来,加入了多平台移植,改为SDL2)
makefile里默认的编译器是clang,可以改为gcc或者其他。CC=clang 改为 CC=gcc
make -f Makefile.linuxvt // 终端版本(上面的framebuffer版)
make -f Makefile.sdl // X11 依赖:sudo apt install libsdl2-mixer-dev
这个版本很好的一点就是,作者优化了移植接口,使得这份代码很容易移植到其他平台,
创建一个名为 doomgeneric_yourplatform.c (例如终端版:doomgeneric_linuxvt.c)的文件,然后实现这些函数以适合您的平台。再加个Makefile.xxx就行了。
- DG_Init
- DG_DrawFrame
- DG_SleepMs
- DG_GetTicksMs
- DG_GetKey
缺点就是,它的终端版本,在树莓派的hdmi1080p屏幕上运行,显示有点错乱,可能得改下源码。还有它依赖输入控制器,检测到当前树莓派上没插入键盘都不让运行。
7.4 其他的Doom
cnlohr/embeddedDOOM:mini-rv32ima大神移植的版本,x86直接make即可,其他平台如riscv测试未通过
koute/polkadoom: 作者自己说这个从 doomgeneric 上改进过来的,更加便携。源代码是完全独立的,甚至不需要 libc。但我没编译通过,build.sh完全是针对riscv平台设置的,其他平台得改。
8.1 SDL1
wget https://www.libsdl.org/release/SDL-1.2.15.tar.gz tar -zxvf SDL-1.2.15.tar.gz cd SDL-1.2.15 # 配置:禁用不需要的功能(如音频、视频驱动,仅保留帧缓冲) ./configure \ --enable-fbcon \ # 启用帧缓冲支持(fbdoom 依赖) --disable-x11 \ # 禁用 X11 --disable-audio \ # 禁用音频(减少依赖,若 fbdoom 不需要声音) --disable-video-x11 \ --disable-video-sdl \ 如果要简单就啥都不配置,直接./configure运行默认配置 make make install
跨平台编译,PC上给树莓派的armv6编译,暂时未测试通过
8.2 SDL2
有时候对SDL版本有要求,比如上面的doom就要SDL2.0.14以上,而apt仓库能安装到的最新版还达不到这个要求,所以要手动编译
查看SDL版本
jeason@raspberrypi ~> pkg-config --modversion sdl2
2.26.5
jeason@raspberrypi ~> pkg-config --modversion sdl
1.2.15
编译:
git clone https://github.com/libsdl-org/SDL.git cd SDL git switch release-2.24.x (因为默认是SDL3,要手动切换要2.X的版本) mkdir build cd build cmake .. make -j36 sudo make install 如果都没报错,这可以通过:sdl2-config --version 查看当前版本:2.24.2 注意,编译好新版sdl并且安装后,sdl相关的依赖也要升级一波,例如libsdl2-mixer-dev、libsdl2-image-dev之类的,重新apt install下
另一种编译方式:
下载指定版本SDL并编译: sudo apt install libdrm-dev libgbm-dev wget https://www.libsdl.org/release/SDL2-2.0.12.tar.gz tar -xzf SDL2-2.0.12.tar.gz cd SDL2-2.0.12 ./configure && make && sudo make install(或 ./configure --enable-video-fbcon, 允许sdl允运行在frambuff上,但我没试验过)
如果 SDL2 安装在非标准路径(如 /usr/local),需设置环境变量:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
如果不想全局升级,可以通过环境变量直接指定 SDL2 的路径:
export SDL2_CFLAGS="-I/path/to/sdl2/include"
export SDL2_LIBS="-L/path/to/sdl2/lib -lSDL2"
让应用程序强制在frambuff上运行,AI说的,但没实验成功
export SDL_VIDEODRIVER=fbcon
9.eduke32:毁灭公爵3D

仓库1:Apaczer/eduke32: Duke Nukem 3D port for Miyoo - Bittboy / PocketGO / V90 ... (github.com)
专为miyoo修改的版本,克隆仓库后直接 ./mkduke_miyoo.sh 便开始编译。
注:/opt/下面要放miyoo的sdk,目前经过测试,只有司徒的sdk能用,其他的编译失败,貌似是作者的代码写死了只能用uclibc。
仓库2:官网下载源码 https://dukeworld.com/eduke32/synthesis/latest/,当前测试的版本是 eduke32_src_20250913-10627-e5aad1886.tar.xz
我自己从官网拉下载源码创建了一个工程,里面有编译好的资源:jeason1997/eduke32: 毁灭公爵3D
安装依赖:sudo apt install libvpx-dev libflac-dev
解压后进入游戏根目录,直接 make 即可。
注意:这游戏跟doom一样同样只是代码开源,美术资源关卡音效等游戏数据是要自己去获取的。一个简单的方式是直接从那个Miyoo版的release资源里提取出来:
https://github.com/Apaczer/eduke32/releases/download/v1_0/eduke32-v1_0.zip,解压提取里面的 duke3d.grp 放到游戏根目录即可
另一个开源的毁灭公爵源码,没试过编译,跟上面的优化版chocolate-doom估计差不多:fabiensanglard/chocolate_duke3D: chocolate Duke Nukem,3D (暂时编译失败,感觉没必要试了)
在树莓派上编译太慢了,另一种方式是通过docker编译(直接用微软的CodeSpace就行了)
# 增加qemu支持,以便运行目标架构(armv6)的容器 docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # 克隆项目 git clone https://github.com/jeason1997/eduke32 cd eduke32 # 运行最新版debian的树莓派,并将当前目录挂载为容器的root目录 docker run --platform linux/arm/v6 -it -v "$(pwd)":/root -w /root balenalib/raspberry-pi-debian /bin/sh # 在容器里安装依赖 apt update apt install make git gcc g++ libvpx-dev libflac-dev libsdl2-dev pkgconf-bin make -j8 # 退出容器,在当前目录找到 eduke32 跟 mapster32,就分别是游戏跟编辑器程序 如果报rev.h的错:Failed building obj/build/rev.o from source/build/src/rev.cpp! 打开source/build/include/rev.h,将 #define REV__(x) #x 这一行替换为 #define REV__(...) #__VA_ARGS__ 在自己的wsl跟树莓派A+里编译都没遇到这个错,在docker里报错了,可能是gcc版本不同导致的
悲剧:20250913这个版本可能太新了,最低支持armv7,虽然可以在A+上正常编译,树莓派A+的armv6运行不了
9.Quake:雷神之锤
雷神1:id-Software/Quake: Quake GPL Source Release(未测试)
雷神1WebGL版:jeason1997/WebQuake: 能在网页上运行的《雷神之锤1》,纯js重写源码,webgl图形 HTML5/WebGL source port of Quake
雷神3:ioquake/ioq3: The ioquake3 community effort to continue supporting/developing id's Quake III Arena
cd ioq3 安装依赖:sudo apt install cmake libsdl2-dev 配置:cmake -S . -B build -DCMAKE_BUILD_TYPE=Release 如果上面那步骤报错,可能是cmake版本不兼容,先cmake --version查看下当前的cmake版本 然后把ioq3根目录下的CMakeLists.txt打开,找到第二行的cmake_policy(VERSION 3.28),版本号改为当前的camke版本号 编译:cmake --build build 成功后在ioq3/build/Release下打开ioquake3运行游戏 不出意外的话应该运行不了,缺少游戏资源文件,下载下面的pak0-8.pk3共8个文件,拖到ioq3/build/Release/baseq3下即可
同样美术资源是不开源的,需要想办法下载,总共有8个文件,pak0-8.pk3,解压到游戏目录下的baseq3文件夹里面
q3-server/baseq3/pak0.pk3(0是闭源的,但有网友泄露)
Patch Data – ioquake3(1-8是免费的)

Quake Engines and Sourceports:这个网站收集了大量使用Quake引擎开发的游戏,包括各种民间版本雷神之锤,DOOM等等
10.Picodrive:MD模拟器

Apaczer/picodrive: Fast MegaDrive/MegaCD/32X emulator (github.com)
git clone https://github.com/Apaczer/picodrive.git
git submodule update --init // 有子模块依赖,更新子模块
./configure // 配置,不指定参数默认配置为generic平台
make -j
运行:./PicoDrive
编译miyoo版本:
architecture arm platform miyoo sound drivers sdl C compiler arm-miyoo-linux-uclibcgnueabi-gcc C compiler flags -mcpu=arm926ej-s -marm -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/include -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/include/SDL -D__MIYOO__ -I/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/bin/../../usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT -Wno-unused-result libraries -L/opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot/usr/bin/../../usr/lib -lSDL -lpthread -lpng -lm -lz -ldl linker flags --sysroot /opt/miyoo/arm-miyoo-linux-uclibcgnueabi/sysroot libavcodec (mp3) no
然后直接make即可
注:直接在wsl里编译不知为何总是配置错误,目前测试通过的有miyoocfw/toolchain-shared-uclibc这个docker镜像
sudo docker run -it --rm -v "$(pwd)":/root -w /root miyoocfw/toolchain-shared-uclibc(直接加参数好像不行,先进容器,在手动执行上面的命令)
11.gambatte-dms:GB模拟器

这个库默认没有miyoo的makefile,手动修改下bittboy的
修改Makefile.bittboy里的sdk路径CHAINPREFIX=/opt/buildroot-bittboy/output/host为自己的sdk路径,并把编译器的名字也改下,然后make -f Makefile.bittboy

正常情况用miyoo sdk编译失败,-lmikmod -lmodplug库找不到,按照作者提供的解决方法:https://github.com/bardeci/gambatte-dms/issues/44#issuecomment-1846217867
a.在Makefile.bittboy里和common.mk里把-lmikmod -lmodplug注释掉即可
b.直接注释上面两个音频库可能会导致音频播放不正常(暂时没耳机没测试过),作者提供另一种方式,用他用的bittboy sdk编译:https://github.com/bittboy/buildroot (没尝试过)
libretro核心:libretro/gambatte-libretro: Hard fork of Gambatte to the libretro API. (github.com)
直接make就可以成功编译,但这只是一个核心,要有 RetroArch前端,否则运行不了
意外发现的一个版本,用python在控制台里直接运行gameboy
12.PocketSNES:另一个SFC模拟器(跟上面的Snes9x4D是同一个作者)
只在树莓派里编译成功,需要修改Makefile.pc里的CFLAGS += -O0 -g -m32,将-m32修改为-mbe32
然后make -f Makefile.pc
运行:./dist/pocketsnes.elf game.sfc
13.Peanut-GB :GB模拟器

一个非常小巧又快速的GameBoy模拟器,核心代码仅一个文件,可以在任何支持C99编译的地方编译,包括单片机上(只需要为核心代码提供诸如gb_rom_read,gb_cart_ram_read等硬件相关的函数即可)
缺点是目前仅能模拟GameBoy,作者说开始支持GBC了(CGB Support · Issue #50 · deltabeard/Peanut-GB (github.com)),并且部分游戏无法正常模拟。
树莓派Pico RP2040单片机上可以全速运行:deltabeard/RP2040-GB: Game Boy emulation on the Raspberry Pi RP2040 microcontroller. (github.com)
编译:
如果只是编译核心程序,可以不用安装任何库,直接去example下面的benchmark编译make就行,这是一个性能测试demo,测试游戏能跑多少fps
如果以sdl2为前端的话:
sudo apt install libsdl2-dev
cd Peanut-GB-master\examples\sdl2
make
运行:
./peanut-benchmark rom.gb (无显示的性能测试)
./peanut-sdl rom.gb (sdl2前端)
14.musl 以及 uClibc
参考Linux学习笔记(树莓派/嵌入式) - JeasonBoy - 博客园 (cnblogs.com) (127.5条)
15.编译MicroPython或CircuitPython
嵌入式平台的python,虽然linux/win也能通过编译,但是没啥卵用,unix平台只是能编译运行,硬件驱动(GPIO,SPI等)都没兼容,根本没法用
CircuitPython的参考这篇: 大夏龙雀DX-WF25(ESP32C2)蓝牙WIFI模块试用体验(Arduino) - JeasonBoy - 博客园
编译:
git clone https://github.com/micropython/micropython.git
git clone https://github.com/micropython/micropython-lib.git(这一步骤不是必须的)
cd micropython
git submodule update --init(更新全部子模块,这里不是必须的,只更新需要的即可,具体看下面)
make -C mpy-cross
cd ports/unix(目标硬件平台,这里以linux为例)
make
运行:
./build-standard/micropython(可执行程序)
由于子模块太多了,包括了很多硬件平台的SDK,没必要全部更新,只更新部分即可,暂时不知道平台具体依赖哪些模块,只能先在目标平台下make,看报啥错缺啥,然后安装对应的子模块
查看当前git工程共有哪些子模块:git submodule
+ 前缀:子模块已初始化,但检出的提交比父仓库记录的版本更新(有新的提交未同步到父仓库)。
- 前缀:子模块未初始化(代码未检出到本地)。
无前缀:子模块已初始化,且检出的提交与父仓库记录的版本完全匹配,处于同步状态
这里以unix(linux)平台为例,只需要更新以下子模块即可:
git submodule update --init lib/berkeley-db-1.xx
git submodule update --init lib/mbedtls
git submodule update --init lib/micropython-lib
16.nestopia: FC模拟器GUI版本

依赖:apt-get install build-essential autoconf autoconf-archive automake autotools-dev libarchive-dev libepoxy-dev libfltk1.3-dev libsamplerate0-dev libsdl2-dev zlib1g-dev
要求SDL2-2.0.12及以上,如果apt安装的sdl2版本太低,需要自己手动编译一下
编译:
autoreconf -vif
./configure
make
运行:
nestopia mario.nes
nestopia 核心,没有带GUI的版本,编译后是一个so链接库
Nestopia JG 依赖 JG,你需要手动安装它:
git clone https://gitlab.com/jgemu/jg.git
cd jg
make && sudo make install
然后直接make就行编译核心了,暂时只是编译成功,还不知道怎么去调用nestopia.so来模拟FC
17.InfoNES:轻量级ARM FC模拟器,可以直接运行在framebuffer上 arm-NES-linux emulate for InfoNES open source
参考:小白自制Linux开发板 十. NES游戏玩起来 - 淡墨青云 - 博客园
依赖:apt-get install alsa-utils
编译:
cd arm-NES-linux-/joypad/
make
运行:
./InfoNES ~/mario.nes
18.nes: 另一个简单可以移植到各种平台的nes模拟器(甚至可以移植到air32f103嵌入式单片机上)
作者仅提供sdl的前端,这个移植很简单,可以自己实现一个port,修改 nes_port.c 文件,实现各种平台的运行跟渲染,framebuffer也不在话下。缺点是目前支持的游戏比较少。
依赖:
sudo add-apt-repository ppa:xmake-io/xmake -y sudo apt-get update -y sudo apt-get install -y git make gcc p7zip-full libsdl2-dev xmake
编译:
cd sdl/sdl2
xmake
运行
./sdl/sdl2/build/linux/x86_64/release/nes mario.nes


浙公网安备 33010602011771号