楊 謝,武傳華,路后兵,楊 標(biāo)
(合肥電子工程學(xué)院,安徽 合肥230037)
嵌入式系統(tǒng)是為特定目的而構(gòu)建的一類計(jì)算機(jī)設(shè)備。該設(shè)備具有體積小、功耗低、可靠性穩(wěn)定、高度自動(dòng)化、響應(yīng)速度快等特點(diǎn),特別適合要求實(shí)時(shí)和多任務(wù)的體系[1]。Petalinux是由PetaLogix公司專門(mén)為在Xilinx FPGA的MicroBlaze軟核處理器上運(yùn)行而開(kāi)發(fā)的嵌入式Linux。Petalinux發(fā)布的版本中包含定制的Linux2.4/2.6內(nèi)核原碼、U-boot內(nèi)核編碼、相關(guān)的開(kāi)發(fā)工具以及開(kāi)發(fā)板參考硬件平臺(tái)配置,極大地方便了開(kāi)發(fā)人員的使用,縮短了產(chǎn)品的開(kāi)發(fā)周期。
對(duì)于如何在嵌入式系統(tǒng)上實(shí)現(xiàn)遠(yuǎn)程網(wǎng)絡(luò)通信這一問(wèn)題,本文給出了一種基于Xilinx開(kāi)發(fā)板ML402的嵌入式網(wǎng)絡(luò)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)方案,成功實(shí)現(xiàn)了開(kāi)發(fā)板與PC機(jī)的實(shí)時(shí)網(wǎng)絡(luò)通信。
本設(shè)計(jì)方案采用Xilinx EDK 10.1在ML402開(kāi)發(fā)板搭建一個(gè)最簡(jiǎn)化的硬件平臺(tái),結(jié)構(gòu)如圖1所示。
圖中各部件在FPGA內(nèi)部以IP核的形式構(gòu)建并連接,系統(tǒng)以帶有32 bit MicroBlaze軟核的FPGA作為控制中心,SysACE用于存放文件系統(tǒng)和應(yīng)用程序配置文件;INTC用來(lái)實(shí)現(xiàn)中斷控制;串口可在調(diào)試時(shí)輸出系統(tǒng)的運(yùn)行信息;以太網(wǎng)控制器用來(lái)實(shí)現(xiàn)以太網(wǎng)功能;DDR_SDRAM通過(guò)XCL總線與處理器相連,用于對(duì)片外存儲(chǔ)器進(jìn)行訪問(wèn)[2]。
在移植Petalinux之前,必須配置BSP(Board Support Package)。所謂BSP,就是為給定的板子提供特定操作系統(tǒng)支持的代碼。介于主板硬件和操作系統(tǒng)之間,屬于操作系統(tǒng)的一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好地運(yùn)行于硬件主板。
Xilinx EDK已經(jīng)包括相應(yīng)的BSP產(chǎn)生器,因此,第一步只需要把解壓的Petalinux文件夾下的hardware/edk_user_repository/PetaLogix/bsp/petalinux_v1_00_b文件夾拷貝到EDK文件夾下的swlibsp目錄下進(jìn)行相應(yīng)的配置即可。接下來(lái)打開(kāi)已建立的硬件工程,進(jìn)行軟件平臺(tái)配置,點(diǎn)擊Software菜單,啟動(dòng)Software Platform Setting。系統(tǒng)會(huì)彈出軟件平臺(tái)的配置窗口,可以看到共有3個(gè)可配置項(xiàng)——Software Platform、OS and Libraries和Drivers。右方的窗口為可配置選項(xiàng)的參數(shù)。首先對(duì)Software Platform進(jìn)行配置,點(diǎn)擊Software Platform,在窗口右側(cè)可以看到可配置參數(shù),包括兩個(gè)子窗口,其一是processor parameters,其中包括處理器主頻信息、交叉編譯器等選項(xiàng)。其中,extra compiler flag指定了在生成BSP與庫(kù)的過(guò)程中,交叉編譯器所用的編譯標(biāo)志,archiver和compiler分別指定了生成BSP與庫(kù)所用的工具鏈,在這里只需保持默認(rèn)即可。在OS and Library settings子窗口中打開(kāi)OS的下拉菜單,選擇 Petalinux,版本只有 1.00.b,如果第一步?jīng)]有完成,則在點(diǎn)開(kāi)OS的下拉菜單后,沒(méi)有Petalinux選項(xiàng)。
完成上一步之后,選中OS and Library可配置選項(xiàng),這里主要是針對(duì)開(kāi)發(fā)板對(duì)μClinux的BSP進(jìn)行配置,包括Flash與Memory以及輸入輸出調(diào)試端口的配置,在這里主要對(duì)以下參數(shù)進(jìn)行修改:
最后點(diǎn)擊 OK,退出,基于 Petalinux的 MicroBlaze軟件平臺(tái)配置完成。下一步是根據(jù)軟件平臺(tái)的配置生成針對(duì)MicroBlaze處理器的BSP與庫(kù),使Petalinux與開(kāi)發(fā)板的信息交互成為可能。進(jìn)入EDK的Software菜單,點(diǎn)擊Generate BSP and Libraries,系統(tǒng)會(huì)自動(dòng)生成板級(jí)支持包與庫(kù)。之后就可以在microblaze_0/libsrc/petalinux_v1_00_b文件夾下生成auto-config.in文件[3]。
軟件平臺(tái)完成后需要對(duì)內(nèi)核進(jìn)行配置,嵌入式系統(tǒng)開(kāi)發(fā)一般采用交叉編譯的方法,通過(guò)PC機(jī)對(duì)內(nèi)核和應(yīng)用程序進(jìn)行編譯,具體步驟如下:
(1)將工程所在目錄復(fù)制到Petalinux解壓目錄下的~/hardware/user-platforms目錄下。
(2)進(jìn)入 Petalinux解壓目錄,運(yùn)行 source./settings.sh命令,設(shè)置Petalinux環(huán)境變量。
(3)進(jìn)入~/software/petalinux-dist目錄,運(yùn)行 petalinuxnew-platform-k 2.6-v Xilinx-p ml402新建用戶平臺(tái);其中-v后綴為FPGA的生產(chǎn)廠商,-p后綴為工程使用的FPGA開(kāi)發(fā)板名稱,-k為配置內(nèi)核的版本。然后運(yùn)行make menuconfig命令,進(jìn)入Vendor/Product Selection選項(xiàng),選擇相應(yīng)的平臺(tái),退出并保存。
(4)進(jìn)入工程所在文件夾,運(yùn)行petalinux-copy-autoconfig命令,將libgen生成的microblaze_0/libsrc/Kconfig.auto和autoconfig.in轉(zhuǎn)換成linux格式,并拷貝到當(dāng)前活躍的platform下(例如 software/linux-2.6.x/arch/Microblaze/platform/ml402)。它是根據(jù)在make menuconfig中選擇的vendor/platform來(lái)拷貝的。
(5)內(nèi)核的配置與編譯
搭建的底層硬件平臺(tái)的不同決定了系統(tǒng)內(nèi)核的區(qū)別,參考文獻(xiàn)[2]中薛慧敏針對(duì)不同情況給出了較為詳細(xì)的配置過(guò)程,可作為參考,在此不再贅述。
(6)Xmd下載啟動(dòng)
Xmd是Xilinx EDK提供的調(diào)試工具,可以使用該工具對(duì)EDK開(kāi)發(fā)的工程進(jìn)行調(diào)試。使用該方法下載image文件,啟動(dòng)Petalinux后,通過(guò)串口超級(jí)終端可以看到系統(tǒng)啟動(dòng)過(guò)程。
Petalinux移植成功后,就可以使用petalinux-new-app命令在其上建立軟件應(yīng)用工程,進(jìn)行軟件應(yīng)用的開(kāi)發(fā)。新建的軟件應(yīng)用工程放在~/petalinux/software/user-apps。
在petalinux-dist文件夾下輸入命令:petalinux-newapp petaserver,其中petaserver為應(yīng)用工程名稱。創(chuàng)建成功后,在user-apps文件夾下新建了以工程名稱petaserver為名稱的文件夾,里面包括.C的應(yīng)用程序、Makefile的編譯規(guī)則和readme的幫助文件。
進(jìn)入新建的應(yīng)用工程文件夾,輸入命令:gedit petaserver.c,打開(kāi)文本編輯器,對(duì).C的應(yīng)用程序進(jìn)行編輯。本應(yīng)用工程主要是作為網(wǎng)絡(luò)服務(wù)器,接收客戶端傳送的命令,消息經(jīng)過(guò)處理后再回饋給客戶端,主要流程如圖2所示。
圖2 Socket通信流程圖
現(xiàn)行的網(wǎng)絡(luò)協(xié)議中TCP/IP協(xié)議是最通用的一個(gè),因此,本程序也使用該協(xié)議實(shí)現(xiàn)網(wǎng)絡(luò)的互聯(lián)[4]。
Socket接口是 TCP/IP網(wǎng)絡(luò)的 API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來(lái)開(kāi)發(fā)TCP/IP網(wǎng)絡(luò)上的應(yīng)用程序。網(wǎng)絡(luò)的 Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket具有一個(gè)類似于打開(kāi)文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個(gè)整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^(guò)該Socket實(shí)現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報(bào)式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對(duì)于面向連接的、無(wú)差錯(cuò)的、發(fā)送先后順序一致的、包長(zhǎng)度不限和非重復(fù)的TCP服務(wù)應(yīng)用;數(shù)據(jù)報(bào)式Socket是一種無(wú)連接的Socket,對(duì)應(yīng)于無(wú)連接的 UDP服務(wù)應(yīng)用,主要以獨(dú)立的數(shù)據(jù)報(bào)進(jìn)行網(wǎng)絡(luò)傳輸,數(shù)據(jù)報(bào)的最大長(zhǎng)度為32 KB,傳輸不保證順序性、可靠性和無(wú)重復(fù)性,它通常用于單個(gè)報(bào)文傳輸或可靠性不重要的場(chǎng)合。根據(jù)以上特點(diǎn),本應(yīng)用選擇流式Socket[1]。
(1)服務(wù)器端petaserver.c主要代碼如下:
(2)啟動(dòng)服務(wù)器
程序編寫(xiě)好后,重新編譯,生成image.bin文件,下載該文件。
打開(kāi)超級(jí)終端,系統(tǒng)啟動(dòng)后輸入用戶名與密碼,進(jìn)入petalinux系統(tǒng)執(zhí)行下列命令:
可以看到服務(wù)器端啟動(dòng)語(yǔ)句輸出:
這時(shí)打開(kāi)PC機(jī)客戶端,客戶端使用成都眾山科技有限公司提供的TCP/UDP Socket調(diào)試工具 V2.3,點(diǎn)擊TCP Client按鈕,在彈出的窗口中輸入服務(wù)器IP地址:192.168.0.10,端口:8000,點(diǎn)擊連接按鈕,可以看到當(dāng)PC機(jī)客戶端向開(kāi)發(fā)板上服務(wù)器端發(fā)出連接請(qǐng)求時(shí),服務(wù)器端通過(guò)PC機(jī)超級(jí)終端輸出:
同時(shí)在PC機(jī)socket客戶端回顯:Successfully connect;
客戶端向服務(wù)器發(fā)送hello petalinux;
超級(jí)終端顯示服務(wù)器端已經(jīng)接收到客戶端發(fā)來(lái)的信息,屏幕輸出為:15(接收到的字節(jié)長(zhǎng)度)和hello petalinux(接收到的內(nèi)容)。
至此說(shuō)明客戶端與服務(wù)器端完成了網(wǎng)絡(luò)的連通,后續(xù)就可以接入外圍設(shè)備對(duì)系統(tǒng)進(jìn)行進(jìn)一步的開(kāi)發(fā)與完善了。
本文簡(jiǎn)單介紹了基于Petalinux的嵌入式系統(tǒng)的開(kāi)發(fā)與移植過(guò)程以及客戶端與服務(wù)器端Socket的創(chuàng)建過(guò)程,通過(guò)在客戶端及服務(wù)器端創(chuàng)建Socket實(shí)現(xiàn)了PC機(jī)與Petalinux操作系統(tǒng)的實(shí)時(shí)網(wǎng)絡(luò)通信,實(shí)驗(yàn)證明Petalinux的穩(wěn)定性和實(shí)時(shí)性較好,為接下來(lái)在該系統(tǒng)上進(jìn)行網(wǎng)絡(luò)應(yīng)用程序開(kāi)發(fā)打下了基礎(chǔ),能夠滿足進(jìn)一步實(shí)驗(yàn)需求。
[1]歐文盛.ARM嵌入式 Linux應(yīng)用實(shí)例開(kāi)發(fā)[M].北京:中國(guó)電力出版社,2008.
[2]薛慧敏,武傳華,路后兵,等.基于 MicroBlaze的 Petalinux嵌入式操作系統(tǒng)移植[J].微計(jì)算機(jī)信息,2011,27(8):109-110.
[3]薛小剛,葛毅敏.Xilinx ISE9.x FPGA/CPLD設(shè)計(jì)指南[M].北京:人民郵電出版社,2007.
[4]IT同路人.Linux標(biāo)準(zhǔn)學(xué)習(xí)教程[M].北京:人民郵電出版社,2008.