新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 開放源碼的嵌入式仿真環(huán)境SkyEye(二)

開放源碼的嵌入式仿真環(huán)境SkyEye(二)

——
作者: 時間:2007-04-18 來源: 收藏
LwIP提供了兩種API,供用戶使用這個協(xié)議棧。

第一種是BSD API。這種API非常像BSD標(biāo)準(zhǔn)UNIX中的socket API,所以對其這樣命名。它跟普通的socket API一樣,是基于open-read-write-close模型的。它提供了一種標(biāo)準(zhǔn)的方法來使用LwIP協(xié)議棧。但這種API效率較低,消耗資源較多,因此不推薦使用。

第二種稱為RAW API。這種API接口實際上是直接使用了LwIP協(xié)議棧中的回調(diào)函數(shù)(call back functions),從而使應(yīng)用程序和協(xié)議棧代碼能夠更好地集成在一起,運(yùn)行同一個線程即任務(wù)中。RAW API相對于普通BSD API來說,速度更快,消耗內(nèi)存資源更少;唯一的缺點(diǎn)是編程復(fù)雜,對程序員的要求高??紤]到我們是在嵌入式設(shè)備中工作,這樣的缺點(diǎn)是可以接受的。事實上,BSD API就是用RAW API來實現(xiàn)的。

利用Berkley API實現(xiàn)的tcpecho_thread是一個TCP Echo服務(wù)器,監(jiān)聽7號端口,這實際上是實現(xiàn)了RFC中最簡單Echo協(xié)議:收到什么,就往回發(fā)同樣的內(nèi)容。編譯運(yùn)行后,用ping IP地址命令可以得到ICMP reply響應(yīng)。用telnet IP地址7(登錄7號端口)命令可以看到Echo Server的回顯效果。說明ARP、ICMP、IP、TCP協(xié)議都已正確運(yùn)行。

5.2μC/OS-II只提供了操作系統(tǒng)內(nèi)核,用戶要自己添加文件處理、人機(jī)界面、網(wǎng)絡(luò)接口等重要部分。大部分人認(rèn)識OS都是從這里開始的。

由于SkyEye下的仿真串口UART已經(jīng)實現(xiàn)了中斷方式的接收(實際是從鍵盤接收輸入)和輸出(實際上是輸出到終端屏幕),所以實現(xiàn)一個類似Bash的簡化版Shell并不困難。其本質(zhì)思想就是:Shell作為一個μC/OS-II下的任務(wù),工作于內(nèi)核之外,占用一個任務(wù)號。它接收用戶輸入的字符,存儲到緩沖區(qū),并回顯到屏幕上,以回車鍵為用戶輸入的結(jié)束信號,隨后解析用戶輸入的命令名稱、參數(shù),調(diào)用相應(yīng)的命令函數(shù)。一直到這個命令函數(shù)運(yùn)行返回,才繼續(xù)Shell的人機(jī)交互界面。

