



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LwIP协议栈在SoPC系统中的实现 可编程单芯片系统(system-on-a-programmable-chip,SoPC)是Altera公司于2000年提出的,它综合了SOC和PLD、FPGA各自的优点。目标是将尽可能大而完整的电子系统在一块FPGA中实现。近年来,随着PLD器件制造水平、功能复杂的IP核和可重构的嵌入式处理器软核的发展,SoPC正处于高速发展阶段,已成为高效、快速的SOC解决方案之一。 嵌入式Intemet技术已逐步趋于实用化,在工控与信息电器等领域得到了可喜的应用。据专家预测,今后在Intemet上传输的信息有70来自小型嵌入式设备,构建基于嵌入式系统的网络平台已成为嵌入式领域的一个重要研究方向 。目前Intemet上的通信方式大都是基于TCP/IP协议,嵌入式设备要与Intemet网络直接交换信息,就必须支持TCP/IP协议。在当前SoPC技术和嵌入式网络技术飞速发展、日益结合的背景下,将LwIP协议栈引入到SoPC系统中,以支持嵌入式设备接入网络,是适合应用需求的。 LwIP(lightweightIP)即轻型TCP/IP协议栈,一般只需要几十K的RAM 和40K左右的ROM 就可以运行,并实现了较为完备的IP、ICMP、UDP、TCP,DHCP协议。以SOC的形式基于uC/OS II实现LwIP,并成功应用到实际当中的,已有很多文献进行了报道。但是,基于SoPC系统的LwIP的实现比较少见。谢兵森等人主要报道了如何在Altera公司提供的SoPC系统开发环境下设计嵌入式以太网网络终端,偏重于应用 。本文详细阐述LwIP协议栈及其在SoPC系统上的移植原理,在此的基础上基于SoPC系统完成LwIP协议栈的移植。1 LwIP协议栈实现原理 LwIP是瑞士计算机科学院(SCICS)的Adam Dunkels等开发的一套用于嵌入式系统的开放源码的轻型TCP/IP协议栈,LwIP实现了较为完备的IP、ICMP、UDP、TCP、DHCP协议,具有超时时间估计、快速恢复和重发、窗口调整等功能。LwIP在保持协议主要功能的基础上减少对RAM 和ROM 的占用,一般只需要几十K 的RA M 和40K左右的ROM 就可以运行,很适合同uC/OS II相配合用在嵌入式系统中。在使用和移植的过程中可根据传输数据的不同需求进行删减和增补。移植过程主要是针对系统采用的微处理器、编译器、操作系统和网络控制器做相关的移植工作。本次研究采用lwip-0.6.3版本,经移植优化的LwIP作为uC/OS II扩展的网络模块运行,为系统提供基本的网络通信功能。并且在其基础上构造了一个基于TCP的Telnet echo测试服务器,以特定网络应用任务形式运行。 LwIP可移植到操作系统上,也可在无操作系统的情况下独立运行。本次研究LwIP在uC/OS-II下实现的原理如图1。图1 LwIP实现的原理 系统硬件核心为Stratix1s10的FPGA芯片。根据开发板的资源和研究要求将FPGA配置成定制的SoPC系统,具体的硬件系统如图2所示。网络控制器是SMSC公司生产的自适应10M/100M第3代快速以太网控制器LAN91c111,集成了SMSC/CD协议的MAC(媒体层)和PHY(物理层)。外围设备的驱动和控制接口都有相应的IP核来完成。 系统软件核心为uC/OS-II-2.76,是一个源码开放的适合于小型、微控制器的占先式多任务管理的实时操作系统。它内核短小精悍、可裁减、执行时间确定。uC/OS II提供的仅仅只是一个实时的调度及任务间通信的内核,没有集成网络协议。针对NiosII处理器,首先完成uC/OS-II的移植工作。2 LwIP实现的硬件平台 采用Altera公司的Stratix1s10开发板。在Altera公司的FPGA集成开发环境QuartusII 4.0和SoPC Builder下构建基于Avalon总线的SoPC系统。根据研究的需要,在FPGA上定制的SoPC系统硬件映像如图2所示。图2 SoPC系统的硬件映像 SoPC系统的硬件核心是Nios II处理器,Nios II内核有3种配置快速(Nios II/f)、标准(Nios II/s)和经济型(Nios II/e)。Nios II是Nios的第2代,是专门针对Altera的可编程逻辑和可编程单芯片系统(SoPC)而设计的软CPU。此处配置成标准。jtag-uart是PC机和开发板的连接电缆,功能是下载FPGA配置、软件程序和调试程序。tri_bridge是Avalon片内总线和片外设备的连接总线。lan91c111是以太网控制器接口,允许中断。3 LwIP协议栈的移植 移植LwIP协议栈,主要是针对系统所采用的Nios II处理器、GCC编译器、uC/OS-II-2.76和LAN91c111以太网控制器做相关的移植。3.1 处理器和编译器相关部分的移植 LwIP协议栈把所有和硬件,编译器相关的部分独立出来,放在/src/arch下面。/arch目录下cc.h、cpu.h、perf.h中是与Nios II和GCC相关的定义。如数据长度、字的高低位顺序等。这些应与用户实现uC/OS-II时定义的数据长度等参数是一致的。例如:#define BYTE_ORDER LITTLE_ENDIAN /Nios II默认为小端存储系统 一般情况下,C语言的结构体struct是4字节对齐的,但是在处理数据包的时候,LwIP使用的是通过结构体中不同数据的长度来读取相应的数据的。所以,一定要在定义struct的时候使用_packed关键字,让编译器放弃struct的字节对齐。在Nios II上对应GCC编译器的定义为:#define PACK_STRUCT FIELD(x)x _attribute_ (packed)#define PACK_STRUCT_STRUCT _auribute_(packed)#define PACK_STRUCT_BEGIN#define PACK_STRUCT_END3.2 改写操作系统有关部分的函数 sys_arch.c文件是和操作系统相关的一些结构和函数。和uC/OS-II的接口函数主要分为5个部分 。(1)信号量:LwIP中需用信号量通信,对信号量的处理函数:sys_sem_t sys_sem_new(u8_t count) /创建一个信号量void sys_sem_free(sys_sem_t sem)/释放并删除一个信号量void sys_sem_signal(sys_sem_t sem)/发送一个信号量u32_t sys_arch_sem_wait(sys_sem_t sem,u32_t timeout)/等待一个信号量 由于uC/OS-II已实现了信号量OS_EVENT的各种操作,且功能和LwIP上面几个函数的目的功能是完全一样的,所以只要把uC/OS II的函数重新包装成上面的函数,就可以直接使用。(2)消息队列:LwIP使用消息队列来缓冲、传递数据报文,对消息队列的处理函数如下:sys_mbox_t sys_mbox_new(void) /创建一个消息队列void sys_mbox_free(sys_mbox_t mbox ) /释放一个消息队列void sys_mbox_post(sys_mbox_t mbox,void *data)/向消息队列发送消息u32_t sys_arch_mbox_fetch(sys_mbox_t mbox,void *msg,u32_t timeout) /从消息队列中获取消息 uC/OS II同样实现了消息队列结构及其操作,但是uC/OS II没有对消息队列中的消息进行管理,因此不能直接使用,必须在uC/OS II的基础上重新实现。(3)等待超时函数:LwIP中每个与外界网络连接的线程都有自己的timeout属性,即等待超时时间。这个属性表现为每个线程的timeout时间长度, 以及超时后应调用的timeout函数,做相应的处理。用户要实现的函数如下:struct sys_timeouts *sys_arch_timeouts(void);/返回正处于运行状态的线程所对应的timeout队列指针(4)创建新线程:LwIP可以是单线程运行,也可以多线程运行。为提高效率并降低编程复杂度,用户需要实现创建新线程的函数:sys_thread_t sys_thread_new(void(*function)(void *arg),void *arg,int prio); 在uC/OS II中,没有线程的概念,只有任务。只要把OSTaskCreate封装一下,就可以实现sys_thread new。(5)系统初始化:void sys_init(void);/系统初始化3.3 网络控制器的驱动 TCP/IP协议栈引入到uC/OS II后,为了实现网络通讯还必须完成相应网络控制器驱动程序的添加。Stratix1s10开发板所带的网络芯片是由SMSC公司生产的以太网控制器芯片LAN91c111。驱动程序工作在IP协议模型的网络接口层,它提供给上层(IP层)的接口函数如下:err_t alt_avalon_lan91c111_init(struct netif *netif)/网卡初始化函数void alt_avalon_lan91c111_rx(alt_lwip_dev *dev)/网卡接收函数, 由网卡ISR调用err_t alt)avalon)lan91c111_output(struct netif *netif,struct pbuf *p,struct ip_addr *ipaddr)/网卡发送数据函数void alt_avalon_lan91c111_irq(void* context,alt_u32 interrupt)/网卡中断处理函数 以上的函数都可以分为协议栈本身的处理和对网络接口硬件的操作两部份,但硬件操作是对上层屏蔽的。4 实验测试 在Altera公司的Nios II IDE 开发环境下以前文建立的SoPC系统硬件为目标硬件建立名为lwip test的软件工程。同时,开发环境会自动建立名为lwip_test_syslib的工程。uC/OS II的初始化在lwip_test_syslib中由系统自动完成,在lwip_test中建立主函数程序框架如下:main(void)Lwip_stack_init();OSStart(); Lwip_stack_init(int thread_prio,void(*inti_done_func)(void *),void arg)函数初始化LwIP协议栈。它的形参init_done_func是函数指针,指向tcpip_init_done的函数。tcpip_init_done函数是在LwIP协议栈初始化完毕后被调用,目的是安装以太网控制器的驱动和建立相应的Telnet echo任务,监听7号端口,为客户机提供回显服务。程序编译调试通过后,将其烧入Flash中,开发板通过以太网线经Hub与局域网连接,作为局域网的一台小型嵌入式服务器运行。等待LwIP从网络服务器动态获取IP地址后,通过局域网中一台Pc机,在DOS环境下,键入ping 172.18.6.136命令向目标板发送ICMP请求,客户端可得ICMP回应。键入telnet 172.18.6.136 7(7号端口)命令登录开发板Telnet echo服务,客户端用户可在显示屏幕上看到自己键入的字符。实验说明各网络协议得到正确配置,同时各任务在内核调度管理下运行正常
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江国企招聘2025宁波市奉化区文化旅游集团有限公司招聘2人笔试参考题库附带答案详解
- 一汽解放2025校园招聘笔试参考题库附带答案详解
- 青田县2025浙江丽水市青田县事业单位招聘76人笔试历年参考题库附带答案详解
- 脑机接口视觉模拟-洞察及研究
- 赣州市2025年江西赣州市石城工业园区管委会公开招募5名大学毕业见习人员笔试历年参考题库附带答案详解
- 秀屿区2025福建莆田市秀屿区市场监督管理局(竞争股)招聘编外食品安全协管员笔试历年参考题库附带答案详解
- 温州市2025浙江温州市级事业单位招聘87人笔试历年参考题库附带答案详解
- 河池市2025广西河池市生态移民发展局招聘2人笔试历年参考题库附带答案详解
- 农产品电子商务运营方案
- Module 6 Unit2 说课稿外研版八年级英语下册
- 销售合规风险管理制度
- 药房员工销售培训
- 警校联动方案
- 让剪影动起来(教学设计)-2024-2025学年人教版(2012)美术六年级上册
- MBA硕士论文案例研究范文分享
- 五轴联动加工中心操作与基础编程 第2版 课件 1.1.1多轴机床与多轴加工类别
- 10 ai ei ui 教学设计-2024-2025学年语文一年级上册统编版
- 体育单招核心-1700-单词
- 《医院感染控制与医护人员个人防护》课件
- 2024六年级英语上册 Unit 2 Ways to go to school课时2 Let's learn-Write and say说课稿 人教PEP
- 矿山剥离承包合同(2篇)
评论
0/150
提交评论