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运行成功 强 牛贴得顶 高手。。搬个凳子看看。 额,楼主你老牛了 MAIRK 好玩,先mark! 大牛,顶 顶! 牛头 大家又有“新”的游戏可以玩了哈,强悍! 一个字 强 不得不说强!
太给力了! 太给力了~! 真棒啊,如果有更好的DOS/X86模拟器,可以把当年的N多游戏都玩起来,毕竟那时候的CPU只有几十M来着,用几百M的ARM来模拟,不会差到哪里去。。。 牛贴得顶 很好 强烈关注!
谁给讲讲原理,我一头雾水! mark 顶 mark 牛逼~! 强大,改天也按楼主的方法在OMAP3530下试试 NB MARK之,慢慢看!! mark 真的相当给力 ding!! mark 太牛拉! 非常好,我看2440上也行。能不能WINCE6入手,可以省不少事 不知道在MINI2440上运行效果怎么样? 超强,mark一下 markkkkkkkkkkkkkkk 很强大 牛贴,留个记号。谢谢分享! 不是一般的强 太强了!不顶不行1 哇!超犀利哦 好啊,改天移植到MINI2440下不知道能不能行 NB大了,必须收藏 这得留着一切都是经典啊 !!! 太给力了! 不错,nx 不得不说强!
太给力了! 真是厉害啊,学习了 mark lz 那个run.sh还有sdlpal怎么弄来呢?要自己写嘛? mark 经典 正好有个6410开发板,过几天试试 牛的不得了,顶了 Mark,准备买个板子也试试! 牛 强! mark mark mark mark mark 强 mark 竟然没有看到过!强! 记号~~ mark 之
页:
[1]