UCOS + LWIP + USB WIFI(rtl8188eu) <一>

来源:互联网 发布:怎样入侵网站修改数据 编辑:程序博客网 时间:2024/05/16 12:27

一年一个突破, 今年技术得到了质的飞跃, 将原本单机的UCOS系统加上了无线网络功能, 使这个精悍的实时小系统, 拓宽了新的领域.

首先牢骚一下开发的艰辛, 从今年4月份开始谋划, 收集无线网络方面的知识, 到6月份开始向领导提出这个方案的想法, 出奇意外的得到了领导的赞同, 领导的一句话, 安定了我坚持走下去的决心 "今年只要将这完成就OK, 其他事你可以不管, 需要人力和其他资源的尽管提出" 多么铿锵有力的语气, 呵呵! 

天将降大任于斯人也, 必先苦其心志劳其筋骨, 在这个项目还不知道能否成功的前提下, 怎么能有其他要求提出, 先只能埋头到百度,谷歌和必应上面了, 牢骚结束. 言归正传, 我们来谈谈项目的心得体会, 和一些关键的技术点.

首先一个稳定的实时操作系统UCOS是基础, 能提供多线程, 信号量, 队列这些基本服务;

再需要一个TCP/IP协议栈, 我熟习的目前开源的有LWIP, UIP这两种, 其中LWIP功能比较全, 移植方便, 而且网上资料也比较多. 

最后需要选择一款适合你项目的无线网卡,   我这边就选择了便宜而且稳定的rtl8188eu了, 一个这样的模组大概7元人民币, 国产平板用得比较多.

系统这层就先略过了, 这次不滚瓜烂熟就不要弄了.

我们先来看看开源LWIP的移植, 在移植之前我建议先翻一翻"TCP/IP详解 卷1", 也不要特别精读每一章, 了解下TCP/IP的架构就可以了, 我这边收集了几个图, 理解了这几个图基本就OK了


上图是TCPIP各层之间的联系


上图是数据在各层之间被层层封装的结构


上图是最终丢给网卡的以太网数据帧, 也就是链路层传输的数据, 了解这个很重要, 因为他是TCPIP和网卡之间的桥梁, 其中两字节的类型需要了解, 可以想看维基百科:http://en.wikipedia.org/wiki/EtherType


这里TCPIP就已经告一段落了, 下面来谈谈LWIP的移植.

先去官网:http://savannah.nongnu.org/projects/lwip/  ,  了解这个轻量级的TCPIP协议栈项目, 如果感兴趣也可以看一下这个项目的背景  ,  我建议移植最新的1.41版本,

移植很简单, 原则是不需要修改任何代码, 只需要添加代码, 里面的宏控制非常经典, 这样避免用户错误修改倒置协议栈不稳定, 其中需要增加一个目录arch, 里面增加sys_arch.c

这里面就是, 协议栈和UCOS的结合的系统函数, 什么线程啊, 信号量啊...... ,  然后增加lwipopts.h,  这个文件主要是控制opt.h,  实现协议栈里面的各种开关. ethernetif.c就是实现协议栈和网卡之间的数据传输的文件. 移植的重点就这几个了, 如果需要知道过多细节可以网上搜索一下焦海波的移植笔记, 注意: 他移植的是有线网络, 我们需要的是无线WIFI, 所以不需要关系优先硬件部分.  

如果大家对LWIP协议栈内部架构感兴趣的可以看看老衲五木的LWIP协议栈源码详解, 网上有PDF的, 很方便.

成功移植后编译, 惊奇的发现没有一个警告和错误, 太绝了, 不得不佩服老外的严谨和高超技术!


今天就到这里, 下一张将记录下无线网卡RTL8188eu的移植,  这个也是整个项目的重点和难度,挑战性极大. 


0 0