linux配置wext接口,Linux wext和nl80211接口简介

news/2025/2/23 22:49:08

inux无线驱动接口简介

在分析wpa_supplicant软件linux版本下无线驱动事件和无线驱动配置代码之前,先简单介绍下linux无线驱动接口的实现技术和发展情况。

Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口。

在linux-2.6.18版本之前,linux内核代码中并没有提供无线驱动接口以及无线驱动协议栈。wext是由开发者Jean Tourrilhes (惠普实验室软件工程师)定义的一套供用户层软件访问无线驱动以及驱动事件通知用户层的接口。当时无线驱动的协议栈软件比较多,如开源项目 hostap,madwifi,mac80211,ieee80211协议栈以及无线芯片厂商自己实现的协议栈,基本都使用wext接口。wext接口也 逐渐成为一套标准的接口。在linux-2.6.18版本,wext和mac80211协议栈并入内核,成为linux kernel的一部分。wext接口随着802.11协议从802.11,802.11b,802.11a/g的发展,,其API也不断增加,伴随着就是 其wext的版本号不断变化。

wext的接口实现上,应用层采用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作。无线驱动事件到应用层的传递采用的 netlink socket技术,一种netlink route消息技术。这也是很多其他类型的驱动标准的实现方法。但在linux-2.6.25(记得不是很清楚了,懒得确定了)之后,wext API接口版本停止在V22就不再进行更新了。而替代其的是nl80211接口。

nl80211接口其实在linux-2.6.18并入wext和mac80211协议栈的时候已经提供,但当时的功能还不完整,而且应用层的软件还是都 使用WEXT接口,驱动基本不使用nl80211接口实现(除了基于mac80211协议栈的驱动)。 nl80211接口是由开发者Johannes Berg实现的,他也是cfg80211(无线协议栈配置接口,在无线驱动接口和mac80211之间的接口)和mac80211的维护者。无论是用户层 访问驱动还是驱动事件通知应用层,nl80211接口都采用的netlink技术。

nl80211接口逐渐替代wext接口的原因主要是使用netlink技术在应用层和内核层数据交换上相比ioctl方式具有优势,具体的比较见点击打开链接(转 载的一篇文章,写得非常清楚),而且很多其他之前使用ioctl的驱动也逐渐采用了netlink方式。再一个原因就是802.11协议的发展,随着 802.11n协议以及P2P,WPS无线规范的加入,协议的很多功能可以在应用层实现,增加了很多应用层与驱动层间的API接口和事件。WEXT接口不 方便功能扩展的缺点,nl80211可以完全支持wext的所有功能,又可以在不修改内核的情况下增加命令字和事件。无线驱动接口从wext发展到 nl80211也就顺理成章。

目前linux内核中无线驱动的实现大部分基于mac80211协议栈,无线驱动接口也是可选的,可以使用任意一种,也可以同时使用。wpa_supplicant编译时,则根据无线驱动的接口使用情况,确定采用哪种配置接口。

nl80211除了确定应用层和驱动层的交互标准外,对802.11协议的实现功能划分产生影响。目前通常的802.11 SME功能(无线服务管理实体,即协议栈功能)在驱动或者芯片固件中实现,nl802.11的作者希望在应用层实现更多的协议功能。 wpa_supplicant(包括hostapd)除了实现WPA认证,P2P,WPS的大部分功能外,它还实现了SME功能,在这种功能划分模式下, 无线驱动基本上只需要实现配置硬件和数据收发功能。

linux系统下wpa_supplicant的Driver Event模块和Driver I/F模块(这两者实现是在一个文件,初始化在一个函数,划分成两个模块只是设计理解更清晰)的分析也分wext部分和nl80211部分。


http://www.niftyadmin.cn/n/712028.html

相关文章

java存储过程是什么_你为什么还在用存储过程?

菜菜哥,我新接手了一个项目,看的我头疼呀业务有这么复杂呀?不是的,这个老项目完全是用存储过程写的,每个存储过程都好几百行这样呀,是够头疼的~有没有办法帮我了解业务一下?碰到这样的情况&…

MyBatis——主配置文件的相关内容、使用PageHelper插件进行分页查询

文章目录: 1.MyBatis主配置文件 1.1 主配置文件中标签的编写顺序 1.2 使用数据库属性配置文件(包含properties标签) 1.4 settings标签(设置日志) 1.5 typeAliases标签(设置别名,不推荐使用…

ML_Review_PCA(Ch4)

Note sth about PCA(Principal Component Analysis)   ML6月20日就要考试了,准备日更博客,来记录复习一下这次ML课所学习的一些方法。 博客是在参考老师的ppt,以及戳这里,学习播客之后完成的,主要运用ppt的公式&#…

linux C(hello world)

1.使用vi/vim进行编写代码并保存为hello_world.c.如下&#xff1a; /* This is my first C program*/ #include <stdio.h> int main(){printf("Hello World!\n");return 0; }2.使用gcc进行编译 gcc hello_world.c -o hello_world 3.像执行shell脚本一样执行 ./…

Python setup.py和MANIFEST.in文件

Setup.py文件 from setuptools import setup from codecs import open# 第三方依赖包及版本号 requires [beautifulsoup4>4.3.2,gearman>2.0.2,pymongo>2.7.2,threadpool>1.2.7,geoip2>2.1.0,pywin32>219]# 包列表 packages [MSE,MSE.Device,MSE.Proxy,MSE…

常用技巧_莫德里奇常用的三个过人技巧

大家好&#xff0c;今天我们学习莫德里奇常用的三个过人摆脱技巧&#xff0c;希望大家喜欢&#xff01;今天学习的三个技巧都是莫德里奇在比赛中常用的三个技巧&#xff0c;技巧不难&#xff0c;但很实用&#xff0c;下面我们开始学习&#xff01;第一个技巧&#xff1a;第一个…

Spring——框架概述(概念理解)

文章目录&#xff1a; 1.什么是Spring框架&#xff1f; 2.Spring的优点 2.1 轻量 2.2 针对接口编程&#xff0c;解耦合 2.3 AOP编程的支持 2.4 方便集成各种优秀框架 3.Spring的体系结构 1.什么是Spring框架&#xff1f; Spring 是于 2003 年兴起的一个轻量级的 Java …

linux命令设计,设计模式学习之——命令模式

定义&#xff1a;命令模式&#xff1a;将一个请求封装为一个对象&#xff0c;从而使你可用冉的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持课撤销的操作。UML&#xff1a;命令模式涉及到五个角色&#xff0c;它们分别是&#xff1a;客户端(…