SkyEye(一種軟體模擬的系統開發平臺)

lp2001lp發表於2006-03-07

一.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(簡稱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物理結構和邏輯行為。

3.網路晶片

目前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的設計實現

1.SkyEye設計原則

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

  • 用C語言程式設計,採用物件導向的方式定義各種要模擬的硬體;
  • 定義抽象模擬硬體物件,最大化重用程式碼;
  • 定義硬體配置指令碼,使得不用改動SkyEye程式碼就可以靈活地調整各種硬體配置;

保持與GDB上層介面的一致性,這樣可充分利用GDB強大的原始碼級除錯功能。

2.SkyEye的總體結構

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

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

  • 使用者介面模組:包括命令列使用者介面和圖形使用者介面,完成處理使用者的輸入命令,並把相關除錯資料輸出給使用者的任務。這一部分基本上直接利用了GDB的使用者介面模組,並在此基礎上有一定的擴充。
  • 符號處理模組:主要處理執行檔案的頭資訊,解釋執行檔案中內嵌的debuger除錯資訊,對符號表的管理,對原始碼表示式的解析,定位原始碼中的語句位置和機器碼的位置關係等。這一部分也是直接利用了GDB的符號處理模組,也正是有了這個模組的支援,SkyEye可以支援原始碼級除錯。
  • 目標控制模組:主要完成執行控制(如中斷程式的執行,設定中斷條件等),程式棧結構分析,對具體目標硬體的控制(如本地除錯、遠端除錯和模擬除錯的控制)。這一部分完成對SkyEye上執行的軟體的控制,提供了多種除錯手段。
  • 目標模擬模組:這一部分是SkyEye的核心。它的功能是模仿計算機系統中的主要硬體(包括CPU、記憶體和各種硬體外設等)的執行,對執行檔案的機器指令進行解釋,並模擬執行每一條機器指令,產生相應的硬體響應等。

參考資料

相關文章