xyz.ouravr 发表于 2010-12-29 22:59:07

Mini6410上移植<<仙剑奇侠传>>详细步骤(附图)

原文 :http://blog.chinaunix.net/u3/105675/showart_2325128.html\

0.支持库的编译
------------------------------------------------------------------
仙剑奇侠传是DOS下经典游戏。这个游戏最早是一个DOS下的商业游戏,流行一行。后来还拍成的电视剧。

LINUX上的的仙剑是在分析了其中游戏资源文件的格式情况下,用SDL重写一个开源软件。后来这个版本还移植到Android上。在我的乐phone手机也能完美运行。
   这是一批一批的开发人员接力完成的开源项目,完整写一个教材,也是我小小支持。

这个游戏需要 SDL/SDL_mixer/SDL_ttf/SDL_image四个库
而这四个库分别需要 mad/zlib/iconv/freetype/jpeg/png库. 嵌入式版本还需要tslib.因此完整的游戏需要大量移植工作

X86库的支持库编译
   

编译freetype
   tar xvzf freetype-2.3.11.tar.gz
   cd freetype-2.3.11
   ./configure
   make
   make install
安装zlib
      tar xvzf zlib-1.2.3.tar.gz
      cd zlib-1.2.3
       ./configure --enable-shared --enable-static
      make
       make install
安装libiconv
      tar xvzf libiconv-1.13.1.tar.gz
          cd libiconv-1.13.1
          ./configure
          make
         make install
安装libmad
    tar xvzf libmad-0.15.1b.tar.gz
      cd libmad-0.15.1b
      ./configure
       make
      make install
安装jpeg
   tar xvzf jpegsrc.v6b.tar.gz
   cd jpeg-6b
   ./configure
   make
   mkdir -p /usr/local/man/man1 #因为安装没有自己创建这个目录
    make install
安装libpng
      tar xvjf libpng-1.2.19.tar.bz2
       cd libpng-1.2.19
       ./configure
      make
      make install
安装SDL
   tar xvzf SDL-1.2.14.tar.gz
   cd SDL-1.2.14
   ./configure
      make
      make install
   
安装SDL ttf库
   tar xvzf SDL_ttf-2.0.9.tar.gz
      cdSDL_ttf-2.0.9
      ./configure
       make
       make install

安装SDL_image库
   tar xvzf SDL_image-1.2.8.tar.gz
         cd SDL_image-1.2.8
       ./configure
      make
      make install
安装SDL_mixer
tar xvzf SDL_mixer-1.2.9.tar.gz
cd SDL_mixer-1.2.9
   ./configure --enable-music-mp3-mad-gpl --enable-music-mp3=no
      make
       make install

   

一.x86版本的编译运行

这个用SDL实现的经典游戏的代码同样经典,支持屏幕缩放,键盘,MOUSE和JOY Stick支持。因此在X86上可以玩得更多。

   
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607979HJM0D3.png
(原文件名:xianjian-x86.png)


x86 版本比较简单,直接在源代码目录下,直接make就行

其中dist/Debug/GNU-Linux-x86/目录下的sdlpal就是可执行文件.

运行仙剑的准备工作。

它需要原版的资源文件。所以要在网上找到DOS版的资源包。注意原版文件名一般是大写的,而开源Linux版需要全部小写的文件。需要一一改过来。全部资源文件名如下:
0.rpg         1.rpg         abc.mkf
ball.mkf      data.mkf      f.mkf         fbp.mkf       fire.mkf
gop.mkf       install.exe   m.msg         map.mkf       mgo.mkf
midi.mkf      mpu401.drv    mus.mkf       pal.exe       pat.mkf
play.bat      rgm.mkf       rng.mkf       roriso.nfo    run.sh
sdlpal      sdlpal.map    setup.dat   sss.mkf       voc.mkf
wor16.asc   wor16.fon   word.dat

把编译好的sdlpal 程序拷入这个目录。
执行语句
export LD_LIBRARY_PATH=/usr/local/lib; ./sdlpal

二.ARM版本支持库移植
-----------------------------------------------------------------------------

2.1.arm版本支持库的移植.

   
这里采用相应的移植规范.
   1.freetype移植
      tar xvzf freetype-2.3.11.tar.gz
      cd freetype-2.3.11
       ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
       make
      make install
   
