SkyEye

SkyEye

SkyEye是一個開源軟體(OpenSource Software)項目,中文名字是"天目"。SkyEye的目標是在通用的Linux和Windows平台上實現一個純軟體集成開發環境,模擬常見的嵌入式計算機系統(這裡假定"仿真"和"模擬"的意思基本相同);可在SkyEye上運行μCLinux以及μC/OS-II等多種嵌入式作業系統和各種系統軟體(如TCP/IP,圖形子系統,檔案子系統等),並可對它們進行源碼級的分析和測試。是一款非常實用的軟體。

項目簡介

SkyEye是一個指令級模擬器,可以模擬多種嵌入式開發板,可支持多種CPU指令集,在SkyEye上運行的作業系統意識不到它是在一個虛擬的環 境中運行,而且開發人員可以通過SkyEye調試作業系統和系統軟體。由於SkyEye的目標不是驗證硬體邏輯,而是協助開發、調試和學習系統軟體,所以 在實現上SkyEye與真實的硬體環境相比還是有一定差別的。SkyEye在時鐘節拍的時序上不保證與硬體完全相同,對軟體透明的一些硬體仿真進行了一定 的簡化。這樣帶來的好處是SkyEye的執行效率更高。

發展歷程

背景

如果你看過電影"黑客帝國"(又稱"matrix"),相信電影描述的虛幻世界會深深地吸引你,至少它是我們看過最有想像力的科幻電影之一。也許我們可以把SkyEye看作一個"matrix ",把運行在SkyEye上的各種程式看成是這個"matrix"中的芸芸眾生。我們創造SkyEye和編寫運行在SkyEye上運行的程式就是為了洞悉計算機的奧秘,嘗嘗當"造物主"的感覺。當看到各種軟體Linux、μCLinux、μC/OS-II...在SkyEye上"愉快"地運行時,那種感覺真是太奇妙了。 對於那些想進行嵌入式系統軟體開發和學習,或者想研究嵌入式Linux等作業系統和一些底層系統軟體(如TCP/IP等)的研究和開發人員來說,可能存在如下幾方面的問題:

(1)經常苦於經費不足,缺少足夠的硬體開發板和完善的軟體開發環境,相關的書籍對一些最新軟體的分析還不夠全面,無法深入研究和開發嵌入式軟體。

(2)高層次的軟體設計和開發一般不用太考慮底層硬體的實現細節,如果直接處於一個具體的硬體環境下,在開發和研究中可能會陷入硬體的具體細節中不能自拔,而不能把精力放到高層次的軟體設計和開發上。

(3)如果硬體開發環境不太穩定(這種情況經常見到),且對具體的硬體不是很了解,則可能在排除問題上花費大量的不必要的時間。

(4)如果你想自己嘗試設計一個作業系統,則先在一個提供源碼級調試的軟體仿真器上進行開發,可能會大大提高你的開發進度。

對於想了解、學習一般作業系統的實現原理,Linux/μCLinux作業系統或TCP/IP等系統級軟體的實現的人員,目前一般採用的方法是看書和讀原始碼,這是一種靜態的學習方法,效率較低,比較枯燥,缺少親自實踐的感覺。要想深入分析和開發軟體,就要動手編程,不能只是看看書,讀讀代碼,只有通過親手實踐才能夠掌握軟體設計的核心內容。上面所指出的問題和需求促使SkyEye項目的誕生。

起源和發展

2002年11月,一個偶然的機會,一群作業系統的愛好者在網上進行聊天,成立了一個TM-Linux興趣小組,希望要做一些感興趣的事情。當時在清華大學計算機系做博士後的陳渝提出做一個用軟體實現的嵌入式開發板硬體模擬器,可以在模擬器上運行各種作業系統,這樣就可以在沒有開發板的情況下學習和研究作業系統。一開始就陳渝一人做,首先他了解了當前國際上的一些類似的項目,發現著名的μCLinux組織實現了一個armulator模擬器軟體(在Linux系統上運行),可以模擬Ateml AT91(基於ARM7TDMI CPU)開發板,μCLinux可以armulator上運行。於是陳渝以此為基點,借鑑armulator的實現,提出了SkyEye項目,其目標是讓SkyEye仿真多種主流的嵌入式開發板和外設,實現一個可擴展的硬體模擬框架,讓更多的嵌入式作業系統可以在SkyEye上運行。SkyEye項目於2002年12月1日正式建立後,陳渝完成的第一件工作是把armulator移植到了cygwin/windows環境下,其成果被μCLinux組織接收。接下來清華大學計算機系碩士生李明加入到SkyEye的開發中,8天后,SkyEye的第一個版本推出,再過了4天,μC/OS-II for SkyEye推出。在這期間,SkyEye的網站也建立起來了。緊接著,楊曄、王利明、尹首一等在校學生也加入到SkyEye的開發中,給SkyEye帶來了新的活力,SkyEye進入了新的發展階段,目前通過訪問SkyEye的網站和在linux公社上的SkyEye論壇可以了解到SkyEye的最新進展並對有關嵌入式系統開發方面的問題進行交流,還可以下載最新的SkyEye相關軟體和文檔。

