[基于QT,4.7的ARM嵌入式Linux的游戏程序开发实现]嵌入式程序开发

  摘要:在嵌入式系统中,ARM处理器与嵌入式Linux操作系统结合得愈加紧密,并广泛应用于社会的各行各业。同时,面对人机交互效率的需求不断提高,越来越多的嵌入式设备开始采用较为复杂的GUI系统,在此过程中QT得到了广泛的应用。本文通过介绍五子棋游戏开发,可以使读者了解基于QT4.7的ARM嵌入式Linux的应用程序开发实现过程。
  关键词:ARM处理器;嵌入式Linux;QT;应用程序;QT移植
  中图分类号:TP316文献标识码:A文章编号:1009-3044(2012)03-0614-03
  Game Program Development and Implementation Based on QT4.7 of ARM Embedded Linux
  WANG Ru, SONG Wei, ZHOU Xing-yi
  ( Liaoning Equipment Manufacturing Technical College, Shenyang 110161, China)
  Abstract: In embedded systems, ARM processor with embedded Linux operating system combination was even more closely, and is wide? ly used in sectors of society. At the same time, the face of human-computer interaction efficiency, as demand increases, more and more em? bedded devices began to use more complex GUI system, in the process has been widely used QT. This paper describes the backgammon game development, you can make the reader understand the process of application development , it based on QT4.7 of ARM embedded Linux.
  Key words: ARM processor; embedded Linux; QT; application program; QT transplant
  在嵌入式系统中,基于ARM技术的微处理器占据了32位RISC处理器80%以上的市场份额;同时,嵌入式Linux系统是发展最快,应用最为广泛的操作系统;两者的结合越来越紧密,并广泛应用在便携式消费类电子产品、网络、汽车、无线设备等各个领域。QT是嵌入式系统的一款优秀跨平台C++图形用户界面开发工具。本文以五子棋游戏程序开发为例,介绍了基于QT4.7的ARM嵌入式Linux应用程序实现过程。
   1开发环境
  根据系统功能以及设计嵌入式系统的要求,开发此系统需要以下主要配置:
  1)软件开发环境:windows XP操作系统,vmware7.0虚拟机,ubuntu10.10系统,Qt4.7.3开发工具,u-boot1.1.6,2.6.35版linux内核,4.3.2版gcc编译器;
  2)开发语言:C/C++语言;
  3)硬件开发环境:北京博创公司UP-NETARM2410-S实验开发板上大部分硬件,包括三星S3C2410核心板、64M NAND FLASH、64M SDARM、TET液晶LCD、触摸屏等。
   2 U-Boot移植
  在介绍U-Boot(Universal Bootloader)之前,先介绍一下Bootloader。简单的说,Bootloader就是在操作系统内核运行之前的一段引导程序,类似于PC中的BIOS。通过它,可完成硬件设备的初始化,并建立内存空间的映射图的功能,为最终调用系统内核做好准备[1]。
  U-Boot作为通用的Bootloader,支持多种嵌入式操作系统和多种体系结构的处理器。因为Bootloader是完全依赖硬件平台的,所以在新电路板上需要移植U-Boot程序。
  U-Boot移植主要工作是添加开发板硬件相关文件、配置选项、配置编译。本文在移植U-Boot过程中添加了tftp和博创2410-s平台的AX88796网卡驱动。
   3配置编译内核和内核移植
  由于本文采用最新的QT4.7.3技术,所以选择了2.6.35版本的linux内核,以便较好的支持QT4环境。移植内核过程中我们选用了4.3.2版本的GCC编译器(支持EABI即嵌入式应用二进制接口)。
  Linux内核源代码支持二十多种体系结构的处理器,在编译之前必须根据特定的平台配置内核源代码。
  配置nand flash分区:即系统分为三个分区,第一分区存放u-boot,第二分区存放内核,第三分区存放文件系统。
  修改include/asm-arm/arch-s3c2410/map.h文件。加入AX88796的地址映射。
  修改网卡驱动的主要文件drivers/net/ne.c。
  配置内核时,在s3c2410_defconfig基础上,还要增加/去除一些配置选项。保存退出,产生.config文件。
  内核的编译都是通过make的不同命令实现的[2],具体实现如下所示:
  #make menuconfig配置编译选项
  #make clean删除生成的模块和目标文件
  #make zImage编译内核生成压缩的映像
  #make modules编译模块
  #make modules_install安装编译完成的模块
  #make zImage生成压缩的内核映像
  至此,内核的编译工作完成,在arch/arm/boot目录下生成了zImage文件,即为压缩的内核映像。最后,将内核镜像烧写到博创arm2410s开发板上,启动正常,网卡也正常。
   4文件系统移植
  本文采用busybox工具制作文件系统。选用的是1.15.2版本的源码,在配置busybox的时候是基于默认配置。交叉编译生成文件系统并拷贝库函数之后,缩小复制过来的链接库的体积使用的命令是:arm-linux-strip�s /work/rootfile/rootfs/rootfs/lib/lib*。
  建立配置文件,把busybox源码目录下的etc的内容拷贝到这里的etc下,修改拷贝过来的profile文件和初始化文件inittab,fstab,在初始化脚本文件init.d/rcS中添加相应信息。
  创建一个空的mdev.conf文件,在挂载根文件系统时会用到的。最后用./mkcramfs rootfs rootfs.cramfs命令生成cramfs文件系统。
   5 QT4.7.3的移植
  由于QT4.7.3推出时间不长,相关资料非常少,再经过查阅大量相关书籍,边学习边实践,在失败中步步推进,历经诸多曲折,耗费大量时间后,终于安装移植成功,以下为QT4.7.3移植全过程。
  5.1开发环境
  操作系统:Vmware7.0 + Ubuntu10.10交叉编译器:arm-linux-gcc-4.3.2目标板:博创2410平台+夏普8寸屏
  5.2准备工作
  1)下载源码包
  在ftp://ftp.省略/qt/source/下载qt-embedded-linux-opensource-src-4.7.3.tar.gz、
  qt-x11-opensource-src-4.7.3.tar.gz;在http://search.download.省略/search/tslib1.4下载tslib1.4.tar.gz。2)配置ubuntu10.10编译环境。
  3)建立目录。/usr/local/qt(源码包存放的目录)。
  5.3安装交叉编译器
  安装、使用gcc编译器arm-linux-gcc-4.3.2。
  5.4编译及安装
  编译及安装qt-x11-opensource-src-4.7.3,qt-embedded-linux-opensource-src-4.7.3。
  5.5设置环境变量及各版本使用方法
  1)qt-x11环境变量设置。在setenv.sh添加如下内容: PATH=/usr/local/Trolltech/Qt-4.7.3/bin:$PATH
  LD_LIBRARY_PATH=/usr/local/Trolltech/Qt-4.7.3/lib:$LD_LIBRARY_PATH
  2)qt-embedded-x86环境变量设置。在setenv-x86.sh添加如下内容:
  QTEDIR=/usr/local/Trolltech/QtEmbedded-4.7.3-x86
  PATH=/usr/local/Trolltech/QtEmbedded-4.7.3-x86/bin:$PATH
  LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.7.3-x86/lib:$LD_LIBRARY_PATH
  3)qt-embedded-arm环境变量设置。在setenv-arm.sh添加如下内容:
  QTEDIR=/usr/local/Trolltech/QtEmbedded-4.7.3-arm
  PATH=/usr/local/Trolltech/QtEmbedded-4.7.3-arm/bin:$PATH
  LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.7.3-arm/lib:$LD_LIBRARY_PATH
  4)各版本使用方法。我们在运行的时候分别运行对应的脚本即可。
  5.6运行库移植到博创2410开发板
  1)在博创2410板上建立目录。
  2)复制字库文件。
  3)复制运行库。
  4)复制触摸屏软件。
  5)在开发板上建立环境变量。修改开发板上/etc/profile文件,增加以下内容:export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.3-arm;export QPEDIR=/usr/local/Trolltech/QtEmbedded-4.7.3-arm;
  export TSLIB_ROOT=/usr/local/tslib;export PATH=$QTDIR/bin:$PATH;
  export TSLIB_CONSOLEDEVICE=none;export TSLIB_FBDEVICE=/dev/fb0;export TSLIB_TSDEVICE=/dev/input/event0;
  export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts;
  export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf;export TSLIB_CALIBFILE=/etc/pointercal;
  export QWS_MOUSE_PROTO=Tslib:/dev/input/event0;
  export QWS_DISPLAY=LinuxFb:/dev/fb0;export QWS_SIZE=640x480
  export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$QTDIR/lib:/usr/local/lib:$LD_LIBRARY_PATH
  6)使触摸屏生效。修改mini2440上/usr/local/tslib/etc/ts.conf文件,把第二行# module_raw input前面的#和空格去除,保存退出。
  7)校准触摸屏。触摸屏的前提是你的触摸屏驱动已经写好,并加载进了内核。你可以测试有没有加载触摸屏驱动,cat /dev/in? put/event0(这只是我的板子上的触摸屏) ,点击触摸屏,看终端有无显示,若有则表明正确。重新启动开发板,执行:
  cd /usr/local/tslib/bin
  ./ts_calibrate校准触摸屏
  ./ts_test测试触摸屏
  如果正常,QT4 Embedded移植成功!
  5.7博创2410开发板开机自动运行自己的程序
   6游戏算法设计
  游戏设计的主要工作在于具有“人工智能”的算法,而大体上可以将游戏算法部分划分为三大块:棋局表、搜索算法、局面评估[3]。程序的大概的思想是:玩家每走一步,对于玩家和计算机,都根据获胜表对棋盘各个空棋位进行评分,每个位置的分数与下面这句话有关:该位置所在的每一种获胜组合中已经拥有的棋子数,然后对玩家和计算机产生的分数均衡,以判断计算机是进攻还是防守[4]。
  规则:分黑白两方,轮流下棋。率先将5子连线的一方获胜。
  目标:使机器在下棋的过程中攻守兼备,就像和一个真正的人类下棋一样。
  分析:我们以15X15的棋盘来加以说明。
  按照五子棋的规则特点,我们可以先将需要搜索的步数量化,以实现程序的高速查询,也就是说建立一张特殊的“表”,其中标明了获胜的所有情况。那么剩下的事就是实时查询这张表作为下一步的依据。就以上面所说,我们采用15X15的棋盘,其获胜的情况我们可以得出垂直方向上的获胜组合是15×11=165,同理,水平方向的获胜组合也是165,而两个倾斜方向上的获胜组合是(1+ 2+3+4+5+6+7+8+9+10)×2+11=121,即:共165*2+121*2=572种情况。
  那么我们在下棋过程中,是怎么来考虑当前应该下在哪个格子呢?
  1)看双方哪些格子可以同时拥有多种获胜方式,获胜方式越多越具优势。
  2)比较双方最具优势的格子,若对方最具优势格子比自己的更具优势,便把棋子下到对方最具优势的格子,这样体现了防守。否则,便把棋子下到自己最具优势的格子,这样体现了进攻。在决定进攻防守之后,下子计算权值,四个大方向,搜索棋子,统计有所少三三,四四,以确定权值。
  我们的数学模型雏形基本出来,以上两条可以说就是五子棋规则到编程的抽象。此外还需要构造一个评价函数来决定机器的攻防。
   7结论
  本文开发了五子棋游戏应用程序,利用了Qt4.7.3编写了游戏界面,用C++、实现了五子棋人工智能算法并成功移植到了博创UP-NETARM2410-S开发板上。其中最复杂开发过程就是Qt4.7.3的移植和五子棋人工智能算法的设计。通过本文可以知道基于QT的ARM嵌入式Linux应用程序开发主要分如下步骤:U-Boot移植、配置编译内核和内核移植、文件系统移植、QT移植、源程序的获得、编译和调试几个步骤。
  参考文献:
  [1]董玲,朱宏,杨忠孝.基于ARM嵌入式Linux应用程序开发研究[J].电子测试,2008(5).
  [2]华清远见嵌入式培训中心.嵌入式LINUX系统开发标准教程[M].北京:人民邮电出版社,2009.
  [3]张声昊,赵爽.国际象棋中马的周游路线问题的递归算法[J].信息时代,2007(5).
  [4]五子棋算法详解[EB/OL]. http://www.省略/p-73742690496.html.

推荐访问:嵌入式 程序开发 游戏