- 8 - - 9 -
第9期
2015年5月
N o .9
M a y ,2 0 1 5
Windows平台下的lwip协议栈移植
张青青
(咸阳职业技术学院,陕西 咸阳 712000)
摘 要:文章主要 介绍基于 wind o ws环境下的lwip协议栈的移植 方法,分析了移植过 程中需要注意的各种关键 点,讨论了内存,
线程,通知和保护机制的适配方法,最终实现了lwip在windows平台下的移植。
关键词:l w i p ;信 号 量 ;邮 箱
作者简介:张青青(1986- ),女,陕西咸阳人,助教,研究方向:计算机应用。
1 引言
LwIP是一套轻量级的开源TCP/IP协议栈,在需要网络通
信的嵌入式平台上得到广泛应用。由于网络协议经常需要动
态(实时)和静态(单步)调试手段的结合,而市场现有的嵌
入式模拟器和板载调试器无法很好的满足这种调试需求,并
且成本高昂。
鉴于上述问题,为方便基于嵌入式系统的网络应用的开
发与调试,我们提出了在成熟的WINDOWS开发环境进行LwIP
协议栈调试的想法。要想在实现此想法最关键的一步就是将
该协议栈 移 植于 w i n d o w s 平台下。
我们了解LwIP协议栈的基本架构和内存管理机制,确认
移植的可行性。基于VC++ 6.0开发环境,移植LwIP_v1.2.0。在
移植时,注意下述移植要素,才能保证LwIP的顺利启动与执
行。这些关键点包括以下内容。
2 内存
LwIP协议栈在实现时重点关注如何在拥有完整尺度的
TCP/IP协议前提下,尽可能减小RAM的使用。LwIP协议栈在内
存 管 理 上 的 独 特 设 计 ,使 得 其 适 合 于 在 只 拥 有 数 千 字 节 R A M
和40k左右ROM的嵌入式系统中使用。
不过,对于WINDOWS系统,我们不必关注如何减小内
存占用,因为移植LwIP协议栈到WINDOWS系统,目的是借用
WINDOWS系统更方便的调试LwIP网络应用。内存不是LwIP移
植到WINDOWS系统的瓶颈。但是,考虑到,给内存调试预留一
定条件,若完全不考虑内存限制,有可能导致在WINDOWS上正
常运行的LwIP网络应用,因为内存配置差别太大,程序移植
到嵌入式系统之后,运行时产生意想不到的问题。这里我们
还是需要强调和注意LwIP内存的相关接口与参数配置。
内存初始化参数:
LwIP协议栈可以使用的内存都取自静态数组:
u8_t ram_heap[MEM_SIZE_ALIGNED + (2*SIZEOF_
STRUCT_MEM) + MEM_ALIGNMENT];
内存定义并非只要定义一个总的内存大小就行。LwIP定
义了数个静态变量,让内存管理层次化,方便理解和阅读。我
们着重关注LwIP移植需要配置的参数,下面依次介绍。
( 1 )M E M _ S I Z E
#define MEM_SIZE_ALIGNED LWIP_MEM_ALIGN_
SIZE(MEM_SIZE)
#define MEM_SIZE 10240
(2)MEM_ALIGNMENT
#define MEM_ALIGNMENT 4
内存初始化过程:
首先,在函数mem_init中完成内存管理链表的初始化,
主要工作如下:
void mem_init(void)
{
ram = LWIP_MEM_ALIGN(ram_heap); /* 对齐内存首
指针 */
mem_sem = sys_sem_new(1);
}
接着,在memp_init中完成堆内存的初始化,memp_
memory变量记录了LwIP系统协议数据真正使用的内存
空间。
#define MEMP_MAX 120000
3 线程
LwIP协议栈以线程为单位运行,最少只有一个TCP/IP线
程(即Tcpip_thread),该线程负责处理所有的TCP/UDP连
接,各种网络程序都通过TCP/IP线程与网络交互。
在WINDOWS系统中,既有进程,又有线程。考虑到LwIP协
议栈在多线程运行时,线程之间需要共享变量,最终采用
WINDOWS线程与LwIP的工作线程进行适配的方式。同时,专门
定义了线程结构,用于记录和管理线程参数,主要适配代码
如下。
(1)线程管理结构
struct threadlist{
struct sys_timeouts timeouts; // 线
程时间管理
DWORD id;
// 线程ID
struct threadlist* next;
// 指向下一个线程结构
}
( 2 )创 建 线 程
sys_thread_t sys_thread_new(char* name, void
(*func)(void* arg), void* arg, int stacksize, int
prio)
{
struct threadlist* new_thread;
}
4 通知与保护
LwIP支持多线程,必然涉及线程之间的通信和全局变量
的访问保护。如对于协议栈的数据管理链表pbuff_list,就
存在被多个线程访问和改写的可能。LwIP提供了三种不同的
无线互联科技
Wireless Internet Technology
评论1