《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于Petalinux的Socket網絡通信系統設計與實現
基于Petalinux的Socket網絡通信系統設計與實現
來源:微型機與應用2012年第8期
楊 謝,武傳華,路后兵,楊 標
(合肥電子工程學院,安徽 合肥230037)
摘要: 介紹了一款針對MicroBlaze軟核處理器特別開發的嵌入式操作系統Petalinux,成功地實現了其在ML402開發板上的移植,并且在該系統上實現了基于TCP/IP協議的套接字接口Socket的網絡通信。
Abstract:
Key words :

摘  要: 介紹了一款針對MicroBlaze軟核處理器特別開發的嵌入式操作系統Petalinux,成功地實現了其在ML402開發板上的移植,并且在該系統上實現了基于TCP/IP協議的套接字接口Socket的網絡通信。
關鍵詞: FPGA;MicroBlaze軟核處理器;Petalinux移植;Socket網絡通信

    嵌入式系統是為特定目的而構建的一類計算機設備。該設備具有體積小、功耗低、可靠性穩定、高度自動化、響應速度快等特點,特別適合要求實時和多任務的體系[1]。Petalinux是由PetaLogix公司專門為在Xilinx FPGA的MicroBlaze軟核處理器上運行而開發的嵌入式Linux。Petalinux發布的版本中包含定制的Linux2.4/2.6內核原碼、U-boot內核編碼、相關的開發工具以及開發板參考硬件平臺配置,極大地方便了開發人員的使用,縮短了產品的開發周期。
    對于如何在嵌入式系統上實現遠程網絡通信這一問題,本文給出了一種基于Xilinx開發板ML402的嵌入式網絡通信系統的設計與實現方案,成功實現了開發板與PC機的實時網絡通信。
1 硬件工程設計
1.1 底層硬件平臺的選取與設計

    本設計方案采用Xilinx EDK 10.1在ML402開發板搭建一個最簡化的硬件平臺,結構如圖1所示。

xil

 

    圖中各部件在FPGA 內部以IP核的形式構建并連接,系統以帶有32 bit MicroBlaze軟核的FPGA作為控制中心,SysACE用于存放文件系統和應用程序配置文件;INTC用來實現中斷控制;串口可在調試時輸出系統的運行信息;以太網控制器用來實現以太網功能;DDR_SDRAM通過XCL總線與處理器相連,用于對片外存儲器進行訪問[2]。
1.2 軟件平臺的配置
    在移植Petalinux之前,必須配置BSP(Board Support Package)。所謂BSP,就是為給定的板子提供特定操作系統支持的代碼。介于主板硬件和操作系統之間,屬于操作系統的一部分,主要目的是為了支持操作系統,使之能夠更好地運行于硬件主板。
    Xilinx EDK已經包括相應的BSP產生器,因此,第一步只需要把解壓的Petalinux文件夾下的hardware/edk_user_repository/PetaLogix/bsp/petalinux_v1_00_b文件夾拷貝到EDK文件夾下的\sw\lib\bsp目錄下進行相應的配置即可。接下來打開已建立的硬件工程,進行軟件平臺配置,點擊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以及輸入輸出調試端口的配置,在這里主要對以下參數進行修改:
    Lmb memory:dlmb_crtlr
    Main memory:DDR_SDRAM
    Stdin:RS232_Uart
    Stdout:RS232_Uart
    最后點擊OK,退出,基于Petalinux的MicroBlaze軟件平臺配置完成。下一步是根據軟件平臺的配置生成針對MicroBlaze處理器的BSP與庫,使Petalinux與開發板的信息交互成為可能。進入EDK的Software菜單,點擊Generate BSP and Libraries,系統會自動生成板級支持包與庫。之后就可以在microblaze_0/libsrc/petalinux_v1_00_b文件夾下生成auto-config.in文件[3]。
1.3 Petalinux操作系統的移植
    軟件平臺完成后需要對內核進行配置,嵌入式系統開發一般采用交叉編譯的方法,通過PC機對內核和應用程序進行編譯,具體步驟如下:
    (1)將工程所在目錄復制到Petalinux解壓目錄下的
~/hardware/user-platforms目錄下。
    (2)進入Petalinux解壓目錄,運行source ./settings.sh命令,設置Petalinux環境變量。
    (3)進入~/software/petalinux-dist目錄,運行petalinux-new-platform-k 2.6-v Xilinx-p ml402新建用戶平臺;其中-v后綴為FPGA的生產廠商,-p后綴為工程使用的FPGA開發板名稱,-k為配置內核的版本。然后運行make menuconfig命令,進入Vendor/Product Selection選項,選擇相應的平臺,退出并保存。
    (4)進入工程所在文件夾,運行petalinux-copy-auto-
