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 数据包信息循环流程如下:

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

常用操作函数

相关推荐
asyxchenchong88838 分钟前
最新Hermes Agent 技能封装与科研自动化:以 Meta-Analysis 为例-实现从文献检索到绘图的一站式工作流
运维·人工智能·自动化
tianyuanwo1 小时前
项目内自我管理:一名OS领域DevOps的破局之路
运维·devops
三十..1 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
努力努力再努力wz2 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Jurio.2 小时前
开源 Codex Sticky:在终端 Codex CLI 长对话中始终固定底部输入框
linux·rust·github·开源软件·codex·codex cli
无足鸟ICT2 小时前
【RHCA+】撤销和恢复撤销快捷键
linux
质造者3 小时前
LangChain + Ollama + Tavily 实现旅游问答系统
linux·人工智能·python·langchain·rag
伊布拉西莫3 小时前
【流畅的Python】第20章:并发执行器 — 学习笔记
笔记·python·学习
starvapour3 小时前
Ubuntu部署gitlab频繁出现502的问题
linux·ubuntu·gitlab
jinglong.zha3 小时前
LScript-从零基础到商业变现的AI自动化学习平台
运维·学习·自动化