目標和意義

純軟體的模擬器有許多種,如模擬一個晶片時序邏輯的模擬器、只模擬CPU指令的模擬器、模擬整個硬體開發板的模擬器、模擬一個PDA的模擬器等。存在一些純軟體的仿真器或模擬器,如Stanford大學的SimOS模擬器,它仿真的是MIPS系列CPU和相關外設,可以在其上運行SGI公司的Irix作業系統和軟體,目前基本上停止了進一步的開發;PSIM是一個仿真PowerPC指令集的模擬器,目前只支持簡單的命令行應用程式;xcopilot是一個PDA模擬器,它是由Greg Hewgill出於個人喜好編寫的,它仿真的是M68K CPU,通過它可以給基於PalmOS的軟體開發者提供一個模擬開發環境。Bochs是一個仿真x86 CPU的開源項目,目前還支持AMD64 CPU,在它上面可以運行Linux作業系統。其它一些商業的仿真軟體如vmware和virtualPC可以仿真一個真實的x86計算機,而Virtutech Simics仿真器可以仿真多種CPU和硬體,功能強大,可用於硬體和系統軟體的評測。

SkyEye的推出具有下面三方面的意義:

(1) 通過SkyEye仿真集成環境可以很方便地進入到嵌入式系統軟體學習和開發的廣闊天地中。尤其對於缺少嵌入式硬體開發環境和軟體開發環境的用戶來說,它將是一個非常有效的學習工具和開發手段,因為SkyEye的整個軟體系統都是Open Source的,且基於GPL協定(μCOS-II除外)。因此,如果要學習Linux作業系統或者進行嵌入式系統開發,但苦於沒有硬體支持,SkyEye仿真環境軟體是一個很好的選擇!

(2) 如果想研究與具體硬體無關的系統軟體(如TCP/IP協定棧等),採用SkyEye可以有效地提高工作效率,因為你可以直接在μCOS-II和μCLinux for SkyEye上進行開發和調試,而與具體硬體打交道的各種driver已經存在,且有源碼級調試環境,只需關心高層的邏輯設計和實現就可以了。

(3) SkyEye本身作為一個開放式的項目體系,可以劃分為多個獨立的子項目系統。通過參與SkyEye的各個子項目,與大家共同交流、協作,可以進一步學習、分析、精通Linux核心,掌握ARM嵌入式CPU編程。

在32位嵌入式CPU領域中,ARM系列CPU所占比重很大,而ARM7TDMI是其中最廣泛的一種ARM CPU核,因此SkyEye首先選擇了ARM7TDMI作為仿真的目標CPU核,當然將來SkyEye會支持更多種類的CPU。目前在SkyEye上可運行並進行源碼級調試ARM Linux、μCLinux、μC/OS-II作業系統和LwIP(一個著名的嵌入式TCP/IP實現)、MiniGUI(一個著名的嵌入式GUI系統)等系統軟體。SkyEye可用於學習,分析,開發這些系統軟體的實現,了解ARM嵌入式CPU編程。而這一切都可在一個純軟體的環境中完成。通過分析SkyEye本身實現,系統軟體開發人員對ARM,8019as(NE2000兼容)乙太網絡晶片等硬體的了解也會更深入。

SkyEye並不能取代開發板等硬體的功能,但通過它可以比較容易進入到嵌入式軟體的廣闊天地中。由於SkyEye建立在GDB基礎之上,使用者可以方便地使用GDB提供的各種調試手段對SkyEye仿真系統上的軟體進行源碼級的調試,還可以進行各種分析,如執行熱點分析、程式執行覆蓋度分析等。由於SkyEye提供了原始碼和相關文檔,有經驗的用戶完全可以修改和擴充SkyEye來滿足自己的需求。

模擬硬體

目前SkyEye模擬了大量的硬體,包括CPU核心、存儲器、存儲器管理單元、快取單元、串口、網路晶片、時鐘等。下面做一簡單介紹。

CPU和開發板系列

目前SkyEye可以模擬的CPU主要是基於ARM核心的CPU,包括ARM7TDMI,ARM720T,ARM9TDMI,ARM9xx,ARM10xx,StrongARM,XScale等。ARM7/9/10TDMI是ARM系列CPU的基本核心部分,它們不支持MMU/CACHE和一些擴展指令,是ARM CPU基本核。ARM720T、ARM920T、ARM10xx、StrongARM、Xscale是建立在以上ARM CPU核上,並擴展了MMU/CACHE和其它功能。各硬體開發公司可以根據它們的需求在上述CPU核上加上特定的擴展,形成基於各種ARM基本核心的特定CPU,如Atmel91X40和 ep7312,分別擴展了ARM7TDMI和ARM720T的記憶體控制和各種I/O控制器,簡化了開發板的邏輯設計,大大增強了開發板的功能。

