楊 謝,武傳華,路后兵,楊 標
(合肥電子工程學院,安徽 合肥230037)
嵌入式系統是為特定目的而構建的一類計算機設備。該設備具有體積小、功耗低、可靠性穩定、高度自動化、響應速度快等特點,特別適合要求實時和多任務的體系[1]。Petalinux是由PetaLogix公司專門為在Xilinx FPGA的MicroBlaze軟核處理器上運行而開發的嵌入式Linux。Petalinux發布的版本中包含定制的Linux2.4/2.6內核原碼、U-boot內核編碼、相關的開發工具以及開發板參考硬件平臺配置,極大地方便了開發人員的使用,縮短了產品的開發周期。
對于如何在嵌入式系統上實現遠程網絡通信這一問題,本文給出了一種基于Xilinx開發板ML402的嵌入式網絡通信系統的設計與實現方案,成功實現了開發板與PC機的實時網絡通信。
本設計方案采用Xilinx EDK 10.1在ML402開發板搭建一個最簡化的硬件平臺,結構如圖1所示。
圖中各部件在FPGA內部以IP核的形式構建并連接,系統以帶有32 bit MicroBlaze軟核的FPGA作為控制中心,SysACE用于存放文件系統和應用程序配置文件;INTC用來實現中斷控制;串口可在調試時輸出系統的運行信息;以太網控制器用來實現以太網功能;DDR_SDRAM通過XCL總線與處理器相連,用于對片外存儲器進行訪問[2]。

在移植Petalinux之前,必須配置BSP(Board Support Package)。所謂BSP,就是為給定的板子提供特定操作系統支持的代碼。介于主板硬件和操作系統之間,屬于操作系統的一部分,主要目的是為了支持操作系統,使之能夠更好地運行于硬件主板。
Xilinx EDK已經包括相應的BSP產生器,因此,第一步只需要把解壓的Petalinux文件夾下的hardware/edk_user_repository/PetaLogix/bsp/petalinux_v1_00_b文件夾拷貝到EDK文件夾下的swlibsp目錄下進行相應的配置即可。接下來打開已建立的硬件工程,進行軟件平臺配置,點擊Software菜單,啟動Software Platform Setting。系統會彈出軟件平臺的配置窗口,可以看到共有3個可配置項——Software Platform、OS and Libraries和Drivers。右方的窗口為可配置選項的參數。首先對Software Platform進行配置,點擊Software Platform,在窗口右側可以看到可配置參數,包括兩個子窗口,其一是processor parameters,其中包括處理器主頻信息、交叉編譯器等選項。其中,extra compiler flag指定了在生成BSP與庫的過程中,交叉編譯器所用的編譯標志,archiver和compiler分別指定了生成BSP與庫所用的工具鏈,在這里只需保持默認即可。在OS and Library settings子窗口中打開OS的下拉菜單,選擇 Petalinux,版本只有 1.00.b,如果第一步沒有完成,則在點開OS的下拉菜單后,沒有Petalinux選項。
完成上一步之后,選中OS and Library可配置選項,這里主要是針對開發板對μClinux的BSP進行配置,包括Flash與Memory以及輸入輸出調試端口的配置,在這里主要對以下參數進行修改:

