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

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

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

    本設(shè)計方案采用Xilinx EDK 10.1在ML402開發(fā)板搭建一個最簡化的硬件平臺,結(jié)構(gòu)如圖1所示。

xil

 

    圖中各部件在FPGA 內(nèi)部以IP核的形式構(gòu)建并連接,系統(tǒng)以帶有32 bit MicroBlaze軟核的FPGA作為控制中心,SysACE用于存放文件系統(tǒng)和應用程序配置文件;INTC用來實現(xiàn)中斷控制;串口可在調(diào)試時輸出系統(tǒng)的運行信息;以太網(wǎng)控制器用來實現(xiàn)以太網(wǎng)功能;DDR_SDRAM通過XCL總線與處理器相連,用于對片外存儲器進行訪問[2]。
1.2 軟件平臺的配置
    在移植Petalinux之前,必須配置BSP(Board Support Package)。所謂BSP,就是為給定的板子提供特定操作系統(tǒng)支持的代碼。介于主板硬件和操作系統(tǒng)之間,屬于操作系統(tǒng)的一部分,主要目的是為了支持操作系統(tǒng),使之能夠更好地運行于硬件主板。
    Xilinx EDK已經(jīng)包括相應的BSP產(chǎn)生器,因此,第一步只需要把解壓的Petalinux文件夾下的hardware/edk_user_repository/PetaLogix/bsp/petalinux_v1_00_b文件夾拷貝到EDK文件夾下的\sw\lib\bsp目錄下進行相應的配置即可。接下來打開已建立的硬件工程,進行軟件平臺配置,點擊Software菜單,啟動Software Platform Setting。系統(tǒng)會彈出軟件平臺的配置窗口,可以看到共有3個可配置項——Software Platform、OS and Libraries和Drivers。右方的窗口為可配置選項的參數(shù)。首先對Software Platform進行配置,點擊Software Platform,在窗口右側(cè)可以看到可配置參數(shù),包括兩個子窗口,其一是processor parameters,其中包括處理器主頻信息、交叉編譯器等選項。其中,extra compiler flag指定了在生成BSP與庫的過程中,交叉編譯器所用的編譯標志,archiver和compiler分別指定了生成BSP與庫所用的工具鏈,在這里只需保持默認即可。在OS and Library settings子窗口中打開OS的下拉菜單,選擇Petalinux,版本只有1.00.b,如果第一步?jīng)]有完成,則在點開OS的下拉菜單后,沒有Petalinux選項。
    完成上一步之后,選中OS and Library可配置選項,這里主要是針對開發(fā)板對?滋Clinux的BSP進行配置,包括Flash與Memory以及輸入輸出調(diào)試端口的配置,在這里主要對以下參數(shù)進行修改:
    Lmb memory:dlmb_crtlr
    Main memory:DDR_SDRAM
    Stdin:RS232_Uart
    Stdout:RS232_Uart
    最后點擊OK,退出,基于Petalinux的MicroBlaze軟件平臺配置完成。下一步是根據(jù)軟件平臺的配置生成針對MicroBlaze處理器的BSP與庫,使Petalinux與開發(fā)板的信息交互成為可能。進入EDK的Software菜單,點擊Generate BSP and Libraries,系統(tǒng)會自動生成板級支持包與庫。之后就可以在microblaze_0/libsrc/petalinux_v1_00_b文件夾下生成auto-config.in文件[3]。
1.3 Petalinux操作系統(tǒng)的移植
    軟件平臺完成后需要對內(nèi)核進行配置,嵌入式系統(tǒng)開發(fā)一般采用交叉編譯的方法,通過PC機對內(nèi)核和應用程序進行編譯,具體步驟如下:
    (1)將工程所在目錄復制到Petalinux解壓目錄下的
~/hardware/user-platforms目錄下。
    (2)進入Petalinux解壓目錄,運行source ./settings.sh命令,設(shè)置Petalinux環(huán)境變量。
    (3)進入~/software/petalinux-dist目錄,運行petalinux-new-platform-k 2.6-v Xilinx-p ml402新建用戶平臺;其中-v后綴為FPGA的生產(chǎn)廠商,-p后綴為工程使用的FPGA開發(fā)板名稱,-k為配置內(nèi)核的版本。然后運行make menuconfig命令,進入Vendor/Product Selection選項,選擇相應的平臺,退出并保存。
    (4)進入工程所在文件夾,運行petalinux-copy-auto-