2.移植zlib库
          tar xvzf zlib-1.2.3.tar.gz
          cd zlib-1.2.3
          CC=arm-linux-gcc NM=arm-linux-nm CPP="arm-linux-gcc -E " RANLIB="arm-linux-ranlib" AR="arm-linux-ar rcv" ./configure --shared --prefix=$PWD/../../output/arm-linux
            make
         make install

   3. 移植jpeg库
         tar xvzf jpegsrc.v6b.tar.gz
            cd jpeg-6b/
         ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux--enable-shared
       #这里直接用环境变量来修改Makefile,会造成configure执行失败.因此只能手工修改Makefile

             #手工修改Makefile ,把所有工具链用arm-linux-gcc工具链
                     #23 行改为CC= arm-linux-gcc
                     #63行改为 AR = arm-linux-ar rc
                     #65行改为 AR2= arm-linux-ranlib

         make
         mkdir -p $PWD/../../output/arm-linux/man/man1
         make install

4.移植 png库
      tar xvjf libpng-1.2.19.tar.bz2
      cd libpng-1.2.19
         ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
         make
         make install

5.移植libmad
       tar xvzf libmad-0.15.1b.tar.gz
       cd libmad-0.15.1b
       ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
         #手工修改Makefile 把129的-fforce-mem去掉
         make
         make install

6.移植libiconv库
      tar xvzf libiconv-1.13.1.tar.gz
      cd libiconv-1.13.1
      ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux
         make
         make install

移植tslib参见我相关博文.

7.SDL库的移植
注意SDL的ALSA音频在ARM板上很不正常,会造成SDL启动卡死的现象,因此这里还是采用OSS音频。

   tar xvzf SDL-1.2.14.tar.gz
   cd SDL-1.2.14
   ./configure --prefix=$PWD/../../output/arm-linux --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-arts --disable-esd \
--disable-alsa --disable-video-x11 --disable-nasm --enable-joystick --enable-input-tslib --enable-video-fbcon \
--host=arm-linux --build=i386 CPPFLAGS="-I$PWD/../../output/arm-linux/include" LDFLAGS="-L$PWD/../../output/arm-linux/lib "
make
make install

8.SDL_image库移植
      tar xvzf SDL_image-1.2.8.tar.gz
      cd SDL_image-1.2.8

      ./configure --enable-shared --enable-static --host=arm-linux --prefix=$PWD/../../output/arm-linux \
--enable-bmp --enable-gif --enable-jpg --enable-png --enable-tif --enable-pnm --enable-xpm --disable-sdltest SDL_CFLAGS="-I$PWD/../../output/arm-linux/include" \
SDL_LIBS="-L$PWD/../../output/arm-linux/lib -lSDL"LIBPNG_CFLAGS="-I$PWD/../../output/arm-linux/include" \
   LIBPNG_LIBS="-L$PWD/../../output/arm-linux/lib -lpng" CPPFLAGS="-I$PWD/../../output/arm-linux/include/SDL "\
LDFLAGS="-L$PWD/../../output/arm-linux/lib -ljpeg -lts -lpng -liconv"

make
make install

9 SDL_ttf 库移植
            tar xvzf SDL_ttf-2.0.9.tar.gz
            cd SDL_ttf-2.0.9
             ./configure --host=arm-linux --prefix=$PWD/../../output/arm-linux --enable-shared --enable-static \
   --disable-sdltest --with-freetype-prefix=$PWD/../../output/arm-linux/ \
--with-sdl-prefix=$PWD/../../output/arm-linux/ CFLAG="-I$PWD/../../output/arm-linux/include" \
LDFLAGS="-L$PWD/../../output/arm-linux/lib -lSDL -lts -liconv -lfreetype"

         #手工修改Makefile,去掉OpenGL相关处理
            # 123行去 掉-I/usr/include -DHAVE_OPENGL
            #143行 改成GL_LIBS =
            # 266行 glfont_LDADD = libSDL_ttf.la -lm
         #手工修改 glfont.c.全部清空,写入如下
               #void main() {}
      make
      make install

10.音频库SDL_mixter移植
      tar xvzf SDL_mixer-1.2.9.tar.gz
         cd SDL_mixer-1.2.9
         ./configure --enable-music-mp3-mad-gpl --enable-music-mp3=no \
--host=arm-linux --prefix=$PWD/../../output/arm-linux \
--with-sdl-prefix=$PWD/../../output/arm-linux --enable-shared --enable-static
   make
   make install


