目录
- 移植InfoNES到imx6ull
- 1 - 查找方案
- 2 - 了解工程
- 2.1 - doc文件夹
- 2.2 - joypad文件夹
- 2.3 - linux文件夹
- 2.4 - mapper文件夹
- 2.5 - ppc2002 ppc2003
- 2.6 - win32
- 2.7 - 项目目录
移植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文件,非常重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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 $@ $(.OFILES) $(LDFILGS) -lm -lz -lpthread -lasound .cpp.o: $(CC) $(INCLUDES) -c $(CCFLAGS) $*.cpp -o $@ 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工具管理代码。
1 2 3 4 5 6 | # 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”,后面我们可以重点关注下这些文件。
1 2 3 4 5 | all: InfoNES InfoNES: $(.OFILES) $(CC) $(INCLUDES) -o $@ $(.OFILES) $(LDFILGS) -lm -lz -lpthread -lasound |
??这几句表示,当我们执行make时,会执行$(CC) $(INCLUDES) -o $@ $(.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 一起交流噢。