嵌入式平台中配置双协议栈的问题(1)


最近有不少网友问到如何进行那个配置双协议栈的问题。我们可以来从下面的文章中做一个具体的了解。我们都知道,网络的发展速度惊人,格式的功能以及应用令人眼花缭乱。在这些功能以及应用的背后,是众多网络协议的支持。那么这里我们来重点讲解一下Windows平台上使用Visual C++ 6.0开发环境进行嵌入式TCP/IP协议栈的开发和仿真调试手段。详细讲解了如何使用Winpcap接收和发送IP数据报文以及在Windows上配置双协议栈的一些问题。

1 引言

随着Internet的广泛的应用,在嵌入式设备中支持TCP/IP协议以连接到Internet网络并与外界通信的需求更加强烈,这就需要在嵌入式系统中支持TCP/IP协议栈.虽然目前的商用嵌入式操作系统,如VxWorks、QNX、pSOS、VRTX等,均提供基于TCP/IP的网络组件,但为了满足各个方面的应用需要,其实现过于复杂,需要占用大量的系统资源.而嵌入式系统的本身资源有限,并且其应用和功能比较单一,具有较强的针对性,因此也并不需要一个完整的TCP/IP网络协议组件,只需要实现与需求相关的部分协议,不使用的协议则不需要支持.在另一方面,对于某些特定的嵌入式系统,甚至需要优化TCP/IP协议栈或者在TCP/IP协议栈中编写自己需要的网络协议.那些不能提供开放源码的商用嵌入式系统的TCP/IP协议栈都很难满足用户的配置需求,需要用户自行开发和定制适合自己系统需求的嵌入式TCP/IP协议栈.

2 嵌入式协议栈的开发和调试问题

一般的嵌入式系统的开发和调试都是使用其相应的开发调试工具连接计算机和目标机进行交叉开发和调试.例如被广泛使用的VxWorks嵌入式实时操作系统的开发工具Tornado,它就是一套强有力的交叉开发工具,用户可以在计算机上使用图形界面对目标机上的应用程序进行调试.

但即便是使用像Tornado这样优秀的嵌入式开发环境,在交叉调试协议栈此类比较大型的程序时,还是显得力不从心,其开发调试是件费时费力的工作,大大增加了系统的开发难度和开发调试的周期.在目前的嵌入式系统的调试工具还不尽如人意的现状下,对嵌入式TCP/IP协议栈的开发如果能前期在Windows平台上进行开发和仿真调试,将是一件很有意义的工作.

嵌入式TCP/IP协议栈虽然是基于嵌入式操作系统,但除了接收和发送数据包以外,几乎并不直接与底层硬件打交道.因此在Windows平台上仿真调试和运行TCP/IP协议栈是完全可行的,可以完成绝大部分功能的开发与调试,后期再移植到嵌入式系统上,只需进一步稍加调试和测试便能实现整个嵌入式软件系统的功能和性能.这样的开发流程能够极大的提高开发的效率,减少开发的周期.

3 在Windows平台上运行嵌入式协议栈

在讲解配置双协议栈之前,我们来了解一下在Windows平台上运行嵌入式协议栈的内容。在Windows平台上仿真调试和运行TCP/IP协议栈,首先需要在Visual C++ 6.0开发环境中创建一个Win32应用程序的项目工程用于模拟嵌入式系统,嵌入式TCP/IP协议栈就是在这个Win32的应用程序中运行.这样,我们使用Windows平台下的一个进程模拟了一个多任务的嵌入式操作系统.

一个多任务嵌入式操作系统需要具有任务管理、内存管理以及任务间通信机制如信号量、消息队列等功能.因此,如想在Windows平台上运行嵌入式TCP/IP协议栈,也必须提供上述多任务嵌入式操作系统的基本功能.

在多任务嵌入式操作系统中,任务是系统进行调度的最基本的单元,参与资源竞争和CPU资源在任务间的分配,系统通过循环的方式为每个任务安排一定的 CPU时间片,而在宏观上看仿佛是若干任务并发处理,形成多任务操作系统.而在Winodows这样的通用操作系统平台上,则是由线程作为参与CPU时间 片资源竞争最小实体,因此,我们使用线程模拟嵌入式操作系统中的一个任务.任务的创建、删除和控制等操作通过调用Windows平台中提供的线程的创建、 删除和控制的Win32 API函数来实现.

在多任务操作系统中,任务与任务之间需要协调动作,相互配合,这就需要提供任务间相互通信的机制以进行同步和互斥.嵌入式系统中一般提供信号量、事件和消 息机制这三种主要的任务间通信手段.同样,在Windows平台上的Win32 API也提供相应的用于进程/线程间通信的信号量、事件和消息机制的函数.


相关内容