??? 摘 要: 利用XILINX公司的EDK軟件搭建一個(gè)基于PowerPC的片上系統(tǒng)" title="片上系統(tǒng)">片上系統(tǒng),并且在定制的SoPC系統(tǒng)上移植Linux系統(tǒng),最后利用此系統(tǒng)完成了一個(gè)具體的嵌入式" title="的嵌入式">的嵌入式應(yīng)用系統(tǒng)設(shè)計(jì),。實(shí)驗(yàn)表明,這種基于Linux的SoPC應(yīng)用系統(tǒng)設(shè)計(jì),,很好地結(jié)合了SoPC和Linux系統(tǒng)的優(yōu)點(diǎn),用戶(hù)可以根據(jù)需要靈活地定制出軟硬件平臺(tái),滿(mǎn)足復(fù)雜多變的嵌入式需求,,加速產(chǎn)品的開(kāi)發(fā),。
??? 關(guān)鍵詞: SoPC; Linux,; 嵌入式
?
??? SoPC(System on Programmable Chip)是一種特殊的嵌入式系統(tǒng),。首先,它是一種SoC系統(tǒng),,即由一個(gè)芯片完成系統(tǒng)的主要邏輯功能,;其次,它是可編程的片上系統(tǒng),,即可配置,、可裁減、可擴(kuò)充,、可升級(jí),,具有硬件系統(tǒng)的可編程性。采用SoPC的設(shè)計(jì),,具有很大的靈活性,。它可以根據(jù)需要定制各個(gè)硬件模塊,包括處理器,、總線(xiàn),、存儲(chǔ)器和通信模塊等,這就使得在一個(gè)芯片上搭建一個(gè)按需定制的SoC系統(tǒng)成為可能,。而Linux系統(tǒng)也因?yàn)槠淞己玫目刹脺p,、可配置的特點(diǎn)廣泛應(yīng)用于各種嵌入式系統(tǒng),Linux操作系統(tǒng)提供了許多系統(tǒng)級(jí)的應(yīng)用,,例如網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn),、進(jìn)程調(diào)度、內(nèi)存管理等,,同時(shí)Linux是一個(gè)成熟的開(kāi)源操作系統(tǒng),,有豐富的應(yīng)用資源。利用這些資源和強(qiáng)大的系統(tǒng)功能,,用戶(hù)可以基于嵌入式Linux快速地開(kāi)發(fā)出面向復(fù)雜應(yīng)用的嵌入式系統(tǒng),。因此,結(jié)合SoPC和Linux優(yōu)勢(shì),,可以很好地滿(mǎn)足嵌入式系統(tǒng)根據(jù)需求量體裁衣,,去除冗余。本文給出基于Linux的SoPC應(yīng)用系統(tǒng)的開(kāi)發(fā)方法及一個(gè)具體的嵌入式應(yīng)用開(kāi)發(fā)實(shí)例,。
1 硬件開(kāi)發(fā)環(huán)境
1.1 開(kāi)發(fā)平臺(tái)
??? 本文所采用的開(kāi)發(fā)平臺(tái)是AVNET公司生產(chǎn)的VIRTEX-II PRO FF1152開(kāi)發(fā)板,,它使用XILINX公司的Virtex-II Pro FPGA芯片XC2VP50-6FF1152C,,同時(shí)開(kāi)發(fā)板還有2個(gè)8MB×32的SDRAM存儲(chǔ)器、2個(gè)RS232接口,、一個(gè)以太網(wǎng)接口,、1個(gè)LCD顯示屏、8個(gè)LED燈,,同時(shí)支持SPI-4.2的高速16bit LVDS接口,、iSFP GbE光纖接口、System ACE接口以及一個(gè)P160標(biāo)準(zhǔn)的擴(kuò)展模塊[1],。
1.2 基于PowerPC的片上系統(tǒng)
??? XC2VP50-6FF1152C芯片內(nèi)部含有兩個(gè)IBM PowerPC 405核,。PowerPC405是32位的RISC處理器,它采用IP植入架構(gòu)的形式整合到XILINX公司的Virtex-II Pro FPGA器件中,。
??? PowerPC硬核具有許多優(yōu)點(diǎn)適合軟件的開(kāi)發(fā)設(shè)計(jì)[2]:具有三個(gè)定時(shí)器:即可編程的內(nèi)部定時(shí)器,、固定的內(nèi)部定時(shí)器和看門(mén)狗定時(shí)器和靈活的存儲(chǔ)管理和用于加強(qiáng)計(jì)算功能的乘法累加指令。PowerPC的強(qiáng)大功能可以勝任許多復(fù)雜應(yīng)用系統(tǒng)對(duì)處理能力和運(yùn)算速度的需求,。同時(shí),,利用雙核機(jī)制以及操作系統(tǒng)的進(jìn)程調(diào)度可以大幅度地提高處理速度。
??? 通過(guò)XILINX公司的EDK開(kāi)發(fā)軟件,,可以很方便地在Virtex-II Pro系列芯片上搭建自己需要的硬件系統(tǒng),。處理器方面可以選擇硬核IP:PPC405,或者軟核IP:Microblaze,;總線(xiàn)有OPB和PLB兩種總線(xiàn)可供選擇,;同時(shí),還有豐富的外圍IP可以選擇,;在通信方面,,分別有支持高速和低速的通信模塊。支持高速的IP有:plb_etherne,、opb_ethernet,、opb_ethernetlite和plb_gemac等,支持低速的IP有:opb_iic,、opb_spi,、opb_uart16550和opb_uartlite等;在存儲(chǔ)控制器方面,,可選擇的 IP有opb_sdram,、opb_ddr、opb_emc,、opb_sysace,、plb_sdram、 plb_ddr和plb_emc等模塊;其他方面還有支持中斷,、定時(shí),、GPIO、PCI等功能的IP模塊,。豐富的IP模塊,,加上可以利用IPIC(IP Interconnect)連接用戶(hù)定制的IP,因而用戶(hù)使用CPU時(shí),,不需要再另外使用一個(gè)SDRAM控制器芯片,或者另外使用一個(gè)以太網(wǎng)的控制芯片,,極其方便,。
??? 可編程片上系統(tǒng)由處理器、總線(xiàn)互連和外圍設(shè)備等組成,,典型的基于PowerPC的片上系統(tǒng)的架構(gòu)如圖1所示,。
?
1.3 CoreConnect的總線(xiàn)結(jié)構(gòu)[3]
??? 總線(xiàn)互連是片上系統(tǒng)的一項(xiàng)關(guān)鍵技術(shù)。本系統(tǒng)采用了CoreConnect的總線(xiàn)結(jié)構(gòu),。該總線(xiàn)結(jié)構(gòu)是IBM公司開(kāi)發(fā)的一種片上通信的總線(xiàn)互連技術(shù),。它的應(yīng)用使得系統(tǒng)核、外設(shè)核,、處理器核的復(fù)用,、連接變得更加容易。這里,,系統(tǒng)核是針對(duì)PLB總線(xiàn)上的功能IP模塊的,,而外設(shè)核是針對(duì)OPB總線(xiàn)上的功能模塊的。CoreConnect總線(xiàn)互連是由本地邏輯總線(xiàn)PLB(Peripheral Logic Bus),、片上外圍總線(xiàn) OPB(On chip Peripheral Bus),、一個(gè)總線(xiàn)橋、兩個(gè)判決器,,以及設(shè)備控制總線(xiàn)DCR(Device Control Register構(gòu)成的,,其結(jié)構(gòu)如圖2所示。
?
2 基于Linux的SoPC系統(tǒng)構(gòu)建
??? 系統(tǒng)的構(gòu)建包括,,硬件平臺(tái)的搭建和Linux操作系統(tǒng)的移植,。首先進(jìn)行項(xiàng)目需求分析,決定實(shí)現(xiàn)系統(tǒng)需要的硬件IP核,,繼而搭建硬件平臺(tái),。硬件平臺(tái)構(gòu)建完成之后,利用EDK軟件生成相關(guān)的硬件參數(shù)文件和設(shè)備驅(qū)動(dòng)文件,。用戶(hù)需要利用生成的文件構(gòu)建Linux內(nèi)核,,同時(shí)需要構(gòu)建適用于內(nèi)核的根文件" title="根文件">根文件系統(tǒng),最后在構(gòu)建完成的操作系統(tǒng)的基礎(chǔ)上開(kāi)發(fā)所需功能的應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序接口。其中根文件系統(tǒng)的構(gòu)造要考慮內(nèi)核中提供的服務(wù)和功能以及應(yīng)用程序所需的系統(tǒng)命令等,。同樣所要實(shí)現(xiàn)的應(yīng)用功能又影響著內(nèi)核服務(wù)和功能的選擇,。根文件系統(tǒng)、應(yīng)用程序接口以及內(nèi)核三者是互相影響的,。具體的構(gòu)建流程圖如圖3所示,。
?
2.1 利用EDK搭建硬件系統(tǒng)
??? 利用EDK8.2軟件搭建硬件系統(tǒng),因?yàn)榛贚inux的操作系統(tǒng)設(shè)計(jì)中,,CPU,、RAM和總線(xiàn)是必須的。由于芯片內(nèi)部的BRAM只有128kb/s, 而下載Linux內(nèi)核的.elf文件通常遠(yuǎn)大于這個(gè)容量,,因此需要使用外部的存儲(chǔ)單元,。本文使用opb_sdram存儲(chǔ)控制模塊實(shí)現(xiàn)此功能。本文使用Uart16550控制模塊,,能方便地通過(guò)RS232端口觀察測(cè)試的結(jié)果,。為滿(mǎn)足本文應(yīng)用的需要,可以使用Uartlite模塊實(shí)現(xiàn)RS232的COM2端口和外部設(shè)備" title="外部設(shè)備">外部設(shè)備通信的功能,。添加Ethernet_Mac的IP模塊,,可使用以太網(wǎng)端口將開(kāi)發(fā)板連接到網(wǎng)絡(luò)上。為了調(diào)試的方便,,可以加入GPIO模塊,。通過(guò)GPIO控制LED燈,可顯示系統(tǒng)狀態(tài),。若選擇應(yīng)用程序初始化硬件,,當(dāng)bit數(shù)據(jù)下載到FPGA系統(tǒng)正常運(yùn)行時(shí),可以觀察到LED燈被點(diǎn)亮,。另外,,根據(jù)設(shè)計(jì)需求,也可以?huà)燧d用戶(hù)定制的IP,,以處理用戶(hù)的特定的需求,。
??? 選擇參數(shù)時(shí),可以使用默認(rèn)值,,而存儲(chǔ)器參數(shù)可以選擇容量大一些的,。使用的PowerPC 405硬核,PPC的工作頻率設(shè)置為100MHz, 參考時(shí)鐘和系統(tǒng)的總線(xiàn)頻率也分別設(shè)置為100MHz,;使用的BRAM模塊IBRAM和DBRAM速率分別設(shè)置為64Kb/s,。最終定制的SoPC硬件系統(tǒng)如圖4所示。
?
2.2? SoPC的Linux系統(tǒng)構(gòu)建
??? 在SoPC的硬件系統(tǒng)構(gòu)建完成之后,,利用EDK軟件生成的板級(jí)支持包(BSP)配置編譯內(nèi)核,。BSP包含了所選定處理器架構(gòu)的屬性文件以及相關(guān)硬件的驅(qū)動(dòng)源文件,。將這些文件加入到Linux內(nèi)核中,然后配置內(nèi)核選項(xiàng)選擇對(duì)應(yīng)的處理器架構(gòu),、所選硬件的驅(qū)動(dòng)模塊以及需要的其他內(nèi)核模塊,,之后再對(duì)完成配置的內(nèi)核進(jìn)行編譯,生成Linux的內(nèi)核image文件,。
??? 生成內(nèi)核image文件之后,,還需要生成系統(tǒng)運(yùn)行所需要的根文件系統(tǒng)。根文件系統(tǒng)中包含了嵌入式Linux系統(tǒng)的所有應(yīng)用程序,、庫(kù)以及系統(tǒng)配置等相關(guān)文件,。根文件系統(tǒng)中常用的程序和命令可利用開(kāi)源軟件Busybox構(gòu)造。構(gòu)造完成之后,,在Busybox生成的目錄和文件的基礎(chǔ)上再構(gòu)造根文件系統(tǒng)的目錄樹(shù),,并添加相關(guān)設(shè)備文件和配置文件以及系統(tǒng)運(yùn)行時(shí)需要的腳本文件,從而形成最終的根文件系統(tǒng),。至此,就可以將文件系統(tǒng)作為映像編譯到內(nèi)核中,也可以通過(guò)網(wǎng)絡(luò)使用NFS文件系統(tǒng)加載根文件系統(tǒng),。
3? 應(yīng)用舉例
??? 以一個(gè)多進(jìn)程的嵌入式Web服務(wù)器用于實(shí)現(xiàn)控制遠(yuǎn)程設(shè)備的的開(kāi)發(fā)為例,,闡述在基于Linux的SoPC系統(tǒng)上開(kāi)發(fā)應(yīng)用程序的過(guò)程。嵌入式Web服務(wù)器的開(kāi)發(fā)包括HTTP協(xié)議裁減和具體的應(yīng)用程序?qū)崿F(xiàn),。用戶(hù)可以通過(guò)向Web服務(wù)器發(fā)送CGI請(qǐng)求的方式使服務(wù)器通過(guò)串口和外部設(shè)備通信,,達(dá)到遠(yuǎn)程控制的目的。
3.1 HTTP協(xié)議裁減
?? ?嵌入式Web服務(wù)器主要基于HTTP協(xié)議進(jìn)行設(shè)計(jì),,而HTTP協(xié)議的實(shí)現(xiàn)又是基于TCP/IP協(xié)議棧的,。在Linux內(nèi)核中,由于已經(jīng)包含了TCP/IP協(xié)議棧的完整實(shí)現(xiàn),,從而為嵌入式Web服務(wù)器的實(shí)現(xiàn)提供了很好的基礎(chǔ),。相對(duì)于在無(wú)操作系統(tǒng)環(huán)境的SoPC上實(shí)現(xiàn)Web服務(wù)器來(lái)說(shuō),基于Linux系統(tǒng)的開(kāi)發(fā)可以節(jié)省大量的工作,。
??? HTTP協(xié)議是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,,由于其采用簡(jiǎn)捷、快速的方式,,適用于分布式超媒體信息系統(tǒng)[4],。嵌入式Web服務(wù)器根據(jù)不同的需要,實(shí)現(xiàn)的功能也不同,。相對(duì)于完整的Web服務(wù)器,,它需要實(shí)現(xiàn)的功能要簡(jiǎn)單得多[5]。本文的嵌入式Web服務(wù)器僅實(shí)現(xiàn)協(xié)議中最常用的部分,??紤]到嵌入式系統(tǒng)的存儲(chǔ)空間和處理能力,對(duì)HTTP協(xié)議進(jìn)行了裁減。這不僅可以提高Web服務(wù)器的效率,,也可以減少占用的空間,,具有積極的意義。
??? 當(dāng)客戶(hù)機(jī)與Web服務(wù)器進(jìn)行會(huì)話(huà)時(shí),,客戶(hù)機(jī)首先通過(guò)SOCKET與服務(wù)器建立連接,,連接之后便向服務(wù)器提出請(qǐng)求,請(qǐng)求信息包括希望返回的文件名和客戶(hù)機(jī)信息等,??蛻?hù)機(jī)以請(qǐng)求頭(包括HTTP方法和頭字段[6])的形式將信息發(fā)送給服務(wù)器。HTTP方法常用的有GET,、HEAD,、POST,因此本文即采用GET,、HEAD,、POST三種方法。
??? HTTP頭字段包括general-header,、request-header,、response-header、entity-header四大類(lèi),而每一類(lèi)中又定義了多個(gè)類(lèi)型[6],,其中的大部分都是不常用的,,所以應(yīng)根據(jù)需要選定幾種類(lèi)型。本文設(shè)計(jì)的服務(wù)器支持以下幾種頭類(lèi)型:Date,、Host,、Server、Accept,、Connection,、Content-Type、Content-Length,、Accept-Charset,、 Accept-Language。
??? 服務(wù)器收到一個(gè)請(qǐng)求,,就會(huì)立刻解釋請(qǐng)求中所用到的方法,,并開(kāi)始處理,處理完成之后會(huì)發(fā)送應(yīng)答消息,。應(yīng)答消息包含了狀態(tài)碼,、一些頭字段以及實(shí)體信息(即客戶(hù)請(qǐng)求的服務(wù)器上的資源內(nèi)容),其中HTTP協(xié)議的狀態(tài)碼也有四大類(lèi)[6],。這些狀態(tài)碼詳細(xì)說(shuō)明了服務(wù)器的狀態(tài),、出錯(cuò)信息以及對(duì)用戶(hù)的指示,。由于嵌入式Web服務(wù)器只需向用戶(hù)提供服務(wù),而無(wú)需向用戶(hù)反饋具體的狀態(tài),,因此,,本文實(shí)現(xiàn)中只保留特定的幾種錯(cuò)誤信息,而省略了大部分的狀態(tài)信息,。
3.2 支持多進(jìn)程的嵌入式Web服務(wù)器的實(shí)現(xiàn)
??? 本系統(tǒng)的設(shè)計(jì)對(duì)HTTP協(xié)議進(jìn)行了裁減,,然后利用Linux系統(tǒng)提供的進(jìn)程調(diào)度功能、網(wǎng)絡(luò)通信功能(包括SOCKET,、TCP連接等),,使用C語(yǔ)言編寫(xiě)了一個(gè)支持多進(jìn)程的Web服務(wù)器。實(shí)現(xiàn)的Web服務(wù)器接收客戶(hù)端的請(qǐng)求,,根據(jù)需要選擇發(fā)送文件通過(guò)串口和外部設(shè)備通信,,并將外部設(shè)備返回的結(jié)果發(fā)送給客戶(hù)端。其功能描述如下:在指定的端口監(jiān)聽(tīng)用戶(hù)的HTTP請(qǐng)求,,對(duì)該請(qǐng)求進(jìn)行分析解釋并執(zhí)行相應(yīng)的操作,;將用戶(hù)要求的內(nèi)容或者出錯(cuò)信息以HTTP應(yīng)答的方式返回給用戶(hù)。其中,,用戶(hù)的請(qǐng)求分為CGI請(qǐng)求和非CGI請(qǐng)求,,如果是CGI請(qǐng)求,則首先檢查用戶(hù)的權(quán)限和文件是否存在,,然后新創(chuàng)建一個(gè)進(jìn)程,并在該子進(jìn)程中通過(guò)串口和外部設(shè)備通信,,最后將串口返回的結(jié)果或者出錯(cuò)信息傳送給Web服務(wù)器返回給用戶(hù),;如果是非CGI請(qǐng)求,則只進(jìn)行權(quán)限和文件檢查,,如果檢查通過(guò)則發(fā)送該文件,,否則給出出錯(cuò)信息。軟件的工作流程如圖5所示,。
?
??? 本文給出了基于Linux的SoPC開(kāi)發(fā)的方法,,并實(shí)現(xiàn)了一個(gè)具體的應(yīng)用設(shè)計(jì)——嵌入式Web服務(wù)器。該設(shè)計(jì)快速,、簡(jiǎn)單,,而且由于基于Linux操作系統(tǒng),從而保證了系統(tǒng)的穩(wěn)定性,,同時(shí)因?yàn)槔昧讼到y(tǒng)的進(jìn)程調(diào)度功能,,加快了信息的處理速度。SoPC和嵌入式Linux操作系統(tǒng)二者的結(jié)合,,既滿(mǎn)足了嵌入式應(yīng)用按需定制,、量體裁衣的需求,,又能開(kāi)發(fā)出穩(wěn)定而功能強(qiáng)大的嵌入式系統(tǒng)。這在嵌入式應(yīng)用日益復(fù)雜的背景下,,具有很大意義和良好的應(yīng)用前景,。
參考文獻(xiàn)
[1] ?AVNET. Virtex-II Pro FF1152 development board user’s guide. https://www.em.avnet.com. 2005.
[2] ?董代潔.基于FPGA的可編程SoC設(shè)計(jì).北京:北京航空航天大學(xué)出版社,2006.
[3] ?IBM. Core connect bus architecture. http://www-03.ibm.com/chips/products/coreconnect/. 2004.
[4] ?DOUGLAS E C.用TCP/IP進(jìn)行網(wǎng)際互聯(lián)(第一卷):原理,、協(xié)議與結(jié)構(gòu). 第四版.林瑤,譯.北京:電子工業(yè)出版社, 2001.
[5] ?劉殿敏, 李科杰. 基于Linux嵌入式HTTP網(wǎng)絡(luò)服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程,2004,(23):193-195.
[6] ?FIELDING R, GETTYS J, MOGUL J, et al.RFC2616: Hypertext transfer protocol——HTTP/1.1. The Internet Engineering Task Force, June 1999.