LwIP在嵌入式Nios II软核处理器上的移植及应用

2010-09-04 02:33元泽怀
肇庆学院学报 2010年5期
关键词:开发板驱动程序调用

元泽怀

(肇庆学院电子信息与机电工程学院,广东肇庆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-),男,广东惠来人,肇庆学院电子信息与机电工程学院高级实验师,硕士.

猜你喜欢
开发板驱动程序调用
基于STM32H7的FDCAN通信系统设计与实现∗
核电项目物项调用管理的应用研究
阻止Windows Update更新驱动程序
系统虚拟化环境下客户机系统调用信息捕获与分析①
计算机硬件设备驱动程序分析
浅析单片机开发板的设计与制作
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
利用RFC技术实现SAP系统接口通信
MiniGUI在基于OMAP5912开发板上的移植
妙用鼠标驱动