转载地址:http://blog.csdn.net/chenvsa/article/details/7011562
要用的工具是:
1.skyeye
2.arm-elf-tools
3.ucos-ii4skyeye
1.在ubuntu中,如果源中有skyeye的话安装最简单,sudoapt-get installskyeye,这样安装的skyeye不是最新版本的(但是对个人学习应该也够了),如果想安装最新版本或源中没有skyeye也可以去官网下载源码,然后安装。如果是源码安装,需要解决一些依赖问题,这方面的帖子多的很。
2.arm-elf-tools是linux下arm的交叉编译器,是用来编译源文件的。在网上搜索很容易下载到,我下载的是arm-elf-tools-20030314.sh。切换到其所在目录,执行sudosh./arm-elf-tools-20030314.sh。安装会出现如下错误:tail:cannot open `+43' for reading: No such file or directory。
解决方法:编辑arm-elf-tools-20030314.sh文件,在39行将tail+${SKIP} ${SCRIPT} | gunzip | tar xvf -改为tail-n +${SKIP} ${SCRIPT} | gunzip | tar xvf -。再执行sudosh ./arm-elf-tools-20030314.sh。
又出现下述错误:gunzip:stdin: unexpected end offile,这是因为一旦编辑,甚至打开该文件,就需要在其最后加上一个空白行,否则它不会正常工作。用vi打开该文件按G移到文档末尾添加一个空白行,保存退出。再次执行:sudosh ./arm-elf-tools-20030314.sh。脚本执行结束后在/usr/bin下生成很多arm-elf-的程序。
3.同样,ucos-ii4skyeye可以从官网下载,或直接百度一搜就有很多。我下载的是tarzxfv ucosii4skyeye-1.9.3.tar.gz,将压缩包放到主文件夹下然后执行tarzxfv ucosii4skyeye-1.9.3.tar.gz。这样会在目录下产生一个
ucosii4skyeye的文件夹。
首先阅读一下该文件夹下的readme,得知在该文件夹下的samples文件夹下有几个程序,以其中的一个程序(ucos_test)为例,进入ucos_test文件夹,在该文件夹下有一个skyeye.conf,这个文件是skyeye模拟ucos时需要读取的配置文件,在第3.步会用到。
readme中的调试方法是对于源码安装skyeye来说的,假若我们是apt-get安装的话,只须略做调整,步骤如下:(同样适用于源码安装)
a.make cleanall
b.make config
c.make dep
d.make
在执行上面的b命令时会出现错误:
Ican not guess the host operation sysytem, please set OSTYPE variablein rules, make! or execute command export OSTYPE=linux-gnu in bashshell, if your host system is linux...
根据提示输入命令exportOSTYPE=linux-gnu
依次输入命令
make cleanall
export OSTYPE=linux-gnu
make config
make dep
make
假若此时还没安装arm-elf-tool的话会出错:arm-elf-gcc:command notfound。继续执行d命令,仍然会有错误,是说isdigit函数出错(具体描述忘了)。解决方法:在ucosii4skyeye/lib/文件夹中有一个文件skyeye_printf.c,顾名思义这是输出函数的实现文件,编辑该文件自己加入isdigit函数,函数如下:
staticint isdigit(char ch)
{
if(ch >= '0' && ch <= '9')
return1;
return0;
}
再把最上方的#include<ctype.h>注释掉,因为这个头文件用到了系统的isdigit函数导致编译出错。保存退出。
再从a命令开始重新执行一次,完成后,在该目录下应该会生成了一些.o的文件还有一个ucos_test.elf文件,这个文件是要用skyeye运行的。
至此全部的编译工作完成了,
4.接下来就是用skyeye运行elf模拟uc系统实现程序实例,回到/ucos-ii4skyeye/samples/ucos_test/目录下,命令行执行:skyeye-c skyeye.conf -e ucos_test.elf,其中-c和-e选项应该很好理解。这里出现如下错误,
Your elf file is little endian.
arch: arm
cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0
mach info: name at91, mach_init addr 0x805f8c0
Unkonw option: mem_num
uart_mod:0, desc_in:, desc_out:, converter:
skyeye_read_config: config file skyeye.conf have errors!
将skyeye.conf中的 mem_num: 7 注释掉可运行成功
注:在readme中是说用make test来执行elf,make test实际上就相当与skyeyeucos_test.elf。这样运行对于我们用apt装的skyeye来说会出现如下错误:
SKYEYE:Errorin mem_read_word, no bank found, NumInstrs 1, mem_read_word addr = 0no bank
SKYEYE:Error in mem_read_word, no bank found, NumInstrs 1,mem_read_word addr = 4 no bank
SKYEYE:Error in mem_read_word, nobank found, NumInstrs 1, mem_read_word addr = 8 no bank。。。。。。
错误原因就是没有指明skyeye.conf配置文件,大家可以cat下该文件就知道了。