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