资讯动态

基于i.mx6q平台的mGBA模拟器移植

发布时间:2026/8/27 23:43:08 来源:尧图企业网站定制
基于i.mx6q平台的mGBA模拟器移植之前进行基于i.mx6q平台的NES模拟器移植今天来移植mGBA模拟器我在网上搜索了一下国内好像没人移植过这个模拟器那只能摸着石头过河了。经过一番摸索踩了很多坑终于移植成功了今天分享给大家。硬件环境我采用的是i.mx6q开发板屏幕分辨率为800x480系统环境linux 4.1.15根文件系统用的是开发板自带的根文件系统里面已经移植好了alsa相关的库文件mGBA源码地址https://toscode.gitee.com/motoedy/mgba移植主要步骤1.先编译SDL1.2将编译好的SDL库下的lib下的文件都考到开发板的/usr/lib中mGBA描述最好使用SDL2但是也支持SDL1.2SDL2移植起来比较费劲我尝试移植了虽然成功了但是有些问题不建议使用最终选择使用SDL1.22.编译mgba将编译好的文件夹我的叫GBA-Game原路径复制到开发板保持路径一致3.考进去两个游戏xx.gba拷到GBA-Game文件夹的bin文件夹下4.运行目前usb键盘ok开始移植1.先编译SDL1.2$ cd SDL-1.2-main $./configure--disable-video-directfb--disable-video-qtopia--disable-video-dummy--disable-video-dga--disable-arts--disable-cdrom--disable-video-x11--disable-nasm--enable-video-fbcon--enable-joystick--enable-input-tslib--prefix/home/SDL1.2--targetarm-linux--hostarm-linux $ make $ make install–prefix/home/SDL1.2 改成自己的路径将编译好的SDL库下的lib下的文件都考到开发板的/usr/lib中2.编译mGBA修改mgba下的CMakeLists.txt文件添加交叉编译器的编译选项没有无法编译通过大家改成自己的交叉编译器修改如下elseif(UNIX)set(USE_PTHREADS ON)if(CMAKE_SYSTEM_NAME STREQUALLinux)add_definitions(-D_GNU_SOURCE)set(CMAKE_C_FLAGS-marcharmv7-a -mfpuneon -mfloat-abihard -mcpucortex-a9 --sysroot/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi)set(CMAKE_CXX_FLAGS-marcharmv7-a -mfpuneon -mfloat-abihard -mcpucortex-a9 --sysroot/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi)set(CMAKE_C_LDFLAGS-lSDL)endif()新建一个文件名字为CrossCompile.cmake内容如下保存该文件与mgba/CMakeLists.txt同目录set(CMAKE_SYSTEM_NAME Linux)set(TOOLCHAIN_PATH/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi)set(CMAKE_C_COMPILER/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-gcc)set(CMAKE_CXX_COMPILER/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g)找到mgba/src/third-party/libpng/pngpriv.h 文件直接在这里顶上加上一行#define PNG_ARM_NEON_OPT 0否则编译报错在mgba/src/platform/cmake/路径下放FindSDL1.2.cmake这步就是添加SDL1.2支持将原有FindSDL2.cmake改名为FindSDL1.2.cmake修改SET(SDL_SEARCH_PATHS~/Library/Frameworks/Library/Frameworks/usr/local/usr/sw # Fink/opt/local # DarwinPorts/opt/csw # Blastwave/opt ${SDL_PATH}/home/SDL1.2//添加路径)FIND_PATH(SDL_INCLUDE_DIRS SDL.h HINTS $ENV{SDLDIR}PATH_SUFFIXES include/SDL include PATHS ${SDL_SEARCH_PATHS}${SDL_LIBRARIES_TEMP}/../..PATHS ${SDL_SEARCH_PATHS}/include/SDL/home/SDL1.2/include/SDL//添加路径)FIND_LIBRARY(SDL_LIBRARIES_TEMP NAMES SDL HINTS $ENV{SDLDIR}PATH_SUFFIXES lib64 lib PATHS ${SDL_SEARCH_PATHS}${SDL_INCLUDE_DIRS}/../..PATHS ${SDL_SEARCH_PATHS}/lib/homeSDL1.2/lib//添加路径)因为没有用GL ES需要屏蔽掉进入mgba/src/platform/sdl/main.c文件做如下修改否则报错编译不过修改如下/* #ifdef BUILD_GL if (mSDLGLCommonInit(renderer)) { mSDLGLCreate(renderer); } else #elif defined(BUILD_GLES2) || defined(USE_EPOXY) #ifdef BUILD_RASPI mRPIGLCommonInit(renderer); #else if (mSDLGLCommonInit(renderer)) #endif { mSDLGLES2Create(renderer); } else #endif { mSDLSWCreate(renderer); } */mSDLSWCreate(renderer);if(!renderer.init(renderer)){mArgumentsDeinit(args);mCoreConfigDeinit(renderer.core-config);renderer.core-deinit(renderer.core);return1;}基本修改好了进入mgba目录,建立build文件夹mkdir build cd build/cmake-DCMAKE_INSTALL_PREFIX:PATH/home/GBA-Game-DCMAKE_TOOLCHAIN_FILE../CrossCompile.cmake..make make install将GBA-Game文件夹整体拷到开发板下记住要和你在pc机上的目录一致然后考进去两个游戏xx.gba拷到GBA-Game文件夹的bin文件夹下运行出现游戏界面了至此移植完成。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价