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文件吧(我也沒再仔細往下研究了,至少現在:) )。