uclinux和linux的区别我就不用多说了,uclinux是专门为没有MMU的cpu而准备的。以下两点却别会影响到我们的移植。


1.uclinux生成的目标文件格式是flat,可以在裸机上跑.uclinux和ARM7可能只能运行这种格式的程序,连接时需要加-elf2flat选项,否则是无法运行的,我们的开发板加上-Wl,-elf2flt="-s32768"即可


2.arm-elf使用的库是uclibc/uc-libc,而arm-linx使用的是glibc,故而在arm-elf的时候没有zlib的。所以要另外移植。



以上步骤和linux上差不多。

1.移植sdl,sdl的video其中之一的实现的方法是framebuffer,不巧的是我们的开发板LCD不支持framebuffer,而framebuffer也是QT,minigui移植的基础。麻烦就出来了,如果只是想移植游戏模拟器那大可抛弃SDL的video,自己另外写库。但是移植SDL是必要的,因为SDL还有其他的库是游戏模拟器所依赖的。
1)解压fceu
2)cd fceu
3)NM=arm-elf-nm LD=arm-elf-ld CC=arm-elf-gcc CXX=arm-elf-g++ RANLIB=arm-elf-ranlib AR=arm-elf-ar ./configure  --disable-ipod --enable-video-fbcon --target=arm-elf --host=arm-elf --prefix=/home/hansonlu/resp/source/SVN_HighwayStar/game/SDL-1.2.13/install
4)make;make install
5)cd test
6)NM=arm-elf-nm LD=arm-elf-ld CC=arm-elf-gcc CXX=arm-elf-g++ RANLIB=arm-elf-ranlib AR=arm-elf-ar ./configure --target=arm-elf --host=arm-elf --prefix=/home/hansonlu/resp/source/SVN_HighwayStar/game/SDL-1.2.13/install

PS1.test目录下有一些DEMO可以验证SDL是否移植成功,记得在链接的时候加上-Wl,-elf2flt="-s32768"。
PS2.--enable-video-fbcon,因为在./configure的时候,如果交叉编译器是arm-elf,是不会去检查fbcon,所以需要手动修改./configure,具体的需要修改哪里,我没有详细看过。你自己动手吧。因为我后来舍弃了SDL的VEDIO,所以没有去研究这个。

2.移植zlibc

export CC=arm-elf-gcc
./configure -shared --prefix=/home/hansonlu/resp/source/SVN_HighwayStar/armutils_2.5.113.0/toolchain
make;make install

prefix是交叉编译器所在的目录,也可以是其他的目录,但是一定把相应的文件要copy到交叉编译器所在的目录。


3.移植fceu
去掉SDL关于video部分,用自己的板子上支持的输出方式,需要修改的文件是:
fceu/src/drivers/pc/sdl-video.c
fceu/src/drivers/pc/main.c
fceu/src/drivers/pc/input.c


./configure --host=arm-elf --with-sdl-prefix=/home/hansonlu/resp/source/SVN_HighwayStar/game/SDL-1.2.13/install --prefix=/home/hansonlu/resp/source/SVN_HighwayStar/game/fceu/install

记得在链接的时候加上-Wl,-elf2flt="-s32768",修改makefile文件src/makefile在$link。。。。最后面加上即可。

make;make install

4.运行fceu

tftp -b 1368 -g -r fceu 172.18.128.84
tftp -b 1368 -g -r a.nes 172.18.128.84
tftp -b 1368 -g -r 1.jpg 172.18.128.84
chmod +x fceu
./fceu -sound 0 -xscale 1 -yscale 1 -inputcfg gamepad1 a.nes

Logo

更多推荐