imx6ull 开发板, mame 模拟器,运行游戏 测试

由于 开发板的 linux 内核版本是 4.1 , glibc 版本太老(低于 2.27), 模拟器无法在开发板的屏幕显示游戏画面,buildroot 制作的根文件系统 ,安装模拟器 ,还需要编译模拟器源码,需要使能 SDL1.2 或者 SDL2再手动编译 FBneo 、mame 模拟器,编译测试后,开发板还是无法显示游戏画面,所以,最后选择给开发板,烧录 Ubuntu 20.04.5 LTS 最小根文件系统,用 apt install 安装 mame,不用编译源码,自动匹配 。

下载 Ubuntu 根文件系统,选 armhf(32位),不要选 arm64

在 PC 上下载 Ubuntu Base(最小化根文件系统)

wget https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04-base-armhf.tar.gz

下载好的根文件系统 烧录 开发板的 emmc

做好基础网络配置,设置好 ip 后,开发板,安装 mame

apt update

apt install -y mame

如果 apt update 报时间错误(系统时间还是 1970 年),先同步时间:
apt install -y ntpdate
ntpdate ntp.aliyun.com

安装 MAME 时,如果遇到了 tzdata 的交互界面。直接按下面的步骤操作即可:在 Geographic area: 提示下输入 6(代表 Asia),然后按回车。接下来出现城市列表,在 Please select the city or region: 提示下 输入 Shanghai 的标识码,比如 70,然后按回车。

在开发板的 Ubuntu 最小系统里执行

ls /dev/fb* # 应该有 /dev/fb0

cat /sys/class/graphics/fb0/virtual_size # 应该显示 800,480

cat /sys/class/graphics/fb0/bits_per_pixel # 应该显示 32 或 16

32 位色深会增加内存占用和渲染负担,可能导致 MAME 的 cpu 占用率更高 运行更卡,但是 画面显示效果更佳。Imx6ull 单核设备 性能有限,建议修改设备树,降低色深至 16 位。

开发板,安装 fbset

apt install -y fbset

查看当前 framebuffer 参数

fbset -i

mame 版本所依赖的 SDL2 库没有启用 Framebuffer (fbcon) 支持。Ubuntu 官方源中的 SDL2 库通常是为 X11(桌面环境)编译的,默认不支持直接写入 /dev/fb0。
Ubuntu 源里的 MAME 依赖 SDL2,而 SDL2 想要显示画面通常需要 X11 或 Wayland 环境。不需要安装庞大的桌面版 Ubuntu,只需安装最基础的 X11 服务即可,MAME 能通过 X11 的 SDL2 驱动显示画面。

开发板,安装 xorg ,这是 Ubuntu 官方 MAME 包设计的正常运行环境,兼容性最好。

apt-get update

apt-get install xorg xserver-xorg-video-fbdev

开发板: sudo mkdir -p /usr/share/games/mame/roms (root 用户不需要sudo)

游戏包 和 neogeo.zip 都放到 /usr/share/games/mame/roms 这里

(我是 电脑开启 http服务,开发板作为客户端,wget 从电脑下载 )

wget 从电脑下载

下载 neogeo.zip 放到 /usr/share/games/mame/roms 里:

运行:拳皇、合金弹头 等游戏时,mame 需要 neogeo.zip

neogeo.zip 下载链接 https://blog.csdn.net/gitblog_06702/article/details/148137954

rom 游戏包 下载链接 https://tieba.baidu.com/p/9310679778

验证 ROM ( 1942是游戏名字 )

mame -verifyroms 1942

创建脚本 vi /usr/local/bin/start_x.sh

写入:

复制代码
#!/bin/bash
# 启动X服务器并运行简单终端
export DISPLAY=:0

# CPU强制高性能模式 (解决反应迟钝)
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 启动MAME
/usr/games/mame mslug \
-rompath /usr/share/games/mame/roms \
-window \
-video soft \
-autoframeskip \
-mouse \
-joystick \
-sound none

图片参考:

mslug 是游戏名字 可以去掉,进入主界面 用鼠标选择游戏。 建议 不去掉,手动改要运行的游戏名字,因为 开发板性能弱,主界面有点卡。
-sound none 是关闭游戏音效,因为 游戏有点延迟,音效拉跨,关了舒服点。

