Skyeye交叉编译环境的下载及安装这里有比较详细的介绍:www.skyeye.org。下面以一个例子来分析这个open source的交叉编译工具。下载ucosii for AT91,在Skyeye这个编译环境下编译以ucosii内核及基于ucosii的application .我们来看看ucosii_test工程目录下的makefile文件.从makefile文件里关键的字样有:$(SAMPLE_DIR)\$(KERNEL_DIR)\$(ARCH_DIR)\$(LIB_DIR)\$(OS_DIR) 这些直接和编译环境有关,可以在当前makefile里找不到啊?别急,看看开始:include ../dir.make ,看到这个就明白了吧。好,看看上父目录下的dir.make文件吧。
# define some directory information of whole project
ROOT_DIR = ../..
ARCH_DIR = $(ROOT_DIR)/arch/atmel-arch
LIB_DIR = $(ROOT_DIR)/lib
KERNEL_DIR = $(ROOT_DIR)/kernel
SAMPLE_DIR = $(ROOT_DIR)/samples
# these three files are needed when test all samples
CFG_FILE = $(SAMPLE_DIR)/compiler.conf
LDS_FILE = $(SAMPLE_DIR)/samples.lds
MAP_FILE = $(PRJ_DIR)/memmap.conf
DEP_FILES = $(CFG_FILE) $(MAP_FILE) $(LDS_FILE)
这里就是ucosii目录里所有基于skyeye交叉编译环境的全部和基本配置了。
恩,到在这里,我们可以明确很多东西,这些又利于加深我们对概念的理解,总结一下:1.skyeye是一个模拟硬件平台,为ARM内核提供硬件支持。2. 你一定记得下载的工具中有arm-elf-tools,这个东西就是交叉编译工具,它产生我们需要的.elf文件,这个文件在skyeye上仿真,让我们能够模拟软件在ARM内核上跑起来的感觉(爽!)。所谓交叉编译,就是这个意思。
好,我们在进一步。硬件平台是skyeye,我们在使用它的默认配置时,(你当然可以修改它的配置,请看相关资料)不妨认为它对我们是透明的,这无论在硬件设计还是在软件设计上都是一个基本原则。想想,ucosii_test要跑起来,我们硬件环境有了,还需要什么?当然是ucosii内核,和我们自己的application!( 不是废话哦:))。打开ucosii工程的头文件,你一定奇怪,怎么看不到内核相关文件哪?这些个信息都包含在makefile里了。你可以回去看看makefile。(那个kernel字样很显眼的)。好,必须的“系统环境“我们已经有了。下面我们该看看main_entry.c的代码了,看看它是如何模拟的。代码很简单吧。我们这里关心的是它是why ,而不是how。skyeye_printf()这里函数看到了吧。看到skyeye字眼就又意思了。这里调用了和依赖的模拟平台有关的东东。恩,打开skysys_stdio.c看到skysys_printf()的实现,继续往下看,不难发现skyeye_printf()真正调用的是AT91(这是我们现在的硬件环境)的异步串口通讯来实现字符的输入、输出。我们当然会继续问:这些输入、输出又是由谁来实现的呢?其实我们如果是写基于硬件平台的软件,那么到这里也就ok了。如果非要继续往下看,那么去看看skyeye的include/lib文件吧(我也没再仔细往下研究了,至少现在:) )。