一.SkyEye介紹 1.SkyEye的起源和發展 2002年11月,一個偶然的機會,一群操作系統的愛好者在網上進行聊天,成立了一個TM-Linux興趣小組,希望要做一些感興趣的事情。當時在清華大學計算機系做博士後的陳渝提出做一個用軟件實現的嵌入式開發板硬件模擬器,可以在模擬器上運行各種操作系統,這樣就可以在沒有開發板的情況下學習和研究操作系統。一開始就陳渝一人做,首先他了解了當前國際上的一些類似的項目,發現著名的μCLinux組織實現了一個armulator模擬器軟件(在Linux系統上運行),可以模擬Ateml AT91(基於ARM7TDMI CPU)開發板,μCLinux可以在armulator(其網址為http://www.UClinux.org/pub/uCLinux/utilities/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的網站(http://www.skyeye.org/)和在linux公社上的SkyEye論壇(http://www.linuxfans.org)可以了解到SkyEye的最新進展並對有關嵌入式系統開發方面的問題進行交流,還可以到http://gro.clinux.org/projects/skyeye/ 下載最新的SkyEye相關軟件和文檔。 2.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項目的誕生。 3.SkyEye的目標和意義 SkyEye是一個開源軟件(OpenSource Software)項目,中文名字是"天目"。SkyEye的目標是在通用的Linux和Windows平台上實現一個純軟件集成開發環境,模擬常見的嵌入式計算機系統(這裡假定"仿真"和"模擬"的意思基本相同);可在SkyEye上運行μCLinux以及μC/OS-II等多種嵌入式操作系統和各種系統軟件(如TCP/IP,圖形子系統,文件子系統等),並可對它們進行源碼級的分析和測試。 純軟件的模擬器有許多種,如模擬一個芯片時序邏輯的模擬器、只模擬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是一個指令級模擬器,可以模擬多種嵌入式開發板,可支持多種CPU指令集,在SkyEye上運行的操作系統意識不到它是在一個虛擬的環境中運行,而且開發人員可以通過SkyEye調試操作系統和系統軟件。由於SkyEye的目標不是驗證硬件邏輯,而是協助開發、調試和學習系統軟件,所以在實現上SkyEye與真實的硬件環境相比還是有一定差別的。SkyEye在時鐘節拍的時序上不保證與硬件完全相同,對軟件透明的一些硬件仿真進行了一定的簡化。這樣帶來的好處是SkyEye的執行效率更高。SkyEye的推出具有下面三方面的意義: 通過SkyEye仿真集成環境可以很方便地進入到嵌入式系統軟件學習和開發的廣闊天地中。尤其對於缺少嵌入式硬件開發環境和軟件開發環境的用戶來說,它將是一個非常有效的學習工具和開發手段,因為SkyEye的整個軟件系統都是Open Source的,且基於GPL協議(μCOS-II除外)。因此,如果要學習Linux操作系統或者進行嵌入式系統開發,但苦於沒有硬件支持,SkyEye仿真環境軟件是一個很好的選擇! 如果想研究與具體硬件無關的系統軟件(如TCP/IP協議棧等),采用SkyEye可以有效地提高工作效率,因為你可以直接在μCOS-II和μCLinux for SkyEye上進行開發和調試,而與具體硬件打交道的各種driver已經存在,且有源碼級調試環境,只需關心高層的邏輯設計和實現就可以了。 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模擬硬件介紹 目前SkyEye模擬了大量的硬件,包括CPU內核、存儲器、存儲器管理單元、緩存單元、串口、網絡芯片、時鐘等。下面做一簡單介紹。 1.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、網絡芯片等硬件外設。 2.存儲器管理單元和緩存單元 MMU(Memory Management Unit)即存儲器管理單元,是用來管理虛擬內存系統的硬件。MMU的兩個主要功能是:將虛地址轉換成物理地址;控制存儲器的存取權限。MMU關掉時,虛地址直接輸出到物理地址總線。MMU本身有少量存儲空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(Translation Lookaside Buffers)。TLB表中保存的是虛址及其對應的物理地址,權限,域和映射類型。當CPU對一虛擬地址進行存取時,首先搜索TLB表以查找對應的物理地址等信息,如果沒有查到,則進行查找translation table,稱為Translation Table Walk(