网卡驱动学习一、wireless基础知识(cfg80211 mac80211 nl80211)-程序员宅基地

技术标签: 学习  网络  # 网络设备驱动  

1. 基本概念

  • cfg80211: 用于对无线设备进行配置管理。与FullMAC, mac80211和nl80211一起工作。(Kernel态)
  • mac80211: 是一个driver开发者可用于为SoftMAC无线设备写驱动的框架 (Kernel态)。
  • nl80211: 用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议(User态)
  • WNIC : Wireless Network Interface Controller, 它总是指望硬件执行协议(如IEEE802.11)描述的功能。
  • MLME: 即MAC(Media Access Control ) Layer Management Entity,它管理物理层MAC状态机。
  • SoftMAC: 其MLME由软件实现,mac80211为SoftMAC实现提供了一个driver API。 即:SoftMAC设备允许对硬件执行更好地控制,允许用软件实现对802.11的帧管理,包括解析和产生802.11无线帧。目前大多数802.11设备为SoftMAC,而FullMAC设备较少。
  • FullMAC: 其MLME由硬件管理,当写FullMAC无线驱动时,不需要使用mac80211。
  • wpa_supplicant: 是用户空间一个应用程序,主要发起MLME命令,然后处理相关结果。

2. cfg80211

cfg80211 是Linux 802.11配置API。cfg80211用于代码 wext (Wireless-Extensions),nl80211 用于配置一个cfg80211设备,且用于kernel与userspace间的通信。wext现处理维护状态,没有新的功能被增加,只是修改bug。如果需要通过wext操作,则需要定义CONFIG_CFG80211_WEXT。

  • cfg80211 and nl80211: 基于消息机制,使用netlink接口
  • wext: 基于ioctl机制
  • struct ieee80211_hw: 表示硬件信息和状态
  • ieee80211_alloc_hw:每个driver调用ieee80211_alloc_hw分配- ------
  • ieee80211_hw,且以ieee80211_ops为参数
  • ieee80211_register_hw:每个driver调用ieee80211_register_hw创建wlan0和 wmaster0,并进行各种初始化。
  • struct ieee80211_ops:每个driver实现它的成员函数,且它的成员函数都以struct ieee80211_hw 做为第一个参数。在 struct ieee80211_ops 中定义了24个方法,以下7个方法必须实现:
    • tx,start,stop,add_interface,remove_interface,config和configure_filter。

3. mac80211

mac80211 是一个driver开发者可用于为 SoftMAC 无线设备写驱动的框架,mac80211为SoftMAC设备实现了 cfg80211 回调函数,且 mac80211 通过 cfg80211 实现了向网络子系统注册和配置。配置由cfg80211通过nl80211和wext实现。
mac80211 在体系结构中的位置如下图所示:
在这里插入图片描述

4. 调用框架

linux 底层网卡驱动框架如下:
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_40209493/article/details/128715576

智能推荐

