嵌入式仿真環(huán)境SkyEye介紹
綜述開放源碼的嵌入式仿真環(huán)境SkyEye:介紹SkyEye的背景、目標(biāo)和存在的意義,對(duì)目前SkyEye本身進(jìn)行簡(jiǎn)要的技術(shù)分析;介紹SkyEye上已經(jīng)移植成功的操作系統(tǒng)和典型應(yīng)用。講述SkyEye正在開展的工作和將來的發(fā)展計(jì)劃。
本文引用地址:http://m.butianyuan.cn/article/80155.htm1 SkyEye的目標(biāo)與意義
1.1 SkyEye產(chǎn)生的背景
操作系統(tǒng)是軟件產(chǎn)業(yè)的基礎(chǔ)和龍頭,能左右軟件產(chǎn)業(yè)發(fā)展的方向,是世界軟件產(chǎn)業(yè)最大的利潤(rùn)來源。對(duì)于后PC時(shí)代和普適計(jì)算(pervasive computing)而言,嵌入式系統(tǒng)無處不在,其中關(guān)鍵的軟件核心技術(shù)包括嵌入式操作系統(tǒng)和網(wǎng)絡(luò)互聯(lián)中間件等。
對(duì)于想進(jìn)行嵌入式系統(tǒng)軟件開發(fā)和學(xué)習(xí),或者想研究嵌入式Linux等操作系統(tǒng)和一些底層系統(tǒng)軟件(如TCP/IP等)的研究和開發(fā)人員來說,可能存在如下幾方面的問題:
?、俳?jīng)??嘤诮?jīng)費(fèi)不足,缺少足夠的硬件開發(fā)板和完善的軟件開發(fā)環(huán)境;相關(guān)的書籍對(duì)一些最新軟件的分析還不夠全面,無法深研究和開發(fā)嵌入式軟件。
?、诟邔哟蔚能浖O(shè)計(jì)和開發(fā)一般不用過多考慮底層硬件的實(shí)現(xiàn)細(xì)節(jié),如果直接處于一具體的硬件環(huán)境下,在開發(fā)和研究中可能會(huì)陷入硬件的具體細(xì)節(jié)中不能自拔,而不能把精力放到高層次的軟件設(shè)計(jì)和開發(fā)上。③如果硬件開發(fā)環(huán)境不太穩(wěn)定(這種情況經(jīng)常見到),且對(duì)身體的硬件不是很了解,則可能在排除問題上花費(fèi)大量不必要的時(shí)間。
對(duì)于想了解、學(xué)習(xí)一般操作系統(tǒng)的實(shí)現(xiàn)原理、Linux/μClinux操作系統(tǒng)或TCP/IP等系統(tǒng)級(jí)軟件的實(shí)現(xiàn)的人員,目前一般采用的方法是看書和讀源代碼。這是一種靜態(tài)的學(xué)習(xí)方法,但效率較低,比較枯燥,缺少一種動(dòng)態(tài)和親自實(shí)踐的感覺。要想深入分析和開發(fā)軟件,就要?jiǎng)邮志幊?,不能只是看看書,讀讀代碼,只有通過親手實(shí)踐才能夠掌握軟件設(shè)計(jì)的核心內(nèi)容。
上面所指出的問題和需求促使了SkyEye項(xiàng)目的誕生。
1.2 SkyEye的目標(biāo)和意義
SkyEye是開源軟件(OpenSource Software)項(xiàng)目,中文名字是“天目”。SkyEye的目標(biāo)是在通用的Linux和Windows平臺(tái)實(shí)現(xiàn)一個(gè)仿真集成開發(fā)環(huán)境,模擬常見的嵌入式計(jì)算機(jī)系統(tǒng);可在SkyEye上運(yùn)行μClinux以及μC/OS-II等多種嵌入式操作系統(tǒng)和各種系統(tǒng)軟件(如TCP/IP、圖形子系統(tǒng)、文件子系統(tǒng)等),并可對(duì)它們進(jìn)行源碼級(jí)的分析和測(cè)試。SkyEye的推出具有下面三方面的意義。
①通過SkyEye仿真集成環(huán)境可以很方便地進(jìn)入嵌入式系統(tǒng)軟件學(xué)習(xí)和開發(fā)的廣闊天地中。尤其對(duì)于缺少嵌入式硬件開發(fā)環(huán)境和軟件開發(fā)環(huán)境的用戶來說,它將是一個(gè)非常有效的學(xué)習(xí)工具和開發(fā)手段,因?yàn)镾kyEye的整個(gè)軟件系統(tǒng)都是Open Source的,且基于GPL協(xié)議(μC/OS-II除外)。因此,如果要學(xué)習(xí)Linux操作系統(tǒng)或者進(jìn)行嵌入式系統(tǒng)開發(fā),但苦于沒有硬件支持,SkyEye仿真環(huán)境軟件是一個(gè)很好的選擇!
?、谌绻胙芯颗c具體硬件無關(guān)的系統(tǒng)軟件(如TCP/IP協(xié)議棧等),采用SkyEye可以有效地提高工作效率,因?yàn)槟憧梢灾苯釉?mu;COS-II和μClinux for SkyEye上進(jìn)行開發(fā)和調(diào)試,而與具體硬件打交道的各種Driver已經(jīng)存在,且有源碼級(jí)調(diào)試環(huán)境,只需關(guān)心高層的邏輯設(shè)計(jì)和實(shí)現(xiàn)就可以了。
?、跾kyEye本身作為一個(gè)開放式的項(xiàng)目體系,可以劃分為多個(gè)獨(dú)立的子項(xiàng)目系統(tǒng)。通過參與SkyEye的各個(gè)子項(xiàng)目,與大家共同交流、協(xié)議,可以進(jìn)一步學(xué)習(xí)、分析、精通Linux內(nèi)核,掌握ARM嵌入式CPU編程。
在32位嵌入式CPU領(lǐng)域中,ARM系列CPU所占比例相當(dāng)大,而ARM7TDMI是其中使用最廣泛的CPU之一,因此,SkyEye首先選擇了ARM7TDMI作為仿真的目標(biāo)CPU。目前,SkyEye上可運(yùn)行并進(jìn)行源碼級(jí)調(diào)試的有μClinux、μC/OS-II操作系統(tǒng)和LwIP(一個(gè)著名的嵌入式TCP/IP實(shí)現(xiàn))、ARM Linux等系統(tǒng)軟件。SkyEye可用于學(xué)習(xí)、分析、開發(fā)這些系統(tǒng)軟件,了解ARM嵌入式CPU編程,而這一切都可在一個(gè)集成環(huán)境中完成。如果能夠改進(jìn)SkyEye本身,則大家對(duì)ARM、8019Ethernet網(wǎng)絡(luò)芯片等硬件的了解也會(huì)更深入。
SkyEye并不能完全取代開發(fā)板等硬件的功能,但通過它可以比較容易地進(jìn)入到嵌入式軟件開發(fā)的廣闊天地中。由于SkyEye建立在GDB基礎(chǔ)之上,使用者可以方便地使用GDB提供的各種調(diào)試手段對(duì)SkyEye仿真系統(tǒng)上的軟件進(jìn)行源碼級(jí)的調(diào)試,還可以進(jìn)行各種分析,如執(zhí)行點(diǎn)分析、程序執(zhí)行覆蓋度分析等。由于SkyEye提供了源代碼和相關(guān)文檔,有經(jīng)驗(yàn)的用戶完全可以修改和擴(kuò)展SkyEye來滿足自已的需求。
2 SkyEye的技術(shù)分析
2.1 SkyEye總體結(jié)構(gòu)
SkyEye基于GDB/ARMulator,模仿了一個(gè)完整的嵌入式系統(tǒng),目前包括CPU、內(nèi)存、I/O寄存器、時(shí)鐘、UART、網(wǎng)絡(luò)芯片、MMU、Cache,將來還會(huì)仿真LCD、USB等各種硬件。在SkyEye上運(yùn)行的操作系統(tǒng)和各種系統(tǒng)軟件“意識(shí)”不到它們是在一個(gè)虛擬的計(jì)算機(jī)系統(tǒng)上運(yùn)行。
SkyEye從總體上分為四個(gè)層次:
?、儆脩艚涌谀K:包括命令行用戶界面和圖形用戶界面,及時(shí)處理用戶的輸入命令,并把相關(guān)調(diào)試數(shù)據(jù)輸出給用戶。
②符號(hào)處理模塊:主要處理執(zhí)行文件的頭信息,解釋執(zhí)行文件中嵌的debuger調(diào)試信息,管理符號(hào)表,解析源代碼表達(dá)式,定位源代碼中的語句位置和機(jī)器碼的位置關(guān)系等。
?、勰繕?biāo)控制模塊:主要完成執(zhí)行控制(如執(zhí)行斷程序,設(shè)置中斷條件等),程序棧結(jié)構(gòu)分析,對(duì)具體目標(biāo)硬件的控制(如本地調(diào)試、遠(yuǎn)程調(diào)試和仿真調(diào)試的控制)。
?、苣繕?biāo)仿真模塊:主要是模仿計(jì)算機(jī)系統(tǒng)中的主要硬件(包括CPU、內(nèi)存和各種硬件外設(shè)等)的執(zhí)行,對(duì)執(zhí)行文件的機(jī)器指令進(jìn)行解釋,并仿真執(zhí)行每一條機(jī)器指令,產(chǎn)生相應(yīng)的硬件響應(yīng)。
2.2 SkyEye模擬的硬件介紹
目前,SkyEye仿真的CPU包含不帶MMU的AT91X40和帶MMU的ARM720T,它們都是基于ARM7TDMI CPU內(nèi)核的。SkyEye還模擬了其它硬件外設(shè),如串口、網(wǎng)絡(luò)芯片、內(nèi)存、時(shí)鐘、網(wǎng)絡(luò)HUB等。SkyEye的CPU仿真主要完成對(duì)ARM指令集處理、寄存器操作和CPU流水線處理等的仿真。
ARM720T具有MMU(Memory Management Unit),即存儲(chǔ)器管理單元,是用來管理虛擬內(nèi)存系統(tǒng)的操作。MMU的兩具主要功能是:
*將虛地址轉(zhuǎn)換成物理地址;
*控制存儲(chǔ)器存取允許,MMU關(guān)掉時(shí),虛地址直接輸出到物理地址總線。
MMU本身有少量存儲(chǔ)空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(Translation Lookaside Buffers)。TLB表中保存的是虛地址及其對(duì)應(yīng)的物理地址、權(quán)限、域和映射類型。當(dāng)CPU對(duì)一虛擬地址進(jìn)行存取時(shí),首先搜索TLB表以查找對(duì)應(yīng)的物理地址等信息。如果沒有查到,則進(jìn)行查找Translation Table,稱為TTW(Translation Table Walk)。經(jīng)過TTW后,將查到的信息保存到TLB,然后根據(jù)TLB表項(xiàng)的物理地址進(jìn)行讀寫。
MMU/Cache的仿真主要是依據(jù)ARM720T處理器的體系結(jié)構(gòu)進(jìn)行的。ARM720T可以看成ARM7TDMI加上MMU/Cache模塊,主要是仿真控制MMU/Cache的寄存器結(jié)構(gòu)、TLB結(jié)構(gòu)、Cache結(jié)構(gòu)、Translation Table Walk的控制邏輯以及在此基礎(chǔ)上內(nèi)存的讀取操作。
對(duì)于網(wǎng)絡(luò)部分,SkyEye仿真的是兼容NE2000的8019as以太網(wǎng)網(wǎng)絡(luò)芯片,支持8位數(shù)據(jù)通路,仿真實(shí)現(xiàn)了遠(yuǎn)程DMA信道和本地DMA信道兩個(gè)部分。本地DMA完成控制器與仿真網(wǎng)絡(luò)的數(shù)據(jù)交換,主處理器(Host)收發(fā)數(shù)據(jù)只需對(duì)遠(yuǎn)程DMA操作。當(dāng)主處理器要向以太網(wǎng)絡(luò)發(fā)送數(shù)據(jù)時(shí),先將一幀(frame)數(shù)據(jù)經(jīng)過遠(yuǎn)程DMA信道,送到以太網(wǎng)絡(luò)控制器中發(fā)送緩存(Ring Buffer),然后發(fā)出傳送命令。以太網(wǎng)絡(luò)控制器在送出前一幀的數(shù)據(jù)后,繼布完成此幀的發(fā)送。以太網(wǎng)絡(luò)控制器接收到的數(shù)據(jù)通過MAC比較后,由FIFO存到接收緩沖區(qū),收滿1幀后,以中斷或緩存器標(biāo)志的方式通知主處理器。
為了有效支持網(wǎng)絡(luò)仿真,SkyEye還設(shè)計(jì)了一個(gè)虛擬HUB-vnet,可以在一臺(tái)Host主機(jī)上支持多個(gè)在SkyEye上運(yùn)行的OS實(shí)例進(jìn)行網(wǎng)絡(luò)的通信互聯(lián),從而更有助于針對(duì)網(wǎng)絡(luò)方面的開發(fā)和研究。
3 SkyEye上已經(jīng)移植成功的OS
3.1 μClinux
μClinux是應(yīng)用于嵌入式設(shè)備的一個(gè)Linux版本,是主要針對(duì)不帶MMU的CPU而設(shè)計(jì)的Linux系統(tǒng)。ΜClinux系統(tǒng)對(duì)于內(nèi)存的訪問地址都是實(shí)際的物理地址。操作系統(tǒng)對(duì)內(nèi)存空間沒有保護(hù)(這實(shí)際上是很多嵌入式系統(tǒng)的特點(diǎn)),各個(gè)進(jìn)程實(shí)際上共享一個(gè)運(yùn)行空間(沒有獨(dú)立的地址轉(zhuǎn)換表)。目前,SkyEye上可以運(yùn)行μClinux的2003年最新版本。
3.2 μC/OS-II
SkyEye作為一個(gè)基于Atmel AT91X40開發(fā)板的仿真環(huán)境,在它上面可以移植各種適合地嵌入式開發(fā)應(yīng)用的操作系統(tǒng),將μC/OS-II移植琶SkyEye上是我們對(duì)此做的又一次嘗試。ΜC/OS-II是一個(gè)簡(jiǎn)單、高效的嵌入式實(shí)時(shí)操作系統(tǒng)內(nèi)核。自從1992年以來,已經(jīng)被應(yīng)用到各種嵌入式系統(tǒng)中。目前,它可以支持x86、ARM、PowerPC、MIPS等眾多體系結(jié)構(gòu),并有上百個(gè)商業(yè)應(yīng)用式系統(tǒng)中。目前,它可以支持x86、ARM、PowerPC、MIPS等眾多體系結(jié)構(gòu),并有上百個(gè)商業(yè)應(yīng)用實(shí)例,其穩(wěn)定性和可用性是經(jīng)過實(shí)踐驗(yàn)證的。同時(shí),它的源代碼公開,任何人都可以從www.ucos-ii.com的網(wǎng)站上獲得全部源碼以及其在各種體系結(jié)構(gòu)平臺(tái)上的移植范例。無論是通常學(xué)習(xí)μC/OS-II來了解實(shí)時(shí)操作系統(tǒng)的構(gòu)造,還是直接使用它來針對(duì)具體應(yīng)用進(jìn)行開發(fā),都是非常方便和可行的。目前,SkyEye支持的μC/OS-II內(nèi)核為2.5.1版。
3.3 ARM Linux
ARM Linux屬于Linux標(biāo)準(zhǔn)發(fā)行內(nèi)核中的一個(gè)分支,支持MMU的ARM系列CPU,如ARM720T、ARM920T、Intel StrongARM等。我們目前在SkyEye上仿真的CPU型號(hào)為CPU內(nèi)核是ARM Linux內(nèi)核選擇的本系結(jié)構(gòu)為CLPS711x/EP72lx,它支持ARM20T、UART串口等硬件,都是SkyEye目前仿真的硬件。目前SkyEye已經(jīng)成功運(yùn)行了版本為2.4.18的ARM Linux。有關(guān)ARM Linux的更多信息請(qǐng)?jiān)L問http://www.arm.linux.org.uk/。
4 SkyEye目前支持的網(wǎng)絡(luò)協(xié)議棧
4.1 μCLinux上的TCP/IP
μClinux上面有完整的TCP/IP協(xié)議棧,但缺少對(duì)SkyEye的網(wǎng)絡(luò)仿真芯片(仿真兼容NE2000的8019as)的驅(qū)動(dòng)程序。我們實(shí)現(xiàn)的驅(qū)動(dòng)程序主要包括了初始化、中斷處理、接收數(shù)據(jù)包的處理、發(fā)送數(shù)據(jù)包的處理等工作,再加上SkyEye的虛擬HUB-vet的協(xié)議,使μClinux on SkyEye的多個(gè)實(shí)例之間、實(shí)例與主機(jī)之間可以進(jìn)行TCP/IP通信。
4.2 μC/OS-II上的LwIP
μC/OS-II本身沒有TCP/IP協(xié)議棧,目前的一些第三方TCP/IP支持都是完全商業(yè)化的,很少給出源代碼,影響了μC/OS-II的研究和推廣。通過把開放源代碼的TCP/IP協(xié)議棧LwIP移植到μC/OS-Ii上來,就獲得了一套可免費(fèi)研究、學(xué)習(xí)的嵌入式網(wǎng)絡(luò)軟件平臺(tái)。其系統(tǒng)示意圖如圖1所示。
LwIP是瑞士計(jì)算機(jī)科學(xué)院(Swedish Institute of Computer Science)的Adam Dunkels等開發(fā)的一套用于嵌入式系統(tǒng)的開放源代碼TCP/IP協(xié)議棧。LwIP的含義是Light Weight(輕型)IP協(xié)議。LwIP可以移植到操作系統(tǒng)上,也可以在無操作系統(tǒng)的情況下獨(dú)立運(yùn)行。我們目前使用的是LwIP的最新穩(wěn)定版V0.5.3。
LwIP協(xié)議棧在設(shè)計(jì)時(shí)就考慮到了將來的移植問題,因此把所有與硬件、OS、編譯器相關(guān)的部分獨(dú)立出來,放在/src/arch目錄下。因此,LwIP在μC/OS-II上的實(shí)現(xiàn)就是修改這個(gè)目錄下的文件,其它的文件一般不應(yīng)該修改。
我們?cè)赟kyEye中所仿真的網(wǎng)絡(luò)芯片是NE2000,所以目前實(shí)現(xiàn)的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)是針對(duì)NE2000的,其它類型的網(wǎng)絡(luò)芯片驅(qū)動(dòng)可以在LwIP的網(wǎng)站上找到。現(xiàn)在LwIP已經(jīng)順利運(yùn)行在μC/OS-II上了,目前可以從Host主機(jī)和SkyEye上運(yùn)行的μC/OS-II+LwIP順利進(jìn)行TCP/IP的通信。
4.3 更多的TCP/IP協(xié)議棧
除了LwIP之外,還有很多開源的嵌入式TCP/IP協(xié)議棧。它們各有各的特點(diǎn),有些功能較全面,有些占用資源出奇的少,能適合不同場(chǎng)合的需要,而且多接觸一些不同的思路,對(duì)協(xié)議和編碼能有更好的理解。其中的代表有tinyTCP、ucIP、uIP等,它們的基本思路應(yīng)該都是一致的。SkyEye小組希望能有列多對(duì)TCP/IP協(xié)議棧感興趣的人參與進(jìn)來,特別是ucIP,實(shí)際上它是專門為μC/OS-II設(shè)計(jì)的。
5 SkyEye上已經(jīng)實(shí)現(xiàn)的簡(jiǎn)單應(yīng)用
5.1 LwIP上的Echo服務(wù)器
做完LwIP的移植修改工作以后,就可以在μC/OS-II中初始化LwIP,并創(chuàng)建TCP或UDP任務(wù)進(jìn)行測(cè)試了。值得注意的是:LwIP的初始化必須在μC/OS-II完全啟動(dòng)之后也就是在任務(wù)中進(jìn)行,因?yàn)樗某跏蓟玫搅诵盘?hào)量等與OS相關(guān)的操作。
LwIP提供了兩種API,供用戶使用這個(gè)協(xié)議棧。
第一種是BSD API。這種API非常像BSD標(biāo)準(zhǔn)UNIX中的socket API,所以對(duì)其這樣命名。它跟普通的socket API一樣,是基于open-read-write-close模型的。它提供了一種標(biāo)準(zhǔn)的方法來使用LwIP協(xié)議棧。但這種API效率較低,消耗資源較多,因此不推薦使用。
第二種稱為RAW API。這種API接口實(shí)際上是直接使用了LwIP協(xié)議棧中的回調(diào)函數(shù)(call back functions),從而使應(yīng)用程序和協(xié)議棧代碼能夠更好地集成在一起,運(yùn)行同一個(gè)線程即任務(wù)中。RAW API相對(duì)于普通BSD API來說,速度更快,消耗內(nèi)存資源更少;唯一的缺點(diǎn)是編程復(fù)雜,對(duì)程序員的要求高??紤]到我們是在嵌入式設(shè)備中工作,這樣的缺點(diǎn)是可以接受的。事實(shí)上,BSD API就是用RAW API來實(shí)現(xiàn)的。
利用Berkley API實(shí)現(xiàn)的tcpecho_thread是一個(gè)TCP Echo服務(wù)器,監(jiān)聽7號(hào)端口,這實(shí)際上是實(shí)現(xiàn)了RFC中最簡(jiǎn)單Echo協(xié)議:收到什么,就往回發(fā)同樣的內(nèi)容。編譯運(yùn)行后,用ping IP地址命令可以得到ICMP reply響應(yīng)。用telnet IP地址7(登錄7號(hào)端口)命令可以看到Echo Server的回顯效果。說明ARP、ICMP、IP、TCP協(xié)議都已正確運(yùn)行。
5.2μC/OS-II只提供了操作系統(tǒng)內(nèi)核,用戶要自己添加文件處理、人機(jī)界面、網(wǎng)絡(luò)接口等重要部分。大部分人認(rèn)識(shí)OS都是從這里開始的。
由于SkyEye下的仿真串口UART已經(jīng)實(shí)現(xiàn)了中斷方式的接收(實(shí)際是從鍵盤接收輸入)和輸出(實(shí)際上是輸出到終端屏幕),所以實(shí)現(xiàn)一個(gè)類似Bash的簡(jiǎn)化版Shell并不困難。其本質(zhì)思想就是:Shell作為一個(gè)μC/OS-II下的任務(wù),工作于內(nèi)核之外,占用一個(gè)任務(wù)號(hào)。它接收用戶輸入的字符,存儲(chǔ)到緩沖區(qū),并回顯到屏幕上,以回車鍵為用戶輸入的結(jié)束信號(hào),隨后解析用戶輸入的命令名稱、參數(shù),調(diào)用相應(yīng)的命令函數(shù)。一直到這個(gè)命令函數(shù)運(yùn)行返回,才繼續(xù)Shell的人機(jī)交互界面。
我們目前在μC/OS-II下實(shí)現(xiàn)的Shell被命名為Genie Shell。它實(shí)現(xiàn)了最基本的命令輸入、解析參數(shù)、調(diào)用命令函數(shù)功能,以及兩條示例性的命令。這個(gè)Shell的特色是采用了一些面向?qū)ο蟮乃悸穪韺?shí)現(xiàn)Shell的各種命令。Genie Shell把每個(gè)命令看成一個(gè)對(duì)象,對(duì)象的屬性是命令名,而對(duì)象的方法就是命令的執(zhí)行函數(shù)本身。用戶輸入命令及參數(shù)后,將參數(shù)傳遞給對(duì)象的方法并執(zhí)行。要Shell中增加一條命令,就是增加一個(gè)對(duì)象,并實(shí)現(xiàn)這個(gè)對(duì)象的方法,以利于今后做進(jìn)一步的擴(kuò)充。
5.3μClinux上的應(yīng)用程序
目前μClinux-dist-20030305已經(jīng)可以在SkyEye上運(yùn)行。其中的sash(shell)、ping、ifconfig、telnet,telnet server、ftp、ftp server、boa(http server)、mount with nfs support等主要的應(yīng)用程序都可以成功地運(yùn)行在SkyEye中,而且不需要對(duì)應(yīng)用程序進(jìn)行任何修改。
6 SkyEye正在開展的工作
6.1 LCD仿真
作為單片機(jī)系統(tǒng)重要的輸出設(shè)備,LCD屏幕用得非常廣泛,因此,我們認(rèn)為有必要為SkyEye加入LCD控制器設(shè)備仿真。我們使用GTK+圖形函數(shù)庫(kù)在Xwindow中模擬出一個(gè)LCD屏幕,這樣在SkyEye上運(yùn)行的OS,其LCD驅(qū)動(dòng)程序會(huì)像驅(qū)動(dòng)真正的LCD控制器一樣發(fā)送控制命令,而SkyEye解釋這些控制命令,并且應(yīng)地在GTK+繪出的窗口中畫不同灰度或顏色的點(diǎn)。這里對(duì)GTK+的使用僅限于繪制窗口和畫點(diǎn),因?yàn)檫@是LCD屏幕的最基本動(dòng)作,其它所有的工作如畫圖、GUI的實(shí)現(xiàn)都應(yīng)該由應(yīng)用程序利用畫點(diǎn)的功能去實(shí)現(xiàn),與SkyEye本身無關(guān)。
LCD的buffer RAM是映射到內(nèi)存RAM中的。LCD屏幕的每個(gè)點(diǎn)對(duì)應(yīng)內(nèi)存中的1位或幾位,各個(gè)點(diǎn)所對(duì)應(yīng)的內(nèi)存按行序連續(xù)存放。LCD上顯示什么內(nèi)容,完全由這塊內(nèi)存決定。LCD仿真控制器會(huì)根據(jù)這塊內(nèi)存去刷新屏幕顯示,刷新頻率等參數(shù)要根據(jù)具體使用的LCD屏幕來決定。OS中的LCD驅(qū)動(dòng)程序要往LCD屏幕上寫東西,就是寫這塊內(nèi)存。
6.2 基于ARM的其它體系結(jié)構(gòu)的仿真
S3C4510B是三星公司推出的針對(duì)嵌入式應(yīng)用的16/32位嵌入式處理器,是一款應(yīng)用十分廣泛的嵌入式處理器。該微控制器專為以太網(wǎng)通信系統(tǒng)的集線器和路由器而設(shè)計(jì),具有低成本和高性能的特點(diǎn)。S3C4510B中內(nèi)置了ARM公司設(shè)計(jì)的16/32位ARM7TDMI處理器,可以執(zhí)行32位的ARM指令,也可執(zhí)行16位的THUMB指令,并集成了多種外圍部件。目前,SkyEye仿真的體系結(jié)構(gòu)還比較少,嘗試對(duì)S3C4510B的仿真,一方面是使SkyEye能夠支持更多的體系結(jié)構(gòu);另一方面,通過仿真S3C4510B,有助于為SkyEye設(shè)計(jì)可擴(kuò)展框架,使SkyEye更具通用性和模塊化。
Intel公司的StrongARM芯片SA1110的最高運(yùn)行速度可達(dá)206MHz;其內(nèi)部有強(qiáng)大的指令操作能力、高速緩沖能力、寄存器管理能力、讀/寫緩沖器能力。SA1110寄存器總線接口可與DRAM、SDRAM、ROM、SMROM、SRAM以及其它潛在的I/O器件共享數(shù)據(jù)信號(hào),其寄存器與PCMCIA模塊支持4個(gè)快速大同小頁(yè)操作模式(FPM)、擴(kuò)展數(shù)據(jù)輸出(EDO)、同步DRAM、6個(gè)靜態(tài)存儲(chǔ)器、6個(gè)ROM/SDRAM等。SA1110可提供系統(tǒng)支持邏輯、多個(gè)串行通信通道、1個(gè)彩色/灰度LCD控制器、2個(gè)PCMCIA插槽、28個(gè)GPIO口;內(nèi)部提供定時(shí)器、電源管理、指令控制、復(fù)位控制、時(shí)鐘產(chǎn)生、中斷控制等功能。SA1110電源管理提供正常、空閑、睡眠三種工作狀態(tài),其內(nèi)部包含六通道的DMA控制器,用于支持串行通信過程中的數(shù)據(jù)高速運(yùn)行,如串行通道與外部寄存器、DRAM、SRAM、Flash、ROM等之間的通信;此外,還有1個(gè)用于支持LCD控制器工作的獨(dú)立的DMA控制器SA1110,它有5個(gè)獨(dú)立的串行通道,可分別執(zhí)行半雙工被動(dòng)協(xié)議的通用串行總線(USB)通信、紅外數(shù)據(jù)(IrDA)通信、多媒體通信口/同步串行口(MCP/SSP)通信等。SA1110通過指令和數(shù)據(jù)斷點(diǎn)提供調(diào)試支持,還提供JTAG口,用于進(jìn)行系統(tǒng)連續(xù)檢查。通過對(duì)StrongARM芯片的仿真,除了有助于SkyEye設(shè)計(jì)可擴(kuò)展框架外,還將推動(dòng)下一步對(duì)Intel的XScale系列CPU的研究。
6.3 SkyEye集成開發(fā)環(huán)境的實(shí)現(xiàn)
集成開發(fā)環(huán)境是SkyEye的一個(gè)重要組成部分,利用它,可以直接在可視環(huán)境中編輯、編譯、調(diào)試和修改OS代碼,方便了軟件開發(fā)和稱一。由于SkyEye的用戶接口是基于GDB的,所有支持GDB的集成開發(fā)環(huán)境都可以很容易地移植為SkyEye的集成開發(fā)環(huán)境。目前的Windows版本借鑒Dev-Cpp的源代碼,主要與Cygwin版本的SkyEye進(jìn)行通信,以進(jìn)行方便的、可視化的調(diào)試。Linux版本的IDE采用的是修改過的KDevelop3.0,目前它能和SkyEye進(jìn)行很好的集成,完成全以充分利用Kdevelop3.0的強(qiáng)大功能。
6.4 SkyEye可擴(kuò)展框架的設(shè)計(jì)
目前SkyEye各個(gè)部分的仿真還是緊耦合的,各仿真模塊之間的接口還不夠清晰,這不利于SkyEye的擴(kuò)展。如果要支持更多的CPU和嵌入式環(huán)境,需要很大的工作量,而且用戶也無法進(jìn)行二次開發(fā),阻礙了SkyEye的進(jìn)一步推廣和應(yīng)用。這就需要為SkyEye設(shè)計(jì)一個(gè)可擴(kuò)展框架。目前,框架的設(shè)計(jì)要集中于定義和實(shí)現(xiàn)CPU的內(nèi)部接口,如內(nèi)存接口和協(xié)議處理器接口等,以讓它支持更多的CPU;下一步會(huì)為SkyEye設(shè)計(jì)虛擬外部接口,讓用戶可以根據(jù)自己的硬件或者應(yīng)用,來定義外設(shè)的功能,并能在SkyEye上方便地仿零點(diǎn)和驗(yàn)證,從而為用戶增加二次開發(fā)的功能,讓SkyEye得到更廣泛的應(yīng)用。
7 總結(jié)與展望
經(jīng)過幾個(gè)月的努力,SkyEye已經(jīng)有了很大的發(fā)展,各方面的工作已經(jīng)按照計(jì)劃有條不紊地進(jìn)行著??梢哉f,SkyEye作為嵌入式系統(tǒng)的仿真環(huán)境,已經(jīng)成為學(xué)習(xí)嵌入式系統(tǒng)十分有效的工具。同時(shí),SkyEye在許多方面還有待手改進(jìn):一是要提高SkyEye的易用性,這就需要完善SkyEye的集成開發(fā)環(huán)境,改善其用戶接口;再就是提高SkyEye的通用性,這需要SkyEye支持更多的外圍設(shè)備、更多的體系結(jié)構(gòu)乃至更多的CPU類型。
在開發(fā)的過程中,SkyEye項(xiàng)目得到了很多嵌入式愛好者大力的支持和熱情關(guān)注,項(xiàng)目的開發(fā)隊(duì)伍也在不斷壯大。作為開源項(xiàng)目,SkyEye真誠(chéng)希望廣大計(jì)算機(jī)愛好者積極參與與并對(duì)SkyEye的發(fā)展提出寶貴的意見和建議。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論