最后點擊 OK,退出,基于 Petalinux的 MicroBlaze軟件平臺配置完成。下一步是根據軟件平臺的配置生成針對MicroBlaze處理器的BSP與庫,使Petalinux與開發板的信息交互成為可能。進入EDK的Software菜單,點擊Generate BSP and Libraries,系統會自動生成板級支持包與庫。之后就可以在microblaze_0/libsrc/petalinux_v1_00_b文件夾下生成auto-config.in文件[3]。
軟件平臺完成后需要對內核進行配置,嵌入式系統開發一般采用交叉編譯的方法,通過PC機對內核和應用程序進行編譯,具體步驟如下:
(1)將工程所在目錄復制到Petalinux解壓目錄下的~/hardware/user-platforms目錄下。
(2)進入 Petalinux解壓目錄,運行 source./settings.sh命令,設置Petalinux環境變量。
(3)進入~/software/petalinux-dist目錄,運行 petalinuxnew-platform-k 2.6-v Xilinx-p ml402新建用戶平臺;其中-v后綴為FPGA的生產廠商,-p后綴為工程使用的FPGA開發板名稱,-k為配置內核的版本。然后運行make menuconfig命令,進入Vendor/Product Selection選項,選擇相應的平臺,退出并保存。
(4)進入工程所在文件夾,運行petalinux-copy-autoconfig命令,將libgen生成的microblaze_0/libsrc/Kconfig.auto和autoconfig.in轉換成linux格式,并拷貝到當前活躍的platform下(例如 software/linux-2.6.x/arch/Microblaze/platform/ml402)。它是根據在make menuconfig中選擇的vendor/platform來拷貝的。
(5)內核的配置與編譯
搭建的底層硬件平臺的不同決定了系統內核的區別,參考文獻[2]中薛慧敏針對不同情況給出了較為詳細的配置過程,可作為參考,在此不再贅述。
(6)Xmd下載啟動
Xmd是Xilinx EDK提供的調試工具,可以使用該工具對EDK開發的工程進行調試。使用該方法下載image文件,啟動Petalinux后,通過串口超級終端可以看到系統啟動過程。
Petalinux移植成功后,就可以使用petalinux-new-app命令在其上建立軟件應用工程,進行軟件應用的開發。新建的軟件應用工程放在~/petalinux/software/user-apps。
在petalinux-dist文件夾下輸入命令:petalinux-newapp petaserver,其中petaserver為應用工程名稱。創建成功后,在user-apps文件夾下新建了以工程名稱petaserver為名稱的文件夾,里面包括.C的應用程序、Makefile的編譯規則和readme的幫助文件。
進入新建的應用工程文件夾,輸入命令:gedit petaserver.c,打開文本編輯器,對.C的應用程序進行編輯。本應用工程主要是作為網絡服務器,接收客戶端傳送的命令,消息經過處理后再回饋給客戶端,主要流程如圖2所示。

圖2 Socket通信流程圖
現行的網絡協議中TCP/IP協議是最通用的一個,因此,本程序也使用該協議實現網絡的互聯[4]。
Socket接口是 TCP/IP網絡的 API,Socket接口定義了許多函數或例程,程序員可以用它們來開發TCP/IP網絡上的應用程序。網絡的 Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket具有一個類似于打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數據報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的、無差錯的、發送先后順序一致的、包長度不限和非重復的TCP服務應用;數據報式Socket是一種無連接的Socket,對應于無連接的 UDP服務應用,主要以獨立的數據報進行網絡傳輸,數據報的最大長度為32 KB,傳輸不保證順序性、可靠性和無重復性,它通常用于單個報文傳輸或可靠性不重要的場合。根據以上特點,本應用選擇流式Socket[1]。
(1)服務器端petaserver.c主要代碼如下:


(2)啟動服務器
程序編寫好后,重新編譯,生成image.bin文件,下載該文件。
打開超級終端,系統啟動后輸入用戶名與密碼,進入petalinux系統執行下列命令:

可以看到服務器端啟動語句輸出:
這時打開PC機客戶端,客戶端使用成都眾山科技有限公司提供的TCP/UDP Socket調試工具 V2.3,點擊TCP Client按鈕,在彈出的窗口中輸入服務器IP地址:192.168.0.10,端口:8000,點擊連接按鈕,可以看到當PC機客戶端向開發板上服務器端發出連接請求時,服務器端通過PC機超級終端輸出:

同時在PC機socket客戶端回顯:Successfully connect;
客戶端向服務器發送hello petalinux;
超級終端顯示服務器端已經接收到客戶端發來的信息,屏幕輸出為:15(接收到的字節長度)和hello petalinux(接收到的內容)。
至此說明客戶端與服務器端完成了網絡的連通,后續就可以接入外圍設備對系統進行進一步的開發與完善了。
本文簡單介紹了基于Petalinux的嵌入式系統的開發與移植過程以及客戶端與服務器端Socket的創建過程,通過在客戶端及服務器端創建Socket實現了PC機與Petalinux操作系統的實時網絡通信,實驗證明Petalinux的穩定性和實時性較好,為接下來在該系統上進行網絡應用程序開發打下了基礎,能夠滿足進一步實驗需求。
[1]歐文盛.ARM嵌入式 Linux應用實例開發[M].北京:中國電力出版社,2008.
[2]薛慧敏,武傳華,路后兵,等.基于 MicroBlaze的 Petalinux嵌入式操作系統移植[J].微計算機信息,2011,27(8):109-110.
[3]薛小剛,葛毅敏.Xilinx ISE9.x FPGA/CPLD設計指南[M].北京:人民郵電出版社,2007.
[4]IT同路人.Linux標準學習教程[M].北京:人民郵電出版社,2008.