开发板连接USB键盘 ,在开发板的命令行,运行游戏 :

xinit /usr/local/bin/start_x.sh -- /usr/bin/X :0

mame cpu 占用率 非常高,这是游戏画面有点延迟的主要原因,Xrog cpu 占用率 很低。

启动后,ENTER 按键 进入游戏

数字按键 5 player 1 投币,数字按键 6 player 2 投币

数字按键 1 player 1 开始,数字按键 2 player 2 开始

按键 p 暂停

Tab 按键 进入设置菜单

回车,输入 要映射的按键 回车,ESC 返回


安装音频工具( 建议可以不安装,单核cpu 性能很差,音效卡顿,主要原因是:游戏运行的有延迟)

apt install alsa-utils

使用 amixer 设置声卡 ,运行游戏后 会听到音效

amixer sset Headphone 100,100

amixer sset Speaker 120,120

amixer sset 'Right Output Mixer PCM' on

amixer sset 'Left Output Mixer PCM' on

|-----------------------|----------------------------------------------|
| Ubuntu Base 根文件系统 | 提供了完整的 glibc 2.31+,兼容所有预编译的 ARM 二进制包 |
| apt 安装 mame | 自动解决依赖(SDL2、X11 等),无需手动编译 |
| xinit + Xorg | 启动 X 服务器,为 SDL2 提供标准的 X11 显示环境 |
| fbdev 驱动 | Xorg 使用 fbdev 后端直接写入 /dev/fb0,不依赖 GPU 加速 |
| CPU 高性能模式 | performance 策略确保 CPU 全速运行,减少模拟延迟 |


mame 分析:

从上面的 MAME 依赖信息可以明显看出,MAME 是一个"庞然大物"。它链接了 Qt5、OpenGL、PulseAudio、PortAudio、Wayland、X11 等数十个库,这在桌面系统上很常见,但对于 i.MX6ULL 这类嵌入式平台,这些依赖不仅占用大量内存,还会在运行时带来额外的 CPU 开销(例如音频后端转换、图形驱动层的多次调用)。
1. MAME 的"庞然大物"特性

ldd /usr/games/mame 的输出可见,MAME 确实依赖了 数十个库(如 Qt5、OpenGL、PulseAudio、PortAudio、Wayland、X11 等)。这些库的功能包括:

  • 图形渲染(OpenGL、Wayland、X11):支持多种显示后端,但会增加渲染开销。
  • 音频处理(PulseAudio、PortAudio):多音频后端支持,但需在运行时进行格式转换,消耗 CPU。
  • UI 框架(Qt5):提供复杂的用户界面,但在嵌入式设备上可能过度消耗资源。
2. 嵌入式平台的性能瓶颈

在 i.MX6ULL 这类低性能嵌入式设备上,这些依赖会导致:

  • 内存占用增加:每个库都需要加载到内存,可能超出设备限制(如 512MB RAM)。
  • CPU 开销加剧
    • 图形驱动层(如 OpenGL)的多次调用会增加渲染延迟。
    • 音频后端(如 PulseAudio)的格式转换会消耗额外 CPU(如您之前遇到的音频卡顿)。
    • 单核 CPU 无法高效处理这些中间层,导致 CPU 占用率接近 100%。
相关推荐
是个西兰花1 小时前
Linux:进程信号
linux·运维·服务器
CS创新实验室1 小时前
从“业余爱好”到数字基石:Linux 发展史及带给技术人的成长启示
linux·运维·服务器
Biomamba生信基地1 小时前
FindNeighbors()函数报错object ‘CsparseMatrix_validate’ not found
linux·运维·服务器·生物信息学
dddwjzx4 小时前
嵌入式Linux C应用编程入门——文件IO
嵌入式
orion572 天前
Missing Semester Class1:course overview and introduction of shell
linux
用户120487221612 天前
Linux驱动编译与加载
linux·嵌入式
用户805533698032 天前
Input 子系统架构:Core、Handler、Driver 三层是怎么协作的
linux·嵌入式
用户805533698032 天前
RK-Forge外设系列开篇 - 把板子从「能启动」变成「能用」:Ethernet/SPI/MMC 三个纯接线外设
linux·github·嵌入式
七歌杜金房3 天前
我终于又有了自己的 Linux 电脑
linux·debian·mac