移植InfoNES到imx6ull(一)
目录
移植InfoNES到imx6ull
1 - 查找方案
最近有不少小伙伴询问我如何在imx6ull开发板上玩InfoNES,俺就抽空将这个移植过程记录下来啦。
作为程序猿,要开始做一个东西之前,最好是先github上找一下,有没有案例。在github上搜索InfoNES,可以很容易找到如下几个项目:
从上图上看,第一个项目就是在arm linux上使用的工程,跟我们的需求比较符合,就进去瞧一瞧。
arm-NES-linux项目链接
上图是项目的README文件,使用平台为树莓派、arm-linux或ubuntu,操作方式是直接操作/dev/fb0。后面的编译细节就到我们编译时候在详细讲解吧。
既然这个项目如此符合我们的心意,那还等什么,直接clone下来呀。
使用如下命令clone工程。
git clone https://github.com/nejidev/arm-NES-linux.git
2 - 了解工程
2.1 - doc文件夹
doc文件夹存放一些文档,文档内容是日文的,使用Google翻译翻译一下:
右边的汉语各位小伙伴应该都能明白,俺就不多嘴啦。
2.2 - joypad文件夹
这里面是一个游戏手柄的驱动和测试程序。笔者手上没有原始的游戏手柄,只有USB接口的游戏手柄,就不用理会这个文件夹了。
2.3 - linux文件夹
这里面有2个CPP文件和1个Makefile。之前README.md有描述到,最后是在这个目录进行编译的,所以这个Makefile就是我们编译时使用的Makefile文件,非常重要。
CC = arm-linux-gcc
TARBALL = InfoNES08J
# InfoNES
.CFILES = ./../K6502.cpp \
./../InfoNES.cpp \
./../InfoNES_Mapper.cpp \
./../InfoNES_pAPU.cpp \
./InfoNES_System_Linux.cpp joypad_input.cpp
.OFILES = $(.CFILES:.cpp=.o)
CCFLAGS = -O2 -fsigned-char
LDFILGS = -lstdc++ # gcc3.x.x
all:
InfoNES
InfoNES: $(.OFILES)
$(CC) $(INCLUDES) -o aaa@qq.com $(.OFILES) $(LDFILGS) -lm -lz -lpthread -lasound
.cpp.o:
$(CC) $(INCLUDES) -c $(CCFLAGS) $*.cpp -o aaa@qq.com
clean:
rm -f $(.OFILES) ../*~ ../*/*~ core
cleanall:
rm -f $(.OFILES) ../*~ ../*/*~ core InfoNES
release:
clean all
tar:
( cd ..; \
tar cvf $(TARBALL).tar ./*; \
gzip $(TARBALL).tar \
)
install:
install ./InfoNES /usr/local/bin
简单阅读下这个文件。
$CC = arm-linux-gcc
表示使用的交叉工具链为arm-linux-gcc,笔者的工具链为arm-poky-linux-gnueabi-gcc。但是现在仅仅是先浏览代码,不要修改代码,防止待会自己都不清楚自己改了什么。或者是使用git工具管理代码。
# InfoNES
.CFILES = ./../K6502.cpp \
./../InfoNES.cpp \
./../InfoNES_Mapper.cpp \
./../InfoNES_pAPU.cpp \
./InfoNES_System_Linux.cpp joypad_input.cpp
这部分指定编译中使用到的文件有“K6502.cpp、InfoNES.cpp、InfoNES_Mapper.cpp、InfoNES_pAPU.cpp、InfoNES_System_Linux.cpp、joypad_input.cpp”,后面我们可以重点关注下这些文件。
all:
InfoNES
InfoNES: $(.OFILES)
$(CC) $(INCLUDES) -o aaa@qq.com $(.OFILES) $(LDFILGS) -lm -lz -lpthread -lasound
这几句表示,当我们执行make时,会执行$(CC) $(INCLUDES) -o aaa@qq.com $(.OFILES) $(LDFILGS) -lm -lz -lpthread -lasound。后面的-lm -lz -lpthread -lasound表示需要使用到的库,编译此工程前,我们需要先交叉编译下这几个库。笔者使用的工具链中已经包含这些库了,所以就不需要交叉编译这些库了。
2.4 - mapper文件夹
里面是一堆mapper文件,看得人很蒙。不过不用纠结这个,因为我们的目的是移植,有些文件我们根本是不用修改的,所以暂且略过。
2.5 - ppc2002 ppc2003
里面存在文件InfoNES_System_ppc之类的文件,而之前linux文件夹中存在InfoNES_System_linux.cpp文件。且Makefile中包含了InfoNES_System_linux.cpp而没有包含InfoNES_System_ppc文件。
我们可以大胆猜测,ppc2002和ppc2003是类似linux的一种平台,既然我们要移植的是linux平台,所以这个文件夹可以直接跳过,甚至粗暴点,可以直接删除这个文件夹。
2.6 - win32
win32目录下面是移植到windows平台需要的文件,也与此次目标无关,可以忽略。
2.7 - 项目目录
项目目录下文件一般都是所有平台都需要使用的文件。
欢迎加QQ群:105335490 一起交流噢。
上一篇: 学习淘淘商城第九十六课(购物车实现分析及工程搭建)
下一篇: IMX6ULL官方linux移植