由于 开发板的 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%。