由于在外面出差,没有把开发板带在身上,无法继续在空余时间学习ARM+LINUX。想起以前学习MCU的时候,总是用PROTEUS仿真硬件的运行,当时刚接触这个行业的时候,也正常PROTEUS让我对它产生浓厚的兴趣。心里总是想,像ARM9这样的平台是否有相应的仿真平台呢。最终确定使用一款名叫SkyEye的纯软件仿真平台,skyeye是开源软件,现在可以模拟很多种ARM,同时可以调试linux等操作系统,这对于没有开发板的嵌入式学习者是个很好的选择。
本文档主要为记录在CentOS 6.5上搭建SkyEye模拟S3C2440开发板的开发过程。
skyeye-1.3.5_rc1.tar.bz2: http://sourceforge.jp/projects/sfnet_skyeye/downloads/skyeye/skyeye-1.3.5/skyeye-1.3.5_rc1.tar.bz2/
( http://pan.baidu.com/s/1i3zeAHJ )
a) 解压源码
# tar -xvf /media/sf_ShareDIR/SkyEye/Source/skyeye-1.3.5_rc1.tar.bz2 -C ./
b) 配置SkyEye
# ./configure -prefix=/usr/local
提示下图所示错误,原因是没有安装C++编译器。使用yum安装C++编译器。
# yum install gcc-c++
配置完成,如下图所示。
c) 编译SkyEye库
# make lib
……经过漫长的等待,编译完成,如下图所示。
d) 编译SkyEye
# make
Ø 编译,提示“/usr/bin/ld: cannot find -lltdl”,安装ltdl即可。
# yum install libtool-ltdl-devel
Ø 编译,提示“SDL_syswm.h:73: error: expected specifier-qualifier-list before”。经BAIDU,说安装libX11-devel即可。
# yum install libX11-devel
Ø 编译,提示“SDL_x11sym.h:168: error: too many arguments to function”。参数数量不一致,怀疑是因为SDL库版本问题,通过yum更新SDL即可。
# yum install SDL-devel
Ø 编译,提示“cannot find -liconv”。安装iconv库即可,在yum服务器上没有libconv库,因此需要从网上(http://www.gnu.org/software/libiconv/#downloading 或 http://pan.baidu.com/s/1mgqladU )下载来安装。
# tar -xvf /media/sf_ShareDIR/SkyEye/Source/libiconv-1.14.tar.gz -C ~
# cd ~./libiconv-1.14/
# ./configure
#./make
#./make install
Ø 编译,提示“error: gtk/gtk.h: No such file or directory”,安装GTK包即可。注意安装GTK后要make clean,make distclean并重新./configure,make lib。
# yum install gtk2-devel
Ø 编译,提示“pycli/pycli.c:1:20: error: Python.h: No such file or directory”,安装python库。
# yum install python-devel
e) 安装SkyEye
# make install
# make install_lib
安装完成后,在命令行中输入skyeye并按回车键后,即可进入skyeye。如下图所示。
编译完成后的SKYEYE包含一例程,由于SKYEYE安装在/usr/local目录下(可能与其它软件安装在一起),因此它的例程也在此目录下,这里是在/usr/local/testsuite/目录下(这里有两个例程,我们这里运行arm_hello)。运行例程用以下命令:
# cd /usr/local/testsuite/arm_hello/
# ./skyeye –e arm_hello
# start
提示” SKYEYE Error:We need xterm to run the console of uart.Please check if you installed it correctly.”。安装下xterm即可。
# yum install xterm
# ./skyeye –e arm_hello
# start
# run
另外在以下网站中还有一些例程下载。
http://sourceforge.net/projects/skyeye/files/skyeye-testsuits/
( http://pan.baidu.com/s/1tTn2Y )
如下图所示,在下载的例程中运行S3C2440的linux,当在skyeye中键入start开始运行后,停止在以下画面,无法再输入run去运行,只能通过Ctrl+v退出。经测试,很多例程都是这种情况。经GOOGLE后得知与skyeye相匹配的编译器之一是gcc-3.4或4.2。
使用gcc -v得知我的LINUX中的GCC版本为4.4.7,因此怀疑是编译器版本不对才会导致这些问题出现。接下来更换GCC编译器再重新编译一次skyeye进行测试。
a) 下载gcc 4.2.1
http://pan.baidu.com/s/1eQxRICU
b) 安装gcc 4.2.1
# ./configure --prefix=/usr/local/gcc-4.2.1 --enable-languages=c,c++
# make
Ø 提示“error while loading shared libraries: libiconv.so.2:”
缺少libiconv,上网下载此库安装即可。其实在前面安装skyeye的时候已经安装过该库了,只是我现在重装了系统,要重新安装该库。
http://www.gnu.org/software/libiconv/ http://pan.baidu.com/s/1mgiMya0
# ./configure --prefix=/usr/local
# make
# make install
安装iconv后,需在/etc/ld.so.conf中加一行/usr/local/lib。然后运行/sbin/ldconfig,否则还是找不到libiconv库。
# make install
c) 删除原来的skyeye
进入skyeye源码目录,需要按照前面的安装路径”./configure -prefix=/usr/local”。
# make uninstall
d) 重新编译并安装skyeye
进入skyeye源码目录
# ./configure -prefix=/usr/local
修改Makefile中的所有gcc为/usr/local/gcc-4.2.1/bin/gcc
修改Makefile中的所有g++为/usr/local/gcc-4.2.1/bin/g++
# make lib
# make
# make install
#make install_lib
e) 运行linux s3c2440例程
# cd skyeye-testsuite-1.3.4_rc1/skyeye-testsuite/linux/s3c2440/2.6.14/
# skyeye -e vmlinux
# (skyeye) start
# (skyeye) run 这里键入run时还是没显示,但是会响应,直接键入然后回车
如下图所示,run后,可以运行s3c2440 linux,但还是在当前终端上显示输出信息。
修改该例程目录下的skyeye.conf文件,将uart:mod=stdio该为uart:mod=term后运行。如下图所示,改成term后就可以在新窗口中显示arm linux输出信息了,并且可以看到# (skyeye) run键入的信息了。
虽然能运行arm linux但在这个SHELL里不能输入信息,如上图提示的信息”cant’t access tty”。这个问题应该是由文件系统里面的配置文件导致的,不属于skyeye的问题,可以参考其它制作文件系统的文档重新制作文件系统再测试。经过测试,在term窗口不能输入的问题,在多次启动该arm linux后可以正常使用了。重新解压例程后,都可以正常使用了,估计是根CENTOS系统有关,说不定重启就会OK。