三.SDLPAL的ARM版的移植
-----------------------------------------------------------------------------
ARM版本的的调整需要做如下处理,
   用unzip码解压zip源码
      

   2.1 修改屏幕分辩率
      开发板的分辩率可以在busybox下运行fbset命令查看到
         我用的6410板是采用 480*272 (QVGA),bpp是16
          #fbset


mode "480x272-769601"
      # D: 111111.111 MHz, H: 211640.212 kHz, V: 769600.770 Hz
      geometry 480 272 480 272 16
      timings 9 3 2 1 1 40 1
      accel false
      rgba 5/11,6/5,5/0,0/0
endmode




       把main.c的524/525行改成的板的分辨率

      wScreenWidth = 480;
      wScreenHeight = 272;

      如果想做得更加灵活可以加入对屏幕分辩率的自动侦测代码,或用命令行参数来设置.

2.2 修改Makefile.
   通过对主Makefile的分析,实际编译动作,是nbproject/Makefile-Debug.mk 来实现的。
   在ARM板的移植可以通过修改这个Makefile来完成.

    14行改成RANLIB=arm-linux-ranlib
   15行改成CC=arm-linux-gcc
   16行改成CCC=arm-linux-g++
   17行改成CXX=arm-linux-g++


   65行 改成 CFLAGS="-I$(PRJ_ROOT)/output/arm-linux/include"
   68行 CCFLAGS = $(CFLAGS)
   69行 CXXFLAGS = $(CFLAGS)

   82行改为
    ${LINK.cc} -L$(PRJ_ROOT)/output/arm-linux/lib-lfreetype -liconv -lmad -lz -ljpeg -lpng -lSDL_mixer -lSDL_image -lSDL_ttf -lSDL -Xlinker -Map=dist/Debug/GNU-Linux-x86/sdlpal.map -o sdlpal_arm${OBJECTFILES}


把Makefile里所有 -I/usr/include/SDL 置换成 为空

    所有的GNU-Linux-x86换成 GNU-Linux-arm

      
   在第一行增加 PRJ_ROOT=/home/hxy #这个要根据你自己目录来定

这里改动比较多,因此可以参考我写的模板的.   

2.2 声音的处理.
    另外在实测发现SDL如果用ALSA模式在ARM板上启动时会卡死。最后只能换成OSS才能正常运行通过。

2.3 在ARM-LInux的USB JoyStick
   它是直接支持的,插入后直接直接用手柄的来控制。

2.4 MOUSE及触摸屏操作
       默认的的MOUSE支持没有打开。可以简单的写在common.h 最后部分加入
   #define PAL_HAS_MOUSE
   并且在Linux打开tslib支持。而且tslib支持需要大量的环境变量支持。具体情况参见我的博文。

   并且调用sdlpal_arm之前。需要设SDL的环境变量
   SDL_MOUSEDRV=tslib
   SDL_MOUSEDEV=/dev/input/event1#这个取决于你tslib的设置。这里只是我的板上tslib的事件结点。
   
2.5设置运行进的LD_LIBRARY_PATH指向支持库路径
   
   export LD_LIBRARY_PATH=/mnt/output/arm-linux/lib ; ./sdlpal_arm

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_607980OQOVSW.jpg
(原文件名:xianjian-arm.jpg)



以上是实际运行效果,各部分都正常工作


   

最终运行结果是在S3C6410运行成功

woshi728138 发表于 2010-12-29 23:15:04

aureole 发表于 2010-12-29 23:16:29

牛贴得顶

gprs_new 发表于 2010-12-29 23:37:16

高手。。搬个凳子看看。

sdny7788 发表于 2010-12-29 23:49:22

额,楼主你老牛了

diandeng 发表于 2010-12-29 23:51:19

MAIRK

superyongzhe 发表于 2010-12-30 00:05:11

好玩,先mark!

yu_wen 发表于 2010-12-30 08:22:01

大牛,顶

unic 发表于 2010-12-30 08:30:28

顶!

xiaorenren 发表于 2010-12-30 08:43:44

牛头

gallop020142 发表于 2010-12-30 08:44:45

大家又有“新”的游戏可以玩了哈,强悍!

yunqian09 发表于 2010-12-30 09:13:33

一个字 强

tccaiming 发表于 2010-12-30 09:26:38

