Linux源码阅读笔记-以太网驱动分析

驱动框架

Linux 内核网络设备驱动框架分别为四个模块,分别为网络协议借口模块、网络设备接口模块、设备驱动功能模块和网络设备与媒介模块。具体视图如下:

网络协议接口模块:主要功能

  • 网络接口卡接收和发送数据在 Linux 内核当中处理流程如下:

Linux内核直接把中断分成两个部分:中断上半部和中断下班部

  • 网络协议接口模块:主要功能是给上层协议提供透明的数据包发送和接收接口,dev_queue_xmit() 用于发送数据包,netif_rx()/netif_recvive_skb() 用于接收数据包。不管发送还是接收数据包都会用到 sk_buff 结构体类型(套接字缓冲区),主要用在网络子系统中的各层之间传输数据。

常用数据结构

网络协议接口模块

  1. 套接字缓冲区 sk_buff 结构体类型:
  1. 存储 IP 数据 skb_shared_info 结构体类型(保存 IP 分片数据):

网络设备接口模块

  1. 存储网络设备全部所有信息,包括物理设备和虚拟设备,对应结构体类型为 net_device
  • 网络设备驱动程序只要 net_device 注册,即可实现网络通讯功能。
  1. NAPI 结构体类型

NAPI 数据包信息循环流程如下:

数据接收中断发生->减半接收中断->轮询接收所有数据包或轮询权重耗尽->开启接收中断->数据接收中断发生

常用操作函数

相关推荐
fs哆哆1 小时前
PDFsharp库的加密功能-学习笔记
笔记·学习
java_logo4 小时前
HashiCorp Vault 镜像拉取与 Docker 部署全指南
运维·docker·容器
Maple_land6 小时前
Linux复习:冯·诺依曼体系下的计算机本质:存储分级与IO效率的底层逻辑
linux·运维·服务器·c++·centos
李的阿洁6 小时前
k8s中的容器服务
linux·容器·kubernetes
谢景行^顾7 小时前
数据结构知识掌握
linux·数据结构·算法
linmengmeng_13148 小时前
【Jenkins】Jenkins配置从节点 - Launch Agent
运维·servlet·jenkins
人工智能训练8 小时前
如何在 Ubuntu 22.04 中安装 Docker 引擎和 Linux 版 Docker Desktop 桌面软件
linux·运维·服务器·数据库·ubuntu·docker·ai编程
好望角雾眠8 小时前
第四阶段C#通讯开发-5:TCP
网络·笔记·网络协议·tcp/ip·c#
三品吉他手会点灯8 小时前
stm32f103学习笔记-16-RCC(第2节)-讲解系统时钟配置函数SetSysClockTo72()
笔记·stm32·单片机·嵌入式硬件·学习