Linux网卡驱动分析之RTL8139(五)
Linux网卡驱动分析之RTL8139(五)
deliver_skb(dev.c)
|
链路层及以下发送网络包的流程
网络层发送数据报的最后一站是ip_finish_output2,它根据skb->dst->hh 是否已被创建
来决定如何调用链路层的输出函数,hh 实际是neighbour 的hh 成员,它在ARP 解析完成,
邻居节点被更新时进行创建,对于不需要ARP 解析的设备接口(loopback 等),它在第一次发
送数据报时被创建。所以,不管网络层如何调用链路层的输出函数,链路层的第一个输出函
数始终是dev_queue_xmit。
传输网络缓存(transmit a buffer)dev_queue_xmit(dev.c)
|
如果有发送缓存队列qDisk 则
qdisc_run(src/include/net/pkt_sched.h)
|
__qdisc_run(src/include/net/pkt_sched.h)
|
qdisc_restart(src/include/net/pkt_sched.h)
启动设备,发送数据.把数据出列。
|
调用dev_hard_start_xmit(src/net/core/dev.c)
如果没有发送缓存队列qDisk 则直接dev_hard_start_xmit 发送
所有设备的驱动程序的传输调用函数的调用函数接口
|
网卡驱动中包的传输函数(dev. hard_start_xmit)(rtl8139_start_xmit)
Dev‐>hard_start_xmit()只要是跟硬件打交道,一般是通知DMA完成数据的发送工作。
① 检查这个要发送的数据包的长度,如果它达不到以太网帧的长度,必须采取措施进行填
充。
② 把包的数据拷贝到我们已经建立好的发送缓存中。
memcpy (tp->tx_buf[entry], skb->data, skb->len);
③ 光有了地址和数据还不行,我们要让网卡知道这个包的长度,才能保证数据不多不少精
确的从缓存中截取出来搬运到网卡中去,这是靠写发送状态寄存器(TSD)来完成的。
④ 判断发送缓存是否已经满了,如果满了在发就覆盖数据了,要停发。
|
发送完毕中断函数(rtl8139_tx_interrupt)
|
当上层协议驱动要发送数据的时候,最终会调用到hard_start_xmit 指定的函数。发送
过层很简单,只需要把待发数据拷贝到缓冲区里面,然后在把缓冲区的地址写如发送地址寄
存器就可以了。
发生错误的中断处理(rtl8139_weird_interrupt)
|
Linux网卡驱动分析之RTL8139(五)相关推荐
- linux网卡rx,Linux网卡驱动分析之RTL8139(四)
rtl8139_interrupt(中断处理函数) 当网卡收到数据,发送数据完成,或收发出错都可能发出中断,在中断处理中根据网卡 中断状态寄存器的值来判断是什么情况的中断,然后调用相应的处理函数. / ...
- linux网卡写入内存参数,Linux网卡驱动分析之RTL8139(三)
rtl8139_open(打开启动设备函数)
- linux 网卡驱动分析,LINUX_网卡驱动分析
LINUX_网卡驱动分析 (36页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.9 积分 Linux DM9000网卡驱动程序完全分析说明仁 本文分 ...
- linux 网卡驱动分析,基于linux下网卡驱动分析及实现技术研究
摘 要 Linux技术是当前计算机技术中最大的一个热点,在我国以及全世界得到了迅猛的发展,被广泛的应用于嵌入式系统.服务器.网络系统.安全等领域.从而使得掌握在 Linux环境下的开发技术,成为 ...
- linux 网卡驱动构架,Linux网卡驱动分析
以太网(Ethernet)是一种计算机局域网组网技术,基于IEEE 802.3标准,它规定了包括物理层的连线.电信号和介质访问层协议. Ethernet接口的实质是MAC通过MII总线控制PHY的过程 ...
- Linux查看网卡加载驱动,linux网卡驱动分析之驱动加载
通过insmod或者modprobe命令加载驱动,这两个命令为应用程序,在应用程序里调用了一个系统调用: extern long init_module(void *, unsigned long, ...
- Linux PCI网卡驱动分析
http://www.uplinux.com/shizi/wenxian/4429.html Linux网卡驱动分析 学习应该是一个先把问题简单化,在把问题复杂化的过程.一开始就着手处理复杂的问题,难 ...
- linux网卡驱动源码分析(一)
linux网卡驱动源码分析(一) linux struct linux内核 网络 descriptor resources 转自http://blog.csdn.net/ustc_dylan/arti ...
- 6.S081 lab: networking e1000 网卡驱动 附 Linux 网卡驱动编写分析
本文是 6.S081 操作系统课程学习最后一个 lab,编写一个 intel 的 e1000 网卡的驱动在 xv6 下.需要复习知识有:操作系统知识,计算机组成原理 DMA 相关,循环缓冲区的概念,e ...
最新文章
- UC 伯克利华人一作:卷积让视觉 Transformer 性能更强,ImageNet 继续刷点!
- Maven 之常用命令
- linux调用一个函数失败 打印错误,linux下settimeofday函数调用失败,何故?解决办法...
- html随页面移动固定,div设置了position: fixed属性后如何可以做到随浏览器左右移动?...
- mybatis里的log适配器模式
- 化学专业尽早转行_尽早查看针对Java 11的功能
- C# partial 部分类使用简单举例说明
- 安装、部署DPM 2012 R2服务器
- 【dp】URAL-1018
- python/正则 从字符串中提取数字
- 在firefox中backspace返回键不能回到之前的页面
- matlab乘与点乘的区别 (*与.* ^与.^)
- 相位编码信号 matlab,matlab 求基于相位编码的雷达回波仿真 更多交易加我QQ
- (转载)形态学腐蚀、膨胀——Matlab DIP(瓦)ch9形态学图像处理
- Java Web编程技术基础
- 面向对象的程序设计方法
- cad插件_抖音最火CAD插件教程汇总
- 计算机二级access分数分布_计算机二级office题型及分值分布
- 微服务网关SIA-GateWay使用指南 ===
- PADS Logic电路原理pcb设计(线路硬件设计实践问题总结)
热门文章
- JVM:高效并发机制——内存模型、线程、锁
- 2022年10月最新网盘扩容技术原理分析
- 学习技巧:日语顺口溜单词记忆法
- hdu4506小明系列故事——师兄帮帮忙
- Sequence to Sequence Learning with Neural Networks论文翻译
- [IT] 软件自动化解决方案『免费开源』基于 JavaFx 的自动化测试系统,已更新至 V1.1.3 最新版
- 叨叨记账APP产品体验报告
- python画图哆啦a梦大头贴_opencv--拍大头贴程序
- 织梦tags.php文件,DEDECMS织梦tags标签关键词url以ID
- python中的变量是动态类型的什么意思_Python零基础入门(一):对Python的简单认识...