ajax请求接口跨域问题解决方案(控制器加header头)_response.setheader("access-control-allow-origin", -程序员宅基地

文章浏览阅读3.1k次。 response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("P3P", "CP=CAO PSA OUR._response.setheader("access-control-allow-origin", request.getheader("origin

python爬取安居客房屋价格用地图表示出来_pyqt房价地图-程序员宅基地

文章浏览阅读1.5k次,点赞4次,收藏18次。1. 房屋价格地图1.1 项目思路主要分成三个步骤首先利用python爬取安居客网站上个区的房屋价格,并把房屋所在小区进行归类,求出小区均价。然后利用百度地图api中的地理编码,我们可以获取小区所在的经纬度,注意这里不是所有小区都能准确获取的,存在一定数量的小区无法获取精确的地理坐标。最后利用BDP线上分析可以绘制出如下小区均价地图。效果如下:1.2 项目目录get_data:用于python爬取安居客房屋价格并整理get_lnglat:用于百度地图api中地理编码,获取小区的经纬_pyqt房价地图

2008年专转本计算机试卷解,2005-2008年专转本计算机真题及答案-程序员宅基地

文章浏览阅读583次。A. 在窗口中显示所有文件的属性 B. 一次打开多个文件C. 一次复制或移动多个不连续的文件 D. 一次删除多个不连续的文件 E. 不按任何键,直接拖动鼠标在不同磁盘之间移动文件 5. 关于Windows系统下的中文输入,描述正确的有。 A. 按[Ctrl+Space]组合键,不可进行中英文输入的切换 B. 按[Ctrl+Shift]组合键,可进行中文输入的切换 C..._15.windows操作系统为方便用户操作,提供了一些系统默认的组合键,如ctrl+a、ctrl+v

mysql int多长 int(1)类型的值范围是多少呢_mysqlint的取值范围 代表显示-程序员宅基地

文章浏览阅读3.1k次。int(n)中不论n指定为多少,范围都一样-2~31~2^31-1,都能插入9位数字。n只是用来控制显示而已,如果为int(4),插入一个1,显示时也会用空格补齐到4个字节请问所有mysql中的数据类型中的(n)都是表示显示位数吗?并非如此,NUMERIC(4)就限定了取值范围,超过4位就不允许写入了。因此如果你想限定数字的取值范围,最好是用NUMERIC来定义。在MySQL的数据类型中,Tinyint的取值范围是:带符号的范围是-128到127。无符号的范围是0到255(见官方《MySQL_mysqlint的取值范围 代表显示

池州学院大一计算机基础试题,微机份问题的计算机求解_池州学院:数学分析_ppt_大学课件预览_高等教育资讯网...-程序员宅基地

文章浏览阅读163次。《数学分析》实验课第二部分微积分问题的计算机求解《数学分析》实验课前言? Newton 和 Leibnitz 创立的微积分学是很多科学科学的基础,本课程将借助MATLAB 语言的符号运算工具箱可以直接对微积分学中最常见的问题,如单变量与多变量微积分、极限、级数求和、Taylor幂级数展开,Fourier 级数展开等问题直接求解。《数学分析》实验课目录? Matlab符号工具箱简介? 极限问题? 导..._matlab 池州学院

【工控老马】详解OPC协议-工业控制和自动化领域的接口标准_opc接口-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏10次。OPC全称是OLE for Process Control,即用于过程控制的OLE,是针对现场控制系统的一个工业标准接口,是工业控制和生产自动化领域中使用的硬件和软件的接口标准。基于微软的OLE(现在的Active X)、COM (部件对象模型)和DCOM (分布式部件对象模型)技术,OPC包括自动化应用中使用的一整套接口、属性和方法的标准集,用于过程控制和制造业自动化系统。提供工业自动化系统中独立单元之间标准化的互联互通,顺应了自动化系统向开放、互操作、网络化、标准化方向发展的趋势。OPC规范OPC规_opc接口

随便推点

二叉树的构造、非递归遍历、查找叶子节点【Java实现】_java 树形结构找出次叶子节点-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏9次。二叉树的构造方法不一,这里根据存储结点次序的数字关系来构造父节点和孩子结点的关系(parentIndex*2+1==leftChildIndex,parentIndex*2+2==leftRightIndex),关于二叉树非递归遍历的详细介绍请看 二叉树的建立与遍历,下面程序还实现了查找叶子节点、查找某一元素是否存在的功能。import java.util.LinkedList;impor..._java 树形结构找出次叶子节点

微信小程序云开发-初学者 开通云开发、创建环境_开通云开发、创建环境,给出截图-程序员宅基地

文章浏览阅读1.8k次。微信小程序云开发文档新建云开发模板新建项目选择一个空目录,填入 AppID,勾选创建 “云开发 QuickStart 项目”,点击创建即可得到一个展示云开发基础能力的示例小程序。开通云开发、创建环境在使用云开发能力之前需要先开通云开发。在开发者工具工具栏左侧,点击 “云开发” 按钮即可打开云控制台体验小程序查看控制台以上小程序开发文档都有..._开通云开发、创建环境,给出截图

入会领京豆Python脚本_移动端领京豆脚本python-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏29次。京东入会领京豆Python脚本代码地址:<AntonVanke/JDBrandMember: 京东自动入会获取京豆 (github.com)>_移动端领京豆脚本python

页框回收算法(PFRA)——2_bypfra-程序员宅基地

文章浏览阅读455次。页框回收中的反向映射PFRA的目的之一就是能释放共享页框,为了达到这个目的Linux2.6内核能够快速定位指向同一页框的所有页表项,这个过程就叫做反向映射。反向映射简单来说就是在页描述符中加入附加字段,这样就把某个页描述符它所确定的页框对应的全部页表项联接起来,但是这样的话一旦对该链表更新会有很大的开销。所有就有一种成熟的技术出现,Linux2.6就有叫做面向对象的反向映射的技术。实际上对于任何可以回收的用户态页面,内核保留系统中该页所在所有线性区(对象)的反向链接,每个线性区描述符存放一个指针指向一个_bypfra

JS_js数据导出excel文件_js 读取 .po文件 msgstr的值为空,就把msgstr对应的msgid,导出为xlsx文件-程序员宅基地

文章浏览阅读142次。<html> <head> <div>以Table格式导为xls文件 <button onclick='TableToExcel()'>导出</button></div> <div>导出CSV文件 <button onclick='toCSV()'>导出</button></div> <div>大量数据导出CSV <button oncli_js 读取 .po文件 msgstr的值为空,就把msgstr对应的msgid,导出为xlsx文件

如何创建一个镜像_创建镜像jx,请将代码写出来(或操作流程)-程序员宅基地

文章浏览阅读1.3k次。思路:基于官方下载的镜像,进行编辑步骤1:下载镜像docker pull或docker load&lt;hello-nginx.tar步骤2:运行镜像,得到容器docker run -d --name=容器名称 镜像名称步骤3:使用终端连接容器docker exec -it 容器名称 /bin/bash步骤4:在容器中运行命令,安装需要的软件 echo ‘hello’&gt;hello.t..._创建镜像jx,请将代码写出来(或操作流程)