我們目前在μC/OS-II下實現(xiàn)的Shell被命名為Genie Shell。它實現(xiàn)了最基本的命令輸入、解析參數(shù)、調(diào)用命令函數(shù)功能,以及兩條示例性的命令。這個Shell的特色是采用了一些面向?qū)ο蟮乃悸穪韺崿F(xiàn)Shell的各種命令。Genie Shell把每個命令看成一個對象,對象的屬性是命令名,而對象的方法就是命令的執(zhí)行函數(shù)本身。用戶輸入命令及參數(shù)后,將參數(shù)傳遞給對象的方法并執(zhí)行。要Shell中增加一條命令,就是增加一個對象,并實現(xiàn)這個對象的方法,以利于今后做進(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中,而且不需要對應(yīng)用程序進(jìn)行任何修改。

6 SkyEye正在開展的工作

6.1 LCD仿真

作為系統(tǒng)重要的輸出設(shè)備,LCD屏幕用得非常廣泛,因此,我們認(rèn)為有必要為SkyEye加入LCD控制器設(shè)備仿真。我們使用GTK+圖形函數(shù)庫在Xwindow中模擬出一個LCD屏幕,這樣在SkyEye上運(yùn)行的OS,其LCD驅(qū)動程序會像驅(qū)動真正的LCD控制器一樣發(fā)送控制命令,而SkyEye解釋這些控制命令,并且應(yīng)地在GTK+繪出的窗口中畫不同灰度或顏色的點(diǎn)。這里對GTK+的使用僅限于繪制窗口和畫點(diǎn),因為這是LCD屏幕的最基本動作,其它所有的工作如畫圖、GUI的實現(xiàn)都應(yīng)該由應(yīng)用程序利用畫點(diǎn)的功能去實現(xiàn),與SkyEye本身無關(guān)。

LCD的buffer RAM是映射到內(nèi)存RAM中的。LCD屏幕的每個點(diǎn)對應(yīng)內(nèi)存中的1位或幾位,各個點(diǎn)所對應(yīng)的內(nèi)存按行序連續(xù)存放。LCD上顯示什么內(nèi)容,完全由這塊內(nèi)存決定。LCD仿真控制器會根據(jù)這塊內(nèi)存去刷新屏幕顯示,刷新頻率等參數(shù)要根據(jù)具體使用的LCD屏幕來決定。OS中的LCD驅(qū)動程序要往LCD屏幕上寫東西,就是寫這塊內(nèi)存。

6.2 基于ARM的其它體系結(jié)構(gòu)的仿真

S3C4510B是三星公司推出的針對嵌入式應(yīng)用的16/32位嵌入式處理器,是一款應(yīng)用十分廣泛的嵌入式處理器。該微控制器專為以太網(wǎng)通信系統(tǒng)的集線器和路由器而設(shè)計,具有低成本和高性能的特點(diǎn)。S3C4510B中內(nèi)置了ARM公司設(shè)計的16/32位ARM7TDMI處理器,可以執(zhí)行32位的ARM指令,也可執(zhí)行16位的THUMB指令,并集成了多種外圍部件。目前,SkyEye仿真的體系結(jié)構(gòu)還比較少,嘗試對S3C4510B的仿真,一方面是使SkyEye能夠支持更多的體系結(jié)構(gòu);另一方面,通過仿真S3C4510B,有助于為SkyEye設(shè)計可擴(kuò)展框架,使SkyEye更具通用性和模塊化。

Intel公司的StrongARM芯片SA1110的最高運(yùn)行速度可達(dá)206MHz;其內(nèi)部有強(qiáng)大的指令操作能力、高速緩沖能力、寄存器管理能力、讀/寫緩沖器能力。SA1110寄存器總線接口可與DRAM、SDRAM、ROM、SMROM、SRAM以及其它潛在的I/O器件共享數(shù)據(jù)信號,其寄存器與PCMCIA模塊支持4個快速大同小頁操作模式(FPM)、擴(kuò)展數(shù)據(jù)輸出(EDO)、同步DRAM、6個靜態(tài)存儲器、6個ROM/SDRAM等。SA1110可提供系統(tǒng)支持邏輯、多個串行通信通道、1個彩色/灰度LCD控制器、2個PCMCIA插槽、28個GPIO口;內(nèi)部提供定時器、電源管理、指令控制、復(fù)位控制、時鐘產(chǎn)生、中斷控制等功能。SA1110電源管理提供正常、空閑、睡眠三種工作狀態(tài),其內(nèi)部包含六通道的DMA控制器,用于支持串行通信過程中的數(shù)據(jù)高速運(yùn)行,如串行通道與外部寄存器、DRAM、SRAM、Flash、ROM等之間的通信;此外,還有1個用于支持LCD控制器工作的獨(dú)立的DMA控制器SA1110,它有5個獨(dú)立的串行通道,可分別執(zhí)行半雙工被動協(xié)議的通用串行總線(USB)通信、紅外數(shù)據(jù)(IrDA)通信、多媒體通信口/同步串行口(MCP/SSP)通信等。SA1110通過指令和數(shù)據(jù)斷點(diǎn)提供調(diào)試支持,還提供JTAG口,用于進(jìn)行系統(tǒng)連續(xù)檢查。通過對StrongARM芯片的仿真,除了有助于SkyEye設(shè)計可擴(kuò)展框架外,還將推動下一步對Intel的XScale系列CPU的研究。

5.3 SkyEye集成開發(fā)環(huán)境的實現(xiàn)

集成開發(fā)環(huán)境是SkyEye的一個重要組成部分,利用它,可以直接在可視環(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è)計

目前SkyEye各個部分的仿真還是緊耦合的,各仿真模塊之間的接口還不夠清晰,這不利于SkyEye的擴(kuò)展。如果要支持更多的CPU和嵌入式環(huán)境,需要很大的工作量,而且用戶也無法進(jìn)行二次開發(fā),阻礙了SkyEye的進(jìn)一步推廣和應(yīng)用。這就需要為SkyEye設(shè)計一個可擴(kuò)展框架。目前,框架的設(shè)計要集中于定義和實現(xiàn)CPU的內(nèi)部接口,如內(nèi)存接口和協(xié)議處理器接口等,以讓它支持更多的CPU;下一步會為SkyEye設(shè)計虛擬外部接口,讓用戶可以根據(jù)自己的硬件或者應(yīng)用,來定義外設(shè)的功能,并能在SkyEye上方便地仿零點(diǎn)和驗證,從而為用戶增加二次開發(fā)的功能,讓SkyEye得到更廣泛的應(yīng)用。

7 總結(jié)與展望

經(jīng)過幾個月的努力,SkyEye已經(jīng)有了很大的發(fā)展,各方面的工作已經(jīng)按照計劃有條不紊地進(jìn)行著。可以說,SkyEye作為的仿真環(huán)境,已經(jīng)成為學(xué)習(xí)十分有效的工具。同時,SkyEye在許多方面還有待手改進(jìn):一是要提高SkyEye的易用性,這就需要完善SkyEye的集成開發(fā)環(huán)境,改善其用戶接口;再就是提高SkyEye的通用性,這需要SkyEye支持更多的外圍設(shè)備、更多的體系結(jié)構(gòu)乃至更多的CPU類型。

在開發(fā)的過程中,SkyEye項目得到了很多嵌入式愛好者大力的支持和熱情關(guān)注,項目的開發(fā)隊伍也在不斷壯大。作為開源項目,SkyEye真誠希望廣大計算機(jī)愛好者積極參與與并對SkyEye的發(fā)展提出寶貴的意見和建議。 


評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