config命令,將libgen生成的microblaze_0/libsrc/Kconfig.auto和autoconfig.in轉(zhuǎn)換成linux格式,并拷貝到當前活躍的platform下(例如software/linux-2.6.x/arch/Microblaze/platform/ml402)。它是根據(jù)在make menuconfig中選擇的vendor/platform來拷貝的。
    (5)內(nèi)核的配置與編譯
    搭建的底層硬件平臺的不同決定了系統(tǒng)內(nèi)核的區(qū)別,參考文獻[2]中薛慧敏針對不同情況給出了較為詳細的配置過程,可作為參考,在此不再贅述。
    (6)Xmd下載啟動
    Xmd是Xilinx EDK提供的調(diào)試工具,可以使用該工具對EDK開發(fā)的工程進行調(diào)試。使用該方法下載image文件,啟動Petalinux后,通過串口超級終端可以看到系統(tǒng)啟動過程。
2 網(wǎng)絡(luò)通信程序的開發(fā)
    Petalinux移植成功后,就可以使用petalinux-new-app命令在其上建立軟件應用工程,進行軟件應用的開發(fā)。新建的軟件應用工程放在~/petalinux/software/user-apps。
2.1 軟件應用工程的建立
    在petalinux-dist文件夾下輸入命令:petalinux-new-app petaserver,其中petaserver為應用工程名稱。創(chuàng)建成功后,在user-apps文件夾下新建了以工程名稱petaserver為名稱的文件夾,里面包括.C的應用程序、Makefile的編譯規(guī)則和readme的幫助文件。
2.2 Socket程序的創(chuàng)建
    進入新建的應用工程文件夾,輸入命令:gedit petaserver.c,打開文本編輯器,對.C的應用程序進行編輯。本應用工程主要是作為網(wǎng)絡(luò)服務器,接收客戶端傳送的命令,消息經(jīng)過處理后再回饋給客戶端,主要流程如圖2所示。

    現(xiàn)行的網(wǎng)絡(luò)協(xié)議中TCP/IP協(xié)議是最通用的一個,因此,本程序也使用該協(xié)議實現(xiàn)網(wǎng)絡(luò)的互聯(lián)[4]。
    Socket接口是TCP/IP網(wǎng)絡(luò)的API,Socket接口定義了許多函數(shù)或例程,程序員可以用它們來開發(fā)TCP/IP網(wǎng)絡(luò)上的應用程序。網(wǎng)絡(luò)的 Socket數(shù)據(jù)傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket具有一個類似于打開文件的函數(shù)調(diào)用Socket(),該函數(shù)返回一個整型的Socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^該Socket實現(xiàn)的。常用的Socket類型有兩種:流式Socket(SOCK_STREAM)和數(shù)據(jù)報式Socket(SOCK_DGRAM)。流式是一種面向連接的Socket,針對于面向連接的、無差錯的、發(fā)送先后順序一致的、包長度不限和非重復的TCP服務應用;數(shù)據(jù)報式Socket是一種無連接的Socket,對應于無連接的UDP服務應用,主要以獨立的數(shù)據(jù)報進行網(wǎng)絡(luò)傳輸,數(shù)據(jù)報的最大長度為32 KB,傳輸不保證順序性、可靠性和無重復性,它通常用于單個報文傳輸或可靠性不重要的場合。根據(jù)以上特點,本應用選擇流式Socket[1]。
    (1)服務器端petaserver.c主要代碼如下:
    {
        if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
//創(chuàng)建套接字Socket函數(shù)可以調(diào)用Socket函數(shù),
該函數(shù)返回一個類似于文件描述符的句柄
        {
          fprintf(stderr,"socket error!\n");
          exit(1);
        }
        if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct
sockaddr))==-1)  //Bind函數(shù)將socket與本機上
的一個端口相關(guān)聯(lián),在該端口監(jiān)聽服務請求
        {
          fprintf(stderr,"bind error!\n");
          exit(1);
        }
        if(listen(sockfd,10)==-1)   // Listen函數(shù)將一個
套接字轉(zhuǎn)換為被動傾聽套接字
        {
          fprintf(stderr,"listen error!\n");
          exit(1);
        }
    if((connfd=accept(sockfd,(struct sockaddr *)&their_addr,
&sin_size))==-1)
    //Accept函數(shù)從傾聽套接字的