不得不说强!
太给力了!

Gorgon_Meducer 发表于 2010-12-30 09:28:52

太给力了~!

gale 发表于 2010-12-30 09:57:11

真棒啊,如果有更好的DOS/X86模拟器,可以把当年的N多游戏都玩起来,毕竟那时候的CPU只有几十M来着,用几百M的ARM来模拟,不会差到哪里去。。。

largeboss 发表于 2010-12-30 10:35:59

牛贴得顶

dengxiaofeng 发表于 2010-12-30 10:36:23

很好

zy473551 发表于 2010-12-30 10:53:59

强烈关注!

谁给讲讲原理,我一头雾水!

liangyurongde 发表于 2010-12-30 11:40:14

mark

zzz1367 发表于 2010-12-30 11:43:28

haigerl 发表于 2010-12-30 12:27:36

mark

NUAA_hp 发表于 2010-12-30 12:30:04

牛逼~!

Octagram 发表于 2010-12-30 12:33:14

强大,改天也按楼主的方法在OMAP3530下试试

huangstone 发表于 2010-12-30 12:45:31

NB

ITOP 发表于 2010-12-30 12:58:38

MARK之,慢慢看!!

aujux 发表于 2010-12-30 14:08:40

mark

lbc___ 发表于 2010-12-30 14:24:53

真的相当给力 ding!!

phwj2006 发表于 2010-12-30 15:07:24

mark

geniusjia 发表于 2010-12-30 15:10:21

太牛拉!

Gelivable 发表于 2010-12-30 15:36:25

非常好,我看2440上也行。能不能WINCE6入手,可以省不少事

yl3721 发表于 2010-12-30 16:58:26

不知道在MINI2440上运行效果怎么样?

songzh1436 发表于 2011-2-10 21:18:20

超强,mark一下

Errrrrrrrr 发表于 2011-2-10 21:31:24

markkkkkkkkkkkkkkk

sailen 发表于 2011-2-11 10:43:30

很强大

tarchen 发表于 2011-2-11 17:33:53

牛贴,留个记号。谢谢分享!

xuxi2009 发表于 2011-2-11 19:39:53

不是一般的强

caiyue3577 发表于 2011-2-11 20:34:07

太强了!不顶不行1

kenson 发表于 2011-2-11 21:17:03

哇!超犀利哦

falcon_z 发表于 2011-2-11 21:27:27

好啊,改天移植到MINI2440下不知道能不能行

zy473551 发表于 2011-2-11 21:38:51

NB大了,必须收藏

728196 发表于 2011-2-13 10:34:16

这得留着一切都是经典啊 !!!

Mingrui 发表于 2011-2-13 10:35:43

太给力了!

abnerle 发表于 2011-2-14 16:26:37

不错,nx

alexmayer 发表于 2011-2-16 09:13:39

不得不说强!
太给力了!

krcc 发表于 2011-2-16 09:26:43

真是厉害啊,学习了

lirics 发表于 2011-2-20 14:48:27

mark

lunzi 发表于 2011-2-20 17:09:57

lz 那个run.sh还有sdlpal怎么弄来呢?要自己写嘛?

likeavr 发表于 2011-2-20 17:56:31

mark

wcm_e 发表于 2011-2-20 18:12:21

经典

wangyj173 发表于 2011-2-20 18:13:08

正好有个6410开发板,过几天试试

lcq007 发表于 2011-2-20 20:24:52

牛的不得了,顶了

lanxing18 发表于 2011-2-20 21:36:06

Mark,准备买个板子也试试!

Forever 发表于 2011-2-20 22:04:59

lang1437 发表于 2011-2-21 10:14:19

强!

phwj2006 发表于 2011-2-21 14:57:56

mark

bobqq 发表于 2011-4-15 01:19:37

mark

178731 发表于 2011-4-18 22:25:34

mark

fenchen 发表于 2011-4-20 09:29:45

mark

ngei 发表于 2011-4-20 09:33:21

mark

afei8856 发表于 2011-4-20 13:28:01

强 mark

TigerRay 发表于 2011-4-20 13:30:27

竟然没有看到过!强!

zbjzxc 发表于 2011-4-20 13:55:03

记号~~

sy0021 发表于 2011-5-12 16:53:42

mark 之
页: [1]
查看完整版本: Mini6410上移植<<仙剑奇侠传>>详细步骤(附图)