kaiyun官方注册
您所在的位置: 首页> 可编程逻辑> 设计应用> 基于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网站原创,未经授权禁止转载。
Baidu
map