转自:https://blog.csdn.net/crazycoder8848/article/details/46333761 版权声明:本文没有任何版权限制,任何人可以以任何方式使用本文. https://blog.csdn.net/crazycoder8848/article/details/46333761 本文通过学习RealTek8169/8168/8101网卡的驱动代码(drivers/net/r8169.c),梳理一下Linux下网卡的收包过程. 在下水平相当有限,有不当之处,还…
记录一下linux数据包从网卡进入协议栈的过程,不涉及驱动,不涉及其他层的协议处理. 内核是如何知道网卡收到数据的,这就涉及到网卡和内核的交互方式: 轮询(poll):内核周期性的检查网卡,查看是否收到数据.优点:数据包非常多的时候,这种处理方法会非常快速有效.缺点:数据包少的时候会CPU总是轮询却没有收到数据包,造成CPU资源的浪费.这种方法很少使用. 中断(interrupt):网卡收到数据就给内核发送硬件中断打断内核的正常运行,让内核来处理数据包.优点:在数据包少的时候CPU能及时中断其他…
Linux内核网络数据包处理流程 from kernel-4.9: 0. Linux内核网络数据包处理流程 - 网络硬件 网卡工作在物理层和数据链路层,主要由PHY/MAC芯片.Tx/Rx FIFO.DMA等组成,其中网线通过变压器接PHY芯片.PHY芯片通过MII接MAC芯片.MAC芯片接PCI总线 PHY/MAC芯片 PHY芯片主要负责:CSMA/CD.模数转换.编解码.串并转换 MAC芯片主要负责: 比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD CRC校验 P…
本文主要讲解了Linux内核二层数据包接收流程,使用的内核的版本是2.6.32.27 为了方便理解,本文采用整体流程图加伪代码的方式从内核高层面上梳理了二层数据包接收的流程,希望可以对大家有所帮助.阅读本文章假设大家对C语言有了一定的了解 整体流程如下: 数据报文接收流程伪代码分析如下 /*在基于中断收发报文的网卡设备驱动中, * 当有数据报文进来的时候,使用net_interrupt()进行中断触发 *如 isa-skeleton设备驱动中*/ static int __init netcar…
作业列表      (点击作业跳转) linux内核分析作业:以一简单C程序为例,分析汇编代码理解计算机如何工作 linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码   linux内核分析作业3:跟踪分析Linux内核的启动过程 linux内核分析作业4:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用   linux内核分析作业5:分析system_call中断处理过程   linux内核分析作业6:分析Linux内核创建一个新进程的过程…
世界悲结束了,章鱼哥也退役了,连非诚勿扰中的拜金女也突然的少了很多.这本<Linux内核修炼之道>在卓越.当当.china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,然后也都会紧接着尽量的去进行解释清楚,中间的很多概念也有反复纠结过怎么解释能够更容易的理解,力求即使对于初学者也可以有很少阻碍的一气读完.同时我也把书中一部分自己的感悟抽出来整理了精华版,share出来.当然水平有限,…
结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 目录 结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程 一. 实验准备 二. 实验过程 I 分析中断上下文的切换 II 分析fork子进程启动执行时进程上下文及其特殊之处 III 分析execve系统调用中断上下文及其特殊之处 IV 以系统调用作为特殊的中断,结合中断上下文切换和进程上下文切换分析Linux系统的一般执行过程 三. 总结 一. 实验准备 详细要求 结合中断上下文切换和进程上下文切换分析Linux…
文章名称:以Qemu模拟Linux,学习Linux内核作      者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/2921221.html维护日志:2013-02-21 建立文档(注:文章参考自http://www.linuxidc.com/Linux/2011-07/39373.htm, 是对该篇文章的一些补充和说明.文章内所使用的环境是Ubuntu 12.04,如果其中遇到编译问题,请自行参考错误说明,配置依赖…
署名信息 郭春阳 原创作品转载请注明出处 :<Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 C源码 这里为了防止重复,修改了部分源码 int g(int x) { return x + 99; } int f(int x) { return g(x); } int main(void) { return f(22) + 36; } 运行 gcc -S -o foo.s -m32 foo.c后,生成的汇编代码为…
一个网络报文从网卡接收到被应用处理,中间主要需要经历两个阶段: 阶段一:网卡通过其DMA硬件将收到的报文写入到收包队列中(入队)阶段二:应用从收包队列中读取报文(出队)由于目前正在使用vpp/dpdk 优化waf引擎的工作,所以就看看ixgbe网卡在dpdk框架下是怎么工作的.下面分别介绍一下 收包队列结构 初始化(使能) 收包流程 收发包的配置和初始化,主要是配置收发队列等. 收发包的配置最主要的工作就是配置网卡的收发队列,设置DMA拷贝数据包的地址等.使用数据包时,只要去对应队列取出指定地址…