1、成绩课程考核大作业课程名称:嵌入式技术任课教师:学期:2016-2017 学年第 1 学期 SDL 系列游戏在 ARM 上移植的实现院 系 专 业 班 级 提交时间: 2016 年 11 月 12 日SDL系列游戏在 ARM上移植的实现湖北省武汉,430070摘要:在现在,年轻人喜欢通过玩游戏来放松自己,娱乐自己。许多人会选择到电玩厅游戏厅放松自己。因此,我研究并使用 FriendlyARM 实现一个简易的 SDL 系列仙剑奇侠传一的移植,使其能够通过键盘运行游戏。完成这个游戏移植同时需要嵌入式硬件知识和软件知识。硬件方面主要是烧写 SD 卡,将 linux 镜像文件安装到嵌入式设备上,修改分
2、辨率;软件方面主要是移植游戏和 SDL 游戏库,设置开机自启动。并且,因为移植原理简单方便,可以以此为模板移植到一些大型设备上,比如电玩厅的游戏机,以此获得商业利益。关键词:SDL 系列游戏;ARM 移植The Realization of SDL Series Game Porting on ARMAbstract: In the present, young people like to play through the game to relax and entertain themselves. Many people choose to relax in the arcade gam
3、e room. Therefore, I study and use FriendlyARM to achieve a simple SDL series “Paladin“ transplant, so that it can run the game through the keyboard. Completing this game migration requires both embedded hardware knowledge and software knowledge. Hardware is the main programming SD card, the linux i
4、mage file installed on the embedded device, modify the resolution; software is mainly transplant games and SDL game library, set the boot from the start. And, because the transplant principle is simple and convenient, you can use this as a template to transplant to some large equipment, such as vide
5、o game console, in order to obtain commercial interests.Keywords: SDL series of games; ARM transplantation1 实验的主要工作1. 了解 linux 操作系统,熟悉各种基础指令代码;了解 SDL 游戏移植基本原理,熟悉移植过程;了解 ARM 硬件软件操作。通过之前的学习,我基本上学会了所有 linux 基本代码,能够独立编写出移植过程中的全部代码;我了解到 SDL 游戏有 SDL_mixer 声音库、SDL_net 网络库、SDL_ttf 字体库、SDL_rtf 图像库,移植游戏的时候必须也
6、移植进去;我了解到 ARM 上没有运行操作系统、屏幕是 A70 长 640 宽 480、cpu 为 512MHZ、内存为 256M,我选择了满足硬件要求的仙剑奇侠传一作为本次移植对象,我选择烧写 linux 到开发板中。2. 进行硬件相关操作,烧写 SD 卡;再烧写 linux 的镜像文件到开发板中;修改游戏分辨率。我使用 superboot 工具烧写 SD 卡,使其能够进行 SD-BOOT,再修改烧写 linux 的 ini配置文件,比如烧写的系统名称,ARM 屏幕是 A70,烧写格式是 ubfi,使其适合FriendlyARM,再烧写 linux 的镜像文件到开发板中,方便之后软件更容易移
7、植;我了解到 FriendlyARM 屏幕分辨率为 640*480,并修改 main.c 中的游戏分辨率参数,并且编写函数让游戏动态获取分辨率。3. 进行软件操作,对 SDL 库以及游戏进行交叉编译;再将可执行文件连同游戏一起倒入 ARM 之中;建立一个开机自启动的脚本文件。我将五个游戏库以及游戏下载,在电脑 linux 交叉编译并打包,然后使用 U 盘将打包文件拷入开发板中,游戏不能直接运行,必须建立开机自启动 shell 脚本,并在脚本中引导游戏启动。准备工作了解 linux 操作系统了解 SDL 游戏移植基本原理了解 ARM 硬件软件操作硬件相关操作烧写 SD 卡 烧写 linux 的镜
8、像文件到开发板中修改游戏分辨率软件相关操作交叉编译 创建开机自启动 shell 程序2 FriendlyARM与 SDL游戏的介绍1FriendlyARM 概念FriendlyARM 是一款以 ARM11 芯片(三星 S3C6410)作为主处理器的嵌入式核心板,该CPU 基于 ARM1176JZF-S 核设计,内部集成了强大的多媒体处理单元,支持 Mpeg4, H.264/H.263 等格式的视频文件硬件编解码,可同时输出至 LCD 和 TV 显示;它还并带有 3D 图形硬件加速器,以实现 OpenGL ES 1.1 wScreenHeight = fFullScreen ? 480 : 40
9、0;改成getFBSize( if(wScreenWidth640|wScreenHeight480) wScreenWidth=640; wScreenHeight = 480; 10. 再定位到 main.c 函数第 439 行,在 main 函数前面,插入以下函数,这个函数用于动态获取屏幕分辨率;#include #include #include #include void getFBSize(int *w, int *h) char buf256;*w = 480;*h = 272;FILE *file=fopen(“/sys/class/graphics/fb0/virtual_s
10、ize“,“r“);if (!file) return ;int tmp1=0,tmp2=0;if (fgets(buf, sizeof(buf), file) if (sscanf(buf, “%d,%d“, *h = tmp2; fclose(file);return ;11. 接下来应该需要修改其他配置文件,比如对手柄的支持,但是我使用键盘,故不展示细节;4 软件部分实验内容1. 我们首先需要在网上下载 Fedora9,因为所有开发工作都是在 Fedora9 的 Linux 环境下进行的,所以在开始之前,需要先在 PC 上安装 Fedora9。2. 建立交叉编译环境,安装好 Friend
11、ly 提供的 mini6410 交叉编译器。3. 我们还需要在网上下载 SDL/SDL_mixer/SDL_ttf/SDL_image 以及 iconv 五个库,再将这五个库放入 linux/tmp 目录之下,在/opt/FriendlyARM/mini6410 目录下创建目录games 来作为移植工作的工作目录,再在 games 目录下创建一个 output 目录,用来存放编译生成的可执行文件或者类库。4. 接下来编译 iconv/SDL/SDL_mixer/SDL_ttf/SDL_image 库,因为这四个库编译方法类此,故以其中 SDL 库为例。# cd /opt/FriendlyARM
12、/mini6410/games # tar xvzf /tmp/SDL-1.2.14.tar.gz # cd SDL-1.2.14 # ./configure -prefix=/opt/FriendlyARM/mini6410/games/output -disable-video-nanox -disable-video-qtopia -disable-video-photon -disable-video-ggi -disable-video-svga -disable-video-aalib -disable-video-dummy -disable-video-dga -disable
13、-arts -disable-esd -disable-alsa -disable-video-x11 -disable-nasm -enable-joystick -enable-input-tslib -enable-video-fbcon -host=arm-linux -build=i386 # make # make install 5. 将 SDL 库打包,为接下来操作做准备,打包 SDL 类库和其它相关的类:6. 从网上下载仙剑奇侠传SDL 版本源代码,并将其拷贝到/tmp 目录下。7. 解压其源代码,并且定位到源代码的目录,执行编译操作,在编译完成后,会在sdlpal 目录下会
14、生成可执行文件 sdlpal_arm。 8. 光有可执行文件还不能直接运行游戏,还需要上网找到相应的仙剑奇侠传原版的资源文件,比如声音、图片等等,并拷贝到 /tmp 目录下备用,我创建一个目录output_pal 用于存放仙剑的执行文件和资源,然后将资源解压到该目录下,这将会在/opt/FriendlyARM/mini6410/games/output_pal 目录下生成 xianjian 目录。9. 接下来,把编译出来的仙剑可执行文件拷到/opt/FriendlyARM/mini6410/games/output_pal/bin/目录下,并打包10. 将 xianjian_setup.tar
15、.gz 和 sdl_setup.tar.gz 拷贝到 u 盘中,然后将 u 盘拷贝到 FriendlyARM 开发板上,在根目录进行解压:11. 修改启动项内容,使其开机运行 run_xianjian.sh 脚本将/etc/init.d/rcS 中以下内容:/bin/qtopia &修改为/bin/run_xianjian.sh &12. 编写 run_xianjian.sh 脚本在/bin 下创建一个脚本 run_xianjian.sh# vi /bin/run_xianjian.sh在其中输入:#!/bin/shexport SDL_NOMOUSE=1export LD_LIBRARY_P
16、ATH=/lib:/usr/lib:/xianjian/lib:$LD_LIBRARY_PATH cd /xianjian sdlpal_arm给脚本 run_xianjian.sh 加上可执行权限:13. 重启 FriendlyARM 就可以进入游戏,看到以下界面,则说明进入游戏成功。5 心得体会其实,我自己是第一次使用嵌入式,之前只简单学习过单片机,对 ARM 可以说在研究生生涯之前完全没有任何概念,许多 ARM 常见知识都不知道。当初选择它作为题目,一方面是因为对游戏的喜爱,另一方面是因为缺少 wifi 等其他硬件,是在只有一块嵌入式板子的情况下做出来选择。为了完成这一份实验报告,找了许
17、多资料,虽然我自己做的以软件为主,比较简单,但是我仍然感受到了它的复杂深奥。在实际操作中也遇到了各种不懂的难题,比如烧写镜像文件到开发板之中,我曾经花费几个下午一无所获,全都烧写失败,后来才发现是我自己编写 ini 配置文件错误,每一次 ARM 开机都因为屏幕读取失败,导致一直没有开机画面。并且实验的最后一步,经常出错,开机之后没有任何提示,后来才发现是修改开机启动项时,由于 linux 系统保护,复制命令没有添加 -f 强制复制,不允许我修改开机启动项,每次开机都是原来的启动项而失败。虽然过程很漫长,但是当我看到仙剑这一款游戏启动时,还是觉得物有所值。6 结论通过查看学习资料以及相关的文献,
18、我对嵌入式学习的应用有了一定程度上的了解。在此基础之上,我设计开发了这个 SDL 游戏移植。具体来说,我在开发时使用的是烧录 linux 系统到开发板之中,编写 SDL 代码,生成可执行文件。通过一段时间的学习和研究后,我终于完成了仙剑奇侠传游戏能够在FriendlyARM 上运行。在设计和实现这个游戏移植的过程中,我学习到了很多的关于嵌入式的知识。大致上了解了它的特点,功能以及如何实现我深刻体会到了开发必须要建立在认真分析的前提下,以规范化的研究为依托。完整的 SDL 游戏移植应该是一个庞大而复杂的系统,但是,我所设计的这个移植只能实现一些简单的功能,想要进一步扩展完善它的功能,还需要进一步
19、的学习和研究。总而言之本文设计的 SDL 系列游戏在 ARM 上的移植:1.烧写了 linux 到嵌入式开发板之上。2.实现了仙剑奇侠传一在 FriendlyARM 上的运行。3.用户界面友好,界面清晰易懂,系统操作起来十分简单,玩起来会很容易。虽然本系统实现了游戏移植的一些基本功能,但还有很多想要改进和扩展的地方。比如:游戏不能存档。若进一步开发该移植,可以在此基础上提供更多的信息。参考文献1. 嵌入式系统 ,eeworld 网,2012-09-212. 嵌入式 ,开发网,2012-09-213. 嵌入式技术介绍 ,5 联网,2012-12-164. 嵌入式技术特点 ,偶然物联网,2013-01-75. 嵌入式开发工程师的未来在哪里? ,OFweek 工控网,2015-08-136. 经济型闪存将为嵌入式市场带来生机 ,TechTarget,2015-06-77. 嵌入式就业人才创新华清远见总裁倡导“兴趣学习” ,北方网,2015-12-148. SDL ,中文维基百科,2012-09-7