内容简介:上节我们对LwIp的目录结构已经有了了解,我们这篇文件将就LwIp协议栈做更深一步的研究。LwIp的源码源文件多达几百个,我们去读源码的时候不能一下子全部读完,我们在读源码时候需要有所重点的去读,才能快速的把握LwIp的精髓。
上节我们对LwIp的目录结构已经有了了解,我们这篇文件将就LwIp协议栈做更深一步的研究。
重要源文件解释
LwIp的源码源文件多达几百个,我们去读源码的时候不能一下子全部读完,我们在读源码时候需要有所重点的去读,才能快速的把握LwIp的精髓。
API目录是提供了Socket接口和Sequential API的接口,Socket.c实现了BSD socket的接口封装,tcpip.c文件并没有实现tcpip协议,实际上是Sequential API 主线程模块的的实现。api_lib.c是Sequential API的接口的实现。
core目录则是协议栈的核心,其中tcp.c ip.c,udp.c 则是整个tcp/ip协议栈的核心实现,ip层还分为ipv4和ipv6两个目录,里面有ipv4 ipv6层的的具体实现。mem.c 和memp.c是内存管理的核心实现。
netif目录是接口部分,最新的2.0版本和原来的1.4版本对以太网部分做了较大改动,ethernetif.c是以太网驱动文件,需要根据具体硬件来进行移植。ethernetif.c文件在1.4版本的是在本目录下,2.0版本则放到用户的目录下。本目录还有其他的接口文件如ppp协议的等。ethernet.c是对以太网报文的抽象出入口函数接口。
无操作系统移植和初始化
把LwIp移植到具体的网卡上和操作系统上需要一定的工作量,移植LwIp分操作系统移植和非操作系统移植,操作系统移植较为繁琐,我们先讨论非操作系统移植。
非操作系统移植主要是需要移植ethernetif.c文件。网卡的初始化要放在low_level_init函数内执行。low_level_init函数是配置MAC地址,物理网卡的初始化函数。调用流程如下
网卡初始化流程
low_level_init设置好物理网卡芯片的参数(mac地址,phy型号,mac接口类型,接收模式,自协商等等),把这些参数写入到网卡芯片的寄存器中。
物理网卡芯片初始化
物理芯片设置好了后就可以接收和发送数据了,但接收和发送数据函数需要由LwIp的函数来进行封装,否则无法被LwIp处理。
数据接收流程
无操作系统和有操作系统的数据接收方式有所不同,无操作系统的接收入口函数是ethernetif_input,把网卡接收到数据送到LwIp协议栈
数据发送流程
注册发送函数
在low_level_output函数内要实现自己的网卡发送功能。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- java高手之路上的必备基础知识
- 许岑跨界学习高手:如何成为有效学习的高手
- 高手,这是高手!推荐几个我常看的顶级技术类公众号
- [译] 编程高手是如何练成的?
- webpack4 高手之路 第四天
- Webpack Loader 高手进阶(一)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
父与子的编程之旅
桑德 (Warren Sande)、桑德 (Carter Sande) / 苏金国、易郑超 / 人民邮电出版社 / 2014-10-1 / CNY 69.00
本书是一本家长与孩子共同学习编程的入门书。作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装、字符串和操作符等程序设计的基本概念,介绍了条件语句、函数、模块等进阶内容,最后讲解了用Python实现游戏编程。书中的语言生动活泼,叙述简单明了。 为了让学习者觉得编程有趣,本书编排了很多卡通人物及场景对话,让学习者在轻松愉快之中跨入计算机编程的大门。 第 2 版新增内......一起来看看 《父与子的编程之旅》 这本书的介绍吧!