完成連接隊列中接收客戶端連接請求
        {
          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函數(shù)用來控制對套接字的寫操作
        {
          fprintf(stderr,"send error!\n");
          exit(1);
        }
    //顯示連接成功,開始接收客戶端信息
        while((len1=recv(connfd,str,100,0)) > 0)
//recv函數(shù)用來控制對套接字的讀操作
        {
          len1=recv(connfd,str,100,0);
          printf("\n收到字符數(shù):%d\n",len1);
          str[len1]=0;
          printf("Received from client:%s\n",str);
        }
        close(sockfd);//Close函數(shù)用來關(guān)閉一個
套接字描述符
    }
    (2)啟動服務器
    程序編寫好后,重新編譯,生成image.bin文件,下載該文件。
    打開超級終端,系統(tǒng)啟動后輸入用戶名與密碼,進入petalinux系統(tǒng)執(zhí)行下列命令:
    ls /bin 回車
    petaserver 回車
    可以看到服務器端啟動語句輸出:
    SOCKET: Creating socket..done.
    SOCKET: start bind socket..done.
    SOCKET: start listen..done.
    這時打開PC機客戶端,客戶端使用成都眾山科技有限公司提供的TCP/UDP Socket 調(diào)試工具 V2.3,點擊TCP Client按鈕,在彈出的窗口中輸入服務器IP地址:192.168.0.10,端口:8000,點擊連接按鈕,可以看到當PC機客戶端向開發(fā)板上服務器端發(fā)出連接請求時,服務器端通過PC機超級終端輸出:
    SOCKET:start accept..server:got connection from 192.168.0.1
    Successfully connect
    同時在PC機socket客戶端回顯:Successfully connect;
    客戶端向服務器發(fā)送hello petalinux;
    超級終端顯示服務器端已經(jīng)接收到客戶端發(fā)來的信息,屏幕輸出為:15(接收到的字節(jié)長度)和hello petalinux(接收到的內(nèi)容)。
    至此說明客戶端與服務器端完成了網(wǎng)絡(luò)的連通,后續(xù)就可以接入外圍設(shè)備對系統(tǒng)進行進一步的開發(fā)與完善了。
    本文簡單介紹了基于Petalinux的嵌入式系統(tǒng)的開發(fā)與移植過程以及客戶端與服務器端Socket的創(chuàng)建過程,通過在客戶端及服務器端創(chuàng)建Socket實現(xiàn)了PC機與Petalinux操作系統(tǒng)的實時網(wǎng)絡(luò)通信,實驗證明Petalinux的穩(wěn)定性和實時性較好,為接下來在該系統(tǒng)上進行網(wǎng)絡(luò)應用程序開發(fā)打下了基礎(chǔ),能夠滿足進一步實驗需求。