目前SkyEye模擬的開發板包括基於Atmel 91X40/AT91RM92 CPU的開發板,基於Crirus Logic ep7312的開發板、基於StrongARM CPU的ADSBITSY開發板,基於XScale PXA250 CPU的LUBBOCK開發板、基於SAMSUNG S3C4510B/S3C44B0 CPU的開發板、基於SHARP LH7A400 CPU的開發板、基於Philip LPC22xx CPU的開發板等。主要模擬了對應各個開發板的串口、時鐘、RAM、ROM、LCD、網路晶片等硬體外設。

存儲器管理單元和快取單元

MMU(Memory Management Unit)即存儲器管理單元,是用來管理虛擬記憶體系統的硬體。MMU的兩個主要功能是:將虛地址轉換成物理地址;控制存儲器的存取許可權。MMU關掉時,虛地址直接輸出到物理地址匯流排。MMU本身有少量存儲空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(Translation Lookaside Buffers)。TLB表中保存的是虛址及其對應的物理地址,許可權,域和映射類型。當CPU對一虛擬地址進行存取時,首先搜尋TLB表以查找對應的物理地址等信息,如果沒有查到,則進行查找translation table,稱為Translation Table Walk(簡稱TTW)。經過TTW過程後,將查到的信息保存到TLB。然後根據TLB表項的物理地址進行讀寫。CACHE是快取單元,主要用於快取記憶體中的數據,其讀寫速度遠快於記憶體的讀寫速度,所以可以提高CPU的記憶體數據的訪問效率。

write/read buffer硬體單元的作用與CACHE的作用類似。MMU、CACHE、write/read buffer一般是高性能CPU的重要組成部分,且不同類型CPU的MMU、CACHE、write/read buffer的邏輯行為也有一定的差異。為了支持模擬多種類型CPU的MMU/CACHE,SkyEye包含了一個通用的MMU/CACHE模擬實現。通過對一些參數的調整可以支持模擬多種類型的MMU/CACHE物理結構和邏輯行為。

網路晶片

目前SkyEye模擬了網路晶片8019AS,其特點是:NE2000兼容,內建 16KRAM緩衝區,10MB傳輸速率。雖然目前模擬的開發板上不一定有網路晶片8019AS,但我們可以在我們模擬的開發板上加上網路晶片8019AS的模擬。這樣再加上在不同作業系統上的8019AS驅動程式,就可以方便地完成各種網路套用的開發和設計。目前已經在在基於Atmel91X40 CPU的開發板上實現了網路晶片8019AS擴展,並增加了μC/OS-II和μClinux的網路驅動程式,已經支持大量的網路應用程式,如LwIP (一個TCP/IP協定棧實現)、nfs server/clinet、http server/client、telnet server/client、ftp server/client等。

設計實現

設計原則

SkyEye軟體的核心在目標模擬模組。為了提高模擬效率,且能夠模擬更多的CPU、開發板和各種外設,方便開發人員進行開發和學習,SkyEye遵循如下的設計原則:

(1) 用C語言編程,採用面向對象的方式定義各種要模擬的硬體;

(2)定義抽象模擬硬體對象,最大化重用代碼;

(3) 定義硬體配置腳本,使得不用改動SkyEye代碼就可以靈活地調整各種硬體配置;

(4)保持與GDB上層接口的一致性,這樣可充分利用GDB強大的原始碼級調試功能。

總體結構

SkyEye基於GDB/ARMulator(目前由David McCullough 維護),並進行了全面的改變和擴展。SkyEye建立在GNU GDB的底層,可以模仿多種完整的嵌入式計算機系統,目前模擬的硬體包括CPU、記憶體、I/O暫存器、時鐘、UART、網路晶片、MMU、CACHE,將來還會模擬 LCD、USB等各種硬體。在SkyEye上運行的作業系統和各種系統軟體"意識"不到它們是在一個虛擬的計算機系統上運行。

SkyEye從總體上分為四個層次:

(1)用戶接口模組:包括命令行用戶界面和圖形用戶界面,完成處理用戶的輸入命令,並把相關調試數據輸出給用戶的任務。這一部分基本上直接利用了GDB的用戶接口模組,並在此基礎上有一定的擴充。

(2)符號處理模組:主要處理執行檔案的頭信息,解釋執行檔案中內嵌的debuger調試信息,對符號表的管理,對原始碼表達式的解析,定位原始碼中的語句位置和機器碼的位置關係等。這一部分也是直接利用了GDB的符號處理模組,也正是有了這個模組的支持,SkyEye可以支持源碼級調試。

(3)目標控制模組:主要完成執行控制(如中斷程式的執行,設定中斷條件等),程式棧結構分析,對具體目標硬體的控制(如本地調試、遠程調試和模擬調試的控制)。這一部分完成對SkyEye上運行的軟體的控制,提供了多種調試手段。

(4)目標模擬模組:這一部分是SkyEye的核心。它的功能是模仿計算機系統中的主要硬體(包括CPU、記憶體和各種硬體外設等)的執行,對執行檔案的機器指令進行解釋,並模擬執行每一條機器指令,產生相應的硬體回響等。

相關詞條

相關搜尋

熱門詞條

聯絡我們