话不多说,直接开始,下面是将xmame基于sdl移植到arm触摸屏上的过程。
一 先安装虚拟机。
ubuntu 12.04
经过几个步骤,我们就把虚拟机安装好了。这是一个新的虚拟机。
安装好虚拟机之后。就可以开始我们的xmame移植过程了。
需要的文件
1) 源码:
SDL-1.2.13.tar.gz
xmame-0.106.tar.bz2
2) 编译器。
arm-none-linux-gnueabi-gcc
二 将源码编译和移植。
1 先移植sdl,因为编译xmame是需要依赖sdl的。
1.1 将SDL-1.2.13.tar.gz 考虑到虚拟机
1.2 配置
执行 ./configure --prefix=/home/sdl CC=arm-none-linux-gnueabi-gcc --host=arm-none-linux-gnueabi-
将sdl的安装目录放到/home/sdl下。
1.3 执行编译和安装。
make
make install
如果不出意外的,就编译成功,并把sdl所需要的文件拷贝到/home/sdl目录下了。
1.2 xmame的交叉编译。(重点)
xmame的编译,基本占移植工作的80%。SDL因为没有其它依赖项,所以只要指定编译器,基本都可以编译成功。而xmame这个就复杂多了。需要根据不同的平台作出修改,还有根据不同的系统制定不同的编译器,以及还要根据显示模式,指定是使用sdl方式还是x11方式。基本X11的文章最后可以讲一讲。
1.2.1 文件的修改。
将xmame-0.106.tar.bz2 源码拷贝到虚拟机里。
需要修改文件。主要是修改两个文件:cpu.mak,makefile.unix。
主要是修改makefile,启用sdl,不使用x11。指定编译器,xmame的安装路径
文件目录
F:\xmame\src\sdlmame\xmame-0.106\xmame-0.106\src\cpu\cpu.mak
将
$(OBJ)/cpu/m68000/%.o: src/cpu/m68000/%.c
@echoCompiling $<...
$(CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@
修改为:
#$(OBJ)/cpu/m68000/%.o: src/cpu/m68000/%.c
#@echoCompiling $<...
#$(CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@
$(OBJ)/cpu/m68000/m68kmake.o:
src/cpu/m68000/m68kmake.c
@echoHost compiling $<...
$(HOST_CC)$(CDEFS) $(CFLAGS) -I$(OBJ)/cpu/m68000 -c $< -o $@
将
$(OBJ)/cpu/m68000/m68kmake$(EXE):
$(OBJ)/cpu/m68000/m68kmake.o $(OSDBGOBJS)
修改为
$(OBJ)/cpu/m68000/m68kmake$(EXE):
$(OBJ)/cpu/m68000/m68kmake.o $(OSDBGOBJS)
@echoHost linking $<...
$(HOST_CC)$^ -o $@
修改文件:
F:\xmame\src\sdlmame\xmame-0.106\xmame-0.106\makefile.unix
将
CC =@gcc
修改为:
CC =@arm-none-linux-gnueabi-gcc
将
HOST_CC = $(CC)
# HOST_CC = @gcc
修改为:
#HOST_CC = $(CC)
HOST_CC = @gcc
将
AR = @ar
AR_OPTS = rc
修改为:
AR = @arm-none-linux-gnueabi-ar
AR_OPTS = rc
将RANLIB = @ranlib
# RANLIB = @true
修改为:
RANLIB = @arm-none-linux-gnueabi-ranlib
# RANLIB = @true
将
# Uncomment next line to build expat as
part of the build.
# BUILD_EXPAT = 1
# Uncomment next line to build zlib as part
of the build.
# BUILD_ZLIB = 1
修改为:
# Uncomment next line to build expat as
part of the build.
BUILD_EXPAT = 1
# Uncomment next line to build zlib as part
of the build.
BUILD_ZLIB = 1
将
PREFIX = /usr/local
修改为:
PREFIX = /home/xmamesdl/
将
# i386, GNU asm
MY_CPU = i386
修改为:
# i386, GNU asm
MY_CPU = arm
将
# X11 (including Glide & OpenGL if
enabled below)
DISPLAY_METHOD = x11
# SDL library
# DISPLAY_METHOD = SDL
修改为:
# X11 (including Glide & OpenGL if
enabled below)
#DISPLAY_METHOD = x11
# SDL library
DISPLAY_METHOD = SDL
将
# The name of your sdl-config executable
SDL_CONFIG =sdl-config
修改为
# The name of your sdl-config executable
SDL_CONFIG =/home/sdl/bin/sdl-config
1.2.2 编译。
将这两个文件修改之后,就可以执行make了。
如果你是使用和我一样的虚拟机版本,一样的配置,一样的修改,基本上都可以编译成功。
1.2.3 将编译后的文件install。也就是提取。
执行make install。有些可能需要执行sudo make install.
然后在我们的指定的安装目录下/home/xmamesdl 就可以看到
到这里基本上就成功一半了。
如果你是跟着我的过程一起编译的,请先不要激动。
如果你只是纯粹看文章的,请忽略以上两句话。
三 将文件拷贝到触摸屏里。
1 sdl文件的准备。
将sdl的文件拷贝到触摸屏同目录下。
bin目录对应bin目录,
lib目录对应lib目录。
2 xmame的文件拷贝。
xmame的这个bin目录,主要就是主程序了。只要库文件在触摸屏里,这个主程序可以放到其它目录执行。
3 游戏文件的准备。
xmamerc,neogeo.zip,kof97.zip
当你完成前面两步的时候,基本上就执行程序了。也就是你的xmame程序是可以运行的。
这个可以运行,只是说你交叉编译是对的。但是不代表你可以玩游戏。
剩下的操作,就需要根据xmame需要的文件准备一下,放到xmame需要的目录下就行了。
需要准备下配置文件xmamerc
xmamerc 这个配置文件呢,指定了rom包的目录,你需要将游戏放到这个目录下。
还需要一个neogeo.zip来作为游戏的启动。
这时候就可以将kof97.zip放进去,执行xmame,就可以玩拳皇97啦。
不过,是用键盘玩的,我没有试过使用游戏手柄玩。这要看你触摸屏里有没有支持游戏手柄的驱动。
所以,移植完成之后,所需要的东西有:这个是编译之后的文件打包
让我们来看一下游戏画面:
有没有很刺激。这时候你只需要到网上去找一些rom游戏包就可以了,你就拥有了一个街机了。
问题区:
以上过程,属于一遍过,中间没有什么错误阻挡的时候才看到的情况。
说到这,让我想起一个段子,某程序员写了个很长代码,然后编译,直接通过,没有任何错误,这种激动的心情很想忍不住与他女朋友分享,和她女朋友说了之后,对方只回了个哦字。。
好吧,我又想多了。当我移植完这个街机的时候,才发现,我没有女朋友。
有可能你实际中会遇到各种问题。
优先,编译器问题不在这里探讨。
1 程序执行,可能会出现sdl一些错误。当然,前提是你需要将lib放好。下面讨论的时候xmame执行后,提示的一些错误。
比如
SDL Error: could not find a suitable
或者
video_init failed
或者
SDL Error: could not find a suitable mode
诸如此类提示和SDL相关的问题。
这些问题怎么来的呢。这些问题主要是和你触摸屏的液晶显示有问题。
比如你LCD的分辨率,是16位色还是24位等,以及你启动xmame的方式。
是全屏模式,还是普通模式。
在启动程序的命令行参数没有错误的情况。以上遇到的错误都可以在一个文件里修改。
xmame-0.106\src\unix\video-drivers\SDL.c这个文件里。
其中,主要是在这个函数:
int sysdep_display_driver_open(int reopen):
在这个函数里,是初始化和LCD的相关信息,比如是全屏运行呢,还是什么模式运行。
在这个函数里,需要根据你的触摸屏去修改相应的一些变量和参数,主要是看你的触摸屏支持哪些参数,或者你运行过程中,哪些参数不行,你就一个个试。
还有这个SDL_SetVideoMode。
当然你要看你的错误提示是哪一句,你再逐个参数去试应当行了。
2 游戏的准备。
由于这个xmame街机是基于sdl模式的,不是所有的rom包都能正常执行的。所以,当你不能正常打开游戏的时候,适当的怀疑一下是不是rom包的问题。
好了。
到这里基本就是这个xmame基于sdl的移植过程了。
我之前移植过x11,或者你也想打算移植x11的。
优先xmame基于x11的话,你需要先移植x11。
同时移植x11则依赖很多很多的库,实在是太多了。就不一一列出来的。不像sdl这个不需要依赖别的,比较方便。
-----------------------------------------------------------------------------------------------------------------------------------------结束分割线
你能看到最后,也不容易。
如果你在移植过程中,还是遇到问题,你可以留言。如果你不好意思留言,那怎么办呢。
如果你要联系楼主:
1 请先了解一下我所在的公司的主页:
http://www.flexem.cn
我们公司有各种型号的触摸屏,还有32寸的触摸屏。想想用32寸的触摸屏玩街机,一下子回到童年的感觉。
2 找到公司前台的电话,咨询一下我们的触摸屏。
当然,我们公司除了有触摸屏,还有物联网产品,可以远程参数数据,远程监控PLC等,对plc程序远程上传,下载等。
3 我们平台会根据你所在的区域,把相应区域销售的电话给你。
当然,如果你真的想了解我们公司的产品,也可以让我们的销售主动联系你。
4 当你和我们的销售聊得差不多了,就可以下单买个几百个触摸屏。
5 然后你和销售说,你们想在触摸屏玩游戏。
这时候,我们的销售就可以申请让我出差。
通过以上步骤,你就能联系到我了。
如果你不考虑买触摸屏,回到步骤2.
打电话到我们前台,你说找一下你们公司又会写程序,又会写文章,诗一般的帅哥。
如果前台美女笑了,你可以要到我的联系方式。
相反,你可以挂机了。