Linux网卡驱动设计
Linux网卡驱动设计
Linux网络体系结构
Linux的优点之一在于它丰富而稳定的网络协议栈。其范围从协议无关层到各种具体的网络协议实现。
协议层次对比图
网络接口层提供访问物理设备的驱动程序,对应的网络协议主要是以太网协议。
网络层协议管理离散计算机间的数据传输,如IP协议为用户和远程计算机提供了信息包的传输方法。确保了信息包能正确的到达目的机器。
传输层的功能包括:格式化信息流、提供可靠传输。
应用层位于协议栈的顶端,它的主要任务是服务于应用。
Linux网络子系统
其顶端时系统调用接口层。位于其下面的是一个协议无关层,它提供了一个通用方法来使用传输层协议。然后是具体协议的实现,然后是设备无关层,它提供了协议与设备驱动通信的通用接口,最下面是设备驱动程序。
系统调用接口:Socket系统调用。
协议无关接口:实现一组通用函数来访问各种不同的协议:通过socket实现。这个结构包含了特定socket所需要的所有状态信息,还概括了socket所使用的特定协议和socket上可以执行的一些操作。
设备无关接口将协议与各种网络设备驱动连接在一起。这一层提供一组通用函数供底层网络设备驱动程序使用,让它们可以对高层协议栈进行操作。首先,设备驱动程序可能会通过调用用register_netdevice或unregister_netdevice在内核中进行注册或注销。调用者首先填写首先填写net_device结构结构,然后传递这个结构进行注册。内核调用它的的init函数(如果定义了这种函数),然后执行一组健全性检查,并将新设备添加到设备列表中(内核中的活动设备链表)。
要从协议层向设备发送数据,需要使用dev_queue_xmit函函数,这个函数对数据进行排队,并交由底层设备驱动程序进行最终传输报文的接收通常是使用使用netif_rx执行执行的。当底层设备驱动程序接收到一个报文(包含在所分配的的sk_buff中)时,就会通过调用用netif_rx将将数据上传至设备无关层,然后,这个函数通过过netif_rx_schedule将sk_buff在上在上层协议队列中进行排队,供以后进行处理。
驱动设计
设备描述
每个网络接口都由一个net_device结构来描述,该结构可使用如下内核函数动态分配:
1、structnet_device *alloc_netdev(int sizeof_priv, const char*mask, void (*setup)(structnet_device *))
sizeof_priv 私有数据区大小;mask:设备名;setup 初始化函数
2、structnet_device *alloc_etherdev(int sizeof_priv)
alloc_etherdev是alloc_netdev针对以太网的快捷函数
int(*init)(struct net_device *dev);//该函数在register_netdev时被调用来完成对net_device结构的初始化
int(*open)(struct net_device *dev);打开接口。ifconfig激活时,接口将被打开。
int(*stop)(struct net_device *dev);停止接口。网卡关闭时。
int (*hard_start_xmit)(struct sk_buff *skb, struct net_device *dev) ;数据发送函数
intregister_netdev(struct net_device *dev)
Linux内核中的每个网络数据包都由一个套接字缓冲区结构结构structsk_buff描述,即一个sk_buff结构结构就是一个包,指向sk_buff的的指针通常被称做skb。
struct sk_buff *alloc_skb(unsigned int len, int priority)
struct sk_buff *dev_alloc_skb(unsigned int len)
unsigned char *skb_push(struct sk_buff *skb, int len)
unsigned char *skb_put(structsk_buff *skb, int len)
kfree_skb(struct sk_buff *skb)
dev_kfree_skb(struct sk_buff *skb)
intnet_open(struct net_device *dev)
request_irq(dev->irq,&net_interrupt, SA_SHIRQ,“dm9000”, dev);;
当核心需要发送一个数据包时,他调用hard_start_transmit,该函数最终将用到net_device结构中的hard_start_xmit函数指针。
skb =dev_alloc_skb(pkt->datalen + 2)
3、 调用netif_rx将数据交到协议栈netif_rx(skb)
Linux网卡驱动设计相关推荐
- linux网卡驱动开发视频,Linux下网卡驱动程序的开发.doc
Linux下网卡驱动程序的开发 论文题目:Linux下网卡驱动程序的开发 专 业: 年 级: 学生学号: 学生姓名: 指导教师: 完成时间: Linux下网卡驱动程序的开发 八年经验 专业指导毕业设计 ...
- linux双网卡驱动配置,linux网卡驱动安装、双网卡绑定
本次课程包含RAID0/1/5/6/10/50/60配置实验(使用Dell R720服务器实验).Redhat/CentOS/ubuntu/windows操作系统安装.windows/linux网卡绑 ...
- linux网卡驱动对XDP支持情况
各个网卡厂商对应的Linux内核驱动如下 Mellanox: mlx4 (4.8) and mlx5 (4.9) QLogic/Cavium: qede (4.10) Virtio_net: (4.1 ...
- 6.S081 lab: networking e1000 网卡驱动 附 Linux 网卡驱动编写分析
本文是 6.S081 操作系统课程学习最后一个 lab,编写一个 intel 的 e1000 网卡的驱动在 xv6 下.需要复习知识有:操作系统知识,计算机组成原理 DMA 相关,循环缓冲区的概念,e ...
- linux网卡驱动离线安装_Linux网卡驱动的安装方式
如何安装Linux网卡驱动呢,看看下面的说明. 适用机型: 所有xSeries 205; 所有xSeries 206; 所有xSeries 225; 所有xSeries 226; 所有xSeries ...
- 有限状态机的嵌入式Linux按键驱动设计(转载)
本文转载自边缘之火<有限状态机的嵌入式Linux按键驱动设计(转载)> 原文链接: http://www.eccn.com/design_2010052509381340.htm 秦国栋 ...
- Linux网卡驱动分析之RTL8139(五)
Linux网卡驱动分析之RTL8139(五) deliver_skb(dev.c) // 该函数就是调用个协议的接收函数处理该skb 包,进入第三层网络层处理 static __inline__ in ...
- linux网卡驱动源码分析(一)
linux网卡驱动源码分析(一) linux struct linux内核 网络 descriptor resources 转自http://blog.csdn.net/ustc_dylan/arti ...
- linux回环网卡,Linux回环网卡驱动设计
回环网卡驱动 1.回环网卡和普通网卡的区别是他是虚拟的不是实际的物理网卡,它相当于把普通网卡的发送端和接收端短接在一起. 2.在内核源代码里的回环网卡程序(drivers/net/loopback.c ...
最新文章
- DOS文件转换成UNIX文件格式详解
- 投资比特币现金的四个理由
- django forms 错误处理
- C#2.0泛型-Dictionary,List的用法
- ×××技术在ATM机无线组网中的应用
- 视频容器格式与编码格式简介
- python导入urllib request_Python 3.3 - urllib.request - 导入错误
- 云上远程运维的最后那点担心,“云梯”帮你解决
- finereport mysql 插件,web报表插件领导品牌FineReport
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
- WIN7 X64 下 VS2008升级补丁 (显示隐藏按钮)
- ssh 认证指定端口
- jQuery特效:实现瀑布流
- Office 2016中修改正文默认字体
- Linux批量转图,CMYK转RGB
- 边境的悍匪—机器学习实战:第五章 支持向量机
- 一名合格的IT项目经理 这八项核心技能不能缺
- 子库存-OU-库存组织-关系
- LGA1155、LGA1156、LGA1366、LGA2011的CPU插槽对应的都是什么型号的CPU
- Django的Forms.py
热门文章
- 如何用JavaScript获得div高度
- 手机数据丢失!没想到是这样找回来的
- 华为荣耀鸿蒙os系统,华为没有放弃荣耀!鸿蒙OS系统再次放出大招:老花粉们有福气了...
- element表格图片放大_vue中element-ui表格缩略图悬浮放大功能的实例代码
- animation 在 电视版的 UC 浏览器没动画
- xshell6 常用命令
- android 美拍人脸识别,人脸识别+双摄美拍一个都不少:荣耀畅玩7C使用体验
- Java技术常见术语及其解释(常见缩写)
- 劲爆!魔都人民打开流量“不限量”的正确方式
- .net开发 C盘空间不足问题