config命令,將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后,通過串口超級終端可以看到系統啟動過程。
2 網絡通信程序的開發
    Petalinux移植成功后,就可以使用petalinux-new-app命令在其上建立軟件應用工程,進行軟件應用的開發。新建的軟件應用工程放在~/petalinux/software/user-apps。
2.1 軟件應用工程的建立
    在petalinux-dist文件夾下輸入命令:petalinux-new-app petaserver,其中petaserver為應用工程名稱。創建成功后,在user-apps文件夾下新建了以工程名稱petaserver為名稱的文件夾,里面包括.C的應用程序、Makefile的編譯規則和readme的幫助文件。
2.2 Socket程序的創建
    進入新建的應用工程文件夾,輸入命令:gedit petaserver.c,打開文本編輯器,對.C的應用程序進行編輯。本應用工程主要是作為網絡服務器,接收客戶端傳送的命令,消息經過處理后再回饋給客戶端,主要流程如圖2所示。

    現行的網絡協議中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主要代碼如下:
    {
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
//創建套接字Socket函數可以調用Socket函數,
該函數返回一個類似于文件描述符的句柄
        {
          fprintf(stderr,"socket error!\n");
          exit(1);
        }
        if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct
sockaddr))==-1)  //Bind函數將socket與本機上
的一個端口相關聯,在該端口監聽服務請求
        {
          fprintf(stderr,"bind error!\n");
          exit(1);
        }
        if(listen(sockfd,10)==-1)   // Listen函數將一個
套接字轉換為被動傾聽套接字
        {
          fprintf(stderr,"listen error!\n");
          exit(1);
        }
    if((connfd=accept(sockfd,(struct sockaddr *)&their_addr,
&sin_size))==-1)
    //Accept函數從傾聽套接字的
完成連接隊列中接收客戶端連接請求
        {
          fprintf(stderr,"accept error!\n");
          exit(1);
        }
    printf("server:got connection from %s\n",inet_ntoa
(their_addr.sin_addr));
if(send(connfd,"successfully connect\n",20,0)==-1)
//send函數用來控制對套接字的寫操作
        {
          fprintf(stderr,"send error!\n");
          exit(1);
        }
    //顯示連接成功,開始接收客戶端信息
        while((len1=recv(connfd,str,100,0)) > 0)
//recv函數用來控制對套接字的讀操作
        {
          len1=recv(connfd,str,100,0);
          printf("\n收到字符數:%d\n",len1);
          str[len1]=0;
          printf("Received from client:%s\n",str);
        }
        close(sockfd);//Close函數用來關閉一個
套接字描述符
    }
    (2)啟動服務器
    程序編寫好后,重新編譯,生成image.bin文件,下載該文件。
    打開超級終端,系統啟動后輸入用戶名與密碼,進入petalinux系統執行下列命令:
    ls /bin 回車
    petaserver 回車
    可以看到服務器端啟動語句輸出:
    SOCKET: Creating socket..done.
    SOCKET: start bind socket..done.
    SOCKET: start listen..done.
    這時打開PC機客戶端,客戶端使用成都眾山科技有限公司提供的TCP/UDP Socket 調試工具 V2.3,點擊TCP Client按鈕,在彈出的窗口中輸入服務器IP地址:192.168.0.10,端口:8000,點擊連接按鈕,可以看到當PC機客戶端向開發板上服務器端發出連接請求時,服務器端通過PC機超級終端輸出:
    SOCKET:start accept..server:got connection from 192.168.0.1
    Successfully connect
    同時在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.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 国产经典大片爱情片 | 第四色在线电影 | 免费影院入口地址大全 | 看看一级毛片 | 欧美插入视频 | 国产毛片高清 | 四虎网页| 爱爱五月天 | 五月天综合激情 | 精品视频网 | 日韩视频 中文字幕 视频一区 | 全网免费在线播放视频入口 | 国产看片在线 | 99久久国产综合精品网成人影院 | 91精品久久久久久久99蜜桃 | 欧美黄色性 | 激情五月在线 | 免费一级毛片在线播放 | 你懂的视频在线 | 亚洲狠狠婷婷综合久久久久网站 | 日韩午夜| 八月丁香婷婷 | 国产精品99在线观看 | 免费观看激色视频网站bd | 国产精品一区二区三区免费 | 日本精品久久久免费高清 | 婷婷精品在线 | 国产精品久久久久久福利 | 国产高清久久99 | 99爱视频免费高清在线观看 | 瑟瑟网站免费网站入口 | 国产精品一区三区 | 久久这里只有精品9 | 国产高清自拍一区 | 激情九九 | 婷婷综合缴情亚洲五月伊 | 普通话对白国产精品一级毛片 | 欧美一区二区三区性 | 偷柏自拍亚洲欧美综合在线图 | 久久精品免观看国产成人 | 美女网站免费看 |