LwIP在嵌入式Nios II软核处理器上的移植及应用
2010-09-04元泽怀
元泽怀
(肇庆学院电子信息与机电工程学院,广东肇庆526061)
LwIP在嵌入式Nios II软核处理器上的移植及应用
元泽怀
(肇庆学院电子信息与机电工程学院,广东肇庆526061)
Nios II是专门为SOPC设计的一种软核CPU,它以IP核的形式提供给嵌入式设计者.它的可配置特性给嵌入式系统设计带来了更大的灵活性,可以说它为嵌入式系统的设计提供了一种全新的思路.讨论了LwIP在NIOS II处理器上的移植实现方法,并将其成功地应用于简单socket服务器的设计中.
LwIP;Nios II;嵌入式系统;μC/OS II
Nios II处理器是用户可随时配置和构建的32位指令集和数据通道的嵌入式系统微处理器IP软核,采用avalon总线结构通信接口,带有增强的内存调试和软件功能,它可以与各种外设相结合,构成一个可定制的可编程片上系统SOPC(System On a Programable Chip).网络协议LwIP(Light weight Internet Protocol),即轻量级网络协议,是一种专门针对嵌入式系统应用而设计的网络通信协议,LwIP实现的重点是在保持TCP/IP协议主要功能的基础上减少对RAM的占用,一般它只需要几十Kbyte的RAM和40Kbyte左右的ROM就可以运行,非常适合在以Nios II处理器为核心的系统中使用.Nios II处理器系统的网络开发平台的系统模型如图1.
图1 Nios II的网络开发模型
图2 Nios II软件模型
1 LwIP在Nios II上的移植
Altera使用μC/OS-ⅡRTOS多线程环境移植LwIP,因此,要使用LwIP,必须建立基于μC/OS-ⅡRTOS上的C/C++项目.Altera对LwIP的移植是基于Nios II硬件抽象层HAL通用网络设备模式的.通过这个模式,我们可以自编新驱动程序去支撑目标媒体访问控制器(MAC),维持HAL和socket API访问硬件[1].Nios II软件体系结构见图2.
1.1 初始化LwIP协议栈
在调用OSStart()函数开始μC/OS-Ⅱ调度程序前,必须先初始化LwIP[2].
Lwip_stack_init(),这个函数执行协议栈设置.
init_done_func(),这个函数在栈初始化后被调用,函数必须调用lwip_devices_init()初始化所有安装的网络设备驱动程序,然后创建接收任务.
lwip_devices_init(),这个函数说明了所有在system.h文件里定义的已安装的网络设备驱动程序.函数返回非0值,表示初始化成功.如果成功,TCP/IP栈是可见的,然后就可为程序创建任务.
get_mac_addr()和get_ip_addr(),这2个函数在设备初始化期间被LwIP系统代码调用.这些函数是LwIP系统代码设置MAC和IP地址所必需的.
通过编写这些函数,系统可以在任意位置存储MAC地址和IP地址.
1.2 调用socket接口
一旦网络设备被初始化,程序的其余部分必须使用socket API访问IP栈.
要使用socket API建立和IP栈对话的新任务,必须使用sys_thread_new()函数,这个函数是LwIP OS移植层创建线程的一部分.sys_thread_new()调用μC/OS-ⅡOSTaskCreate()函数并执行其他LwIP指定的动作[3].我们可以通过在应用程序里加入语句#include″lwip/sys.h″调用它.
1.3 在Nios II IDE里配置LwIP
LwIP协议栈有很多配置选项,这些选项可以通过使用lwipopts.h文件里的#define来进行配置.Nios II IDE集成开发环境提供了一个图形化的用户接口GUI,见图3.通过GUI可以配置LwIP选项(也就是修改lwipopts.h文件里的#define)而不必编辑源代码,当然有些选项是必须通过lwipopts.h文件才能改变的.
图3 Light wight TCP/IP栈选项
在图中,提供了IP、TCP、ARP、UDP、DHCP等各选项的配置选择,用户可直接根据实际需要进行设置.至此,就完成了LwIP在Nios II上的整个移植过程[4].
1.4 测试
完成上面的移植修改工作后,就可以在μC/OS-Ⅱ中初始化LwIP,并创建TCP或UDP任务进行测试了.这部分是用C语言实现的.关键部分的代码和说明如下:
主程序中,创建了Lwip_init_task初始化LwIP任务(优先级0)和user_task用户任务(优先级1).1wip_init_task任务中除了初始化硬件时钟和LwIP之外,还创建了tcp ip_thread(优先级3)和tcpecho_thread(优先级4).实际上tcp ip_thread才是LwIP的主线程,多线程的Berkley API也是基于这个线程实现的,即上面的tcpecho_thread线程也要依靠tcp ip_thread线程来与外界通信.
编译下载运行,用ping ip地址命令可以得到ICMP reply响应,用telnet ip地址30(登录30号端口)命令可以看到echo server的回显效果.说明ARP、IP、ICMP、TCP协议都已正确运行.
2 应用实例
本系统使用Nios II开发板进行应用程序的调试,开发板以微控制器EP1C6Q240C8N为核心,外扩2MB FLASH和1MB SRAM存储器,用来存放调试过程中所用到的系统软件、用户代码和数据.该开发板不含网卡部分,网卡由自己实现.
下面在Nios II处理器系统上设计了一个简单的socket服务器实例,实现LwIP功能,构建一个嵌入式网络开发平台.该socket服务器实现的数据流程图如图4.
图4 简单socket服务器实现的数据流程图
该数据流程图的工作过程是:
(1)LwIP软件组件接收网络数据包(包含发自远程客户端程序的一个LED命令).
(2)LwIP通过TCP/IP协议处理进来的网络数据包,并通过套接字接口(socket API)将数据包提交给socket server task.
(3)包含在数据包中的LED命令被提取并发给LED命令队列,等待LED management tasks进行处理.
测试时,可以根据个人的网络设置情况改变开发板的IP地址(本测试中IP为192.168.1.120,端口为30),应用程序编译下载运行后,在Nios II IDE的console窗口出现如下提示:
Simple Socket Server starting up
Static IP Address is 192.168.1.120
[sss_task]Simple Socket Server listening on port 30
说明简单Socket服务器已准备就绪,开始运行.
用ping ip地址命令可以得到ICMP reply响应,用telnet ip地址30(登录30号端口)命令可以看到socket服务器的回显效果.见图5.
这时,输入相应的数字,开发板上相应的LED灯就闪烁.在Nios II IDE的console窗口出现如下提示:
[sss_handle_accept]accepted connection request from 192.168.1.113
[sss_handle_receive]processing RX data
Value for LED_PIO_BASE set to 1.
Value for LED_PIO_BASE set to 3.
Value for LED_PIO_BASE set to 7.
Value for LED_PIO_BASE set to 15.
Value for LED_PIO_BASE set to 31.
Value for LED_PIO_BASE set to 63.
Value for LED_PIO_BASE set to 127.
Value for LED_PIO_BASE set to 255.
说明ARP、IP、ICMP、TCP协议都已正确运行.
图5 简单Socket服务器的响应窗口
3 结束语
借助以太网和嵌入式技术,把嵌入式系统连接到internet上,已成为嵌入式系统今后发展的一个重要的方向.本文的创新点是在Nios II处理器上实现了LwIP网络协议的移植,并成功应用于简单socket服务器的设计.该内容后续可应用于嵌入式系统的远程智能控制等网络开发.
[1]李良仁,彭雪峰.LwIP协议栈在NIOS II系统中的移植[J].机电技术,2009(4):25-28.
[2]张翠,邓志良.LwIP协议栈在μC/OS-II上的移植和应用[J].微计算机信息,2010(3):84-85.
[3]杨玉佳,李广军,郊志勇.基于LwIP的串口以太网协议转换器的设计与实现[J].电子设计应用,2009(3):63-65.
[4]时建雷,肖铁军.面向LwIP的Nios II网络驱动程序开发[J].微计算机信息,2008(24):36-38.
The Porting of LwIP in Nios II soft-core Processor and its Application
YUAN Zehuai
(College of Electronic InformationandMechatronic Engineering,Zhaoqing University,Zhaoqing,Guangdong 526061,China)
Nios II is a kind of soft CPU designed forSOPC specially.Forembedded system designer,it is a kind of IP core.Nios II has the characteristics of reconfiguration,which brings more flexibility to the designer. Nios II has offered a kind of brand-new train of thought to Embedded System designer.The porting of LwIP in Nios IIProcessoris discussed,anditis successfully appliedto the designof asimple socketserver.
LwIP;NiosII;EmbeddedSystems;μC/OS II
TP399
A
1009-8445(2010)05-0021-04
(责任编辑:徐生然)
2010-07-15
元泽怀(1975-),男,广东惠来人,肇庆学院电子信息与机电工程学院高级实验师,硕士.