參考文獻
[1] 歐文盛.ARM嵌入式Linux應用實例開發(fā)[M].北京:中國電力出版社,2008.
[2] 薛慧敏,武傳華,路后兵,等.基于MicroBlaze的Petalinux嵌入式操作系統(tǒng)移植[J].微計算機信息,2011,27(8):109-110.
[3] 薛小剛,葛毅敏.Xilinx ISE9.x FPGA/CPLD設(shè)計指南[M]. 北京:人民郵電出版社,2007.
[4] IT同路人.Linux標準學習教程[M].北京:人民郵電出版社,2008.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久综合狠狠综合久久激情| 欧美日韩精品免费| 亚洲美女色禁图| 久久精品国产第一区二区三区最新章节| 亚洲理论在线| 亚洲黄色av一区| 亚洲国产精品传媒在线观看 | 亚洲第一福利视频| 激情综合网址| 永久91嫩草亚洲精品人人| 狠狠久久综合婷婷不卡| 韩国一区电影| 精品盗摄一区二区三区| 狠狠久久亚洲欧美| 亚洲国产精品va在线看黑人| 亚洲丰满少妇videoshd| 亚洲黄色一区二区三区| 亚洲日韩中文字幕在线播放| 99精品久久久| 亚洲一区二区四区| 午夜精品视频在线观看一区二区| 欧美一区二区精品久久911| 久久激情网站| 亚洲区欧美区| 99精品视频免费观看视频| 一区二区三区福利| 亚洲欧美国产77777| 欧美在线视频观看| 久久视频在线视频| 欧美成人高清视频| 欧美日韩高清区| 国产精品成人在线观看| 国产精品亚洲综合色区韩国| 国产人成一区二区三区影院| 黄色资源网久久资源365| 亚洲国产精品久久| 一本久久a久久精品亚洲| 亚洲一区精品电影| 午夜视频在线观看一区二区| 亚洲高清免费在线| 日韩午夜电影在线观看| 午夜在线精品偷拍| 久久夜色精品国产欧美乱极品 | 国内精品嫩模av私拍在线观看| 激情成人综合| 亚洲欧洲日产国产网站| 亚洲手机视频| 亚洲高清影视| 亚洲午夜激情网页| 久久精品亚洲精品| 欧美—级高清免费播放| 国产精品稀缺呦系列在线| 国产亚洲精品福利| 亚洲精品国精品久久99热一| 亚洲在线观看免费| 亚洲黄色三级| 亚洲一区在线观看免费观看电影高清| 欧美一区二区在线免费播放| 免费视频一区| 国产精品美女在线观看| 伊人久久男人天堂| 亚洲色无码播放| 久久精品视频免费观看| 亚洲视频导航| 美女精品一区| 国产精品青草久久久久福利99| 激情av一区| 亚洲一区二区三区精品在线观看| 亚洲国产精品一区二区www| 亚洲一区免费网站| 免费在线观看精品| 国产精品伊人日日| 亚洲乱码国产乱码精品精可以看 | 亚洲啪啪91| 欧美一区二区三区久久精品| 欧美福利视频| 国产亚洲欧美日韩一区二区| 日韩一级在线观看| 亚洲黄色尤物视频| 午夜精品影院| 欧美日韩91| 在线观看国产精品网站| 午夜国产精品视频| 国产精品99久久久久久久久| 免费国产自线拍一欧美视频| 国产精品视频网站| 亚洲久久视频| 亚洲日本欧美| 久久久夜夜夜| 国产欧美精品在线| 在线亚洲高清视频| 日韩一级片网址| 美女视频黄免费的久久| 国产欧美一区在线| 亚洲调教视频在线观看| 99精品国产一区二区青青牛奶| 久久久综合激的五月天| 国产日韩欧美精品| 亚洲天堂成人在线视频| 亚洲视频1区2区| 欧美精品在线免费播放| 在线播放日韩专区| 欧美专区第一页| 性欧美暴力猛交另类hd| 国产精品扒开腿做爽爽爽视频| 亚洲精品久久久久久下一站| 最新中文字幕一区二区三区| 久久蜜臀精品av| 国产一区二区三区久久久久久久久| 亚洲无人区一区| 亚洲综合999| 国产精品福利网| 一区二区三区四区国产| 一区二区三区回区在观看免费视频| 欧美国产一区二区| 亚洲国产精品精华液2区45| 亚洲国产精品精华液2区45| 久久夜色精品国产| 在线电影国产精品| 亚洲欧洲日本在线| 欧美r片在线| 亚洲国产欧美一区二区三区同亚洲 | 最新高清无码专区| 欧美99在线视频观看| 亚洲电影成人| 亚洲免费电影在线观看| 欧美精品乱码久久久久久按摩| 亚洲精品免费一二三区| 在线综合+亚洲+欧美中文字幕| 欧美天天影院| 亚洲婷婷国产精品电影人久久| 欧美亚洲综合网| 国产视频综合在线| 久久国产精品第一页| 久久一区二区三区四区| …久久精品99久久香蕉国产| 亚洲人成在线观看一区二区| 欧美精品久久久久久久久老牛影院 | 欧美午夜精品久久久| 亚洲午夜一级| 久久精品国产免费看久久精品| 黄色成人在线观看| 亚洲全部视频| 欧美日韩亚洲一区二区三区在线| 在线视频欧美日韩精品| 欧美在线视频观看免费网站| 国产最新精品精品你懂的| 91久久久久| 欧美三级电影大全| 亚洲欧美精品中文字幕在线| 久久九九全国免费精品观看| 在线不卡中文字幕| 亚洲视频香蕉人妖| 国产色综合久久| 最新国产拍偷乱拍精品 | 国产精品私人影院| 久久国产综合精品| 欧美日本精品一区二区三区| 亚洲一级黄色av| 久久天天综合| 亚洲久久视频| 久久久av毛片精品| 91久久精品日日躁夜夜躁国产| 亚洲欧美日韩专区| 一区二区三区在线观看欧美| 中日韩视频在线观看| 国内精品视频666| 一区二区三区 在线观看视频| 国产三级欧美三级日产三级99| 亚洲精品午夜精品| 欧美视频二区36p| 久久精品国产精品亚洲综合| 欧美日韩国产成人在线91| 午夜欧美不卡精品aaaaa| 欧美激情免费观看| 午夜精品视频在线| 欧美精品一区二区三区蜜桃 | 一区二区三区日韩精品视频| 久久视频精品在线| 一区二区91| 免费亚洲婷婷| 亚洲欧美日韩国产| 欧美人牲a欧美精品| 欧美一级视频一区二区| 欧美日韩一区在线播放| 亚洲国产精品成人va在线观看| 欧美亚洲成人免费| 亚洲人成高清| 国产欧美视频一区二区| 一区二区久久久久久| 黄色精品一二区| 亚洲欧美日韩精品久久| 亚洲人午夜精品| 久久亚洲欧美国产精品乐播| 亚洲一级影院| 欧美日韩精品二区第二页| 亚洲福利免费| 国产欧美91| 亚洲在线中文字幕| 亚洲欧洲日韩综合二区|