网络设备驱动程序结构分析数据发送流程?

网络设备驱动程序结构分析数据发送流程?,第1张

从网络设备驱动程序的结构分析可知,Linux网络子系统在发送数据包时,会调用驱动程序提供的hard_start_transmit()函数,该函数用于启动数据包的发送。在设备初始化的时候,这个函数指针需被初始化以指向设备的xxx_tx ()函数。网络设备驱动完成数据包发送的流程如下:

1)网络设备驱动程序从上层协议传递过来的sk_buff参数获得数据包的有效数据和长度,将有效数据放入临时缓冲区。

2)对于以太网,如果有效数据的长度小于以太网冲突检测所要求数据帧的最小长度ETH ZLEN,则给临时缓冲区的末尾填充0。

3)设置硬件的寄存器,驱使网络设备进行数据发送 *** 作。

特别要强调对netif_ stop_queue()的调用,当发送队列为满或因其他原因来不及发送当前上层传下来的数据包时,则调用此函数阻止上层继续向网络设备驱动传递数据包。当忙于发送的数据包被发送完成后,在以TX结束的中断处理中,应该调用netif_wake_queue ()唤醒被阻塞的上层,以启动它继续向网络设备驱动传送数据包。当数据传输超时时,意味着当前的发送 *** 作失败或硬件已陷入未知状态,此时,数据包发送超时处理函数xxx _tx _timeout ()将被调用。这个函数也需要调用由Linux内核提供的netif_wake _queue()函数以重新启动设备发送队列。

如下程序,可以在屏幕输出短句 "Hello World"

1、第1行 #include <stdio.h>是预处理器指令,告诉 C 编译器在实际编译之前要包含 stdio.h 文件。

2、第2行 int main() 是主函数,程序从这里开始执行。

3、第3行 / ... / 将会被编译器忽略, / ... / 当中放置程序的注释内容。注释内容被称为程序的注释。

4、第4行 printf(...) 是 C 中另一个可用的函数,会在屏幕上显示消息 "Hello, World!"。

5、最后一行 return 0终止 main() 函数,并返回值 0。

结构化程序的三种基本结构是顺序结构,选择结构,循环结构,分别介绍如下:

1、顺序结构:顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。

2、选择结构:选择结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程。

3、循环结构:循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。根据判断条件,循环结构又可细分为以下两种形式,先判断后执行的循环结构和先执行后判断的循环结构。

4、循环图:数据流图是SA方法中用于表示逻辑系统模型的一种工具,它从数据传递和加工的角度,以图形的方式来刻画数据流从输入到输出的变换过程。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。数据流图是需求分析阶段产生的结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8104243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存