Linux SDIO WIFI Marvell8801/Marvell88w8801(四) --- Linux Wi-Fi架构
代码工程的GITHUB连接:点进进入GITHUB仓库
https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi
1.Linux SDIO WIFI Marvell8801/Marvell88w8801(一) — 代码及文档介绍
2. Linux SDIO WIFI Marvell8801/Marvell88w8801(二) — Marvell88w8801驱动编译
3. Linux SDIO WIFI Marvell8801/Marvell88w8801(三) — Linux驱动以及组件的使用
4. Linux SDIO WIFI Marvell8801/Marvell88w8801(四) — Linux Wi-Fi架构
5. Linux SDIO WIFI Marvell8801/Marvell88w8801(五) — Linux SDIO API介绍
6. Linux SDIO WIFI Marvell8801/Marvell88w8801(六) — Marvell Linux Wi-Fi driver介绍-WIFI插入卡槽内发生的事情
7. Linux SDIO WIFI Marvell8801/Marvell88w8801(七) — Marvell Linux Wi-Fi driver初始化
8. Linux SDIO WIFI Marvell8801/Marvell88w8801(八) — Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍
关于Linux wifi架构介绍主要分为以下图示几部分
1 Linux wireless架构
首先来看以下这种图。
Linux wifi一般APP跟wifi driver交互会有三个途径
1)ioctl,以我们上一篇文章使用的Marvell APP里面的mlanutl和uaputl.exe为代表。
2)Wext.以图上的iwpriv,iwlist,iwconfig为代表
3)Libnl以图上的wpa_supplicant,iw ,hostapd为代表
补充:iw,hostapd的源码我没有看过,所以不能妄加评论,但是wpa_supplicant是可以走WEXT的
Marvell wifi driver支持三种接口,如下图所示
Marvell wifi driver已经整合了以上三种(IOCTL,WEXT,LIBNL)交互方式,具体如下
后续的三个小节我们针对IOCTL,WEXT以及LIBNL做简短介绍。
2 对接口IOCTL的架构介绍
看完以上理论介绍,那么我们就来看下mlanutl怎样和Marvell wifi driver交互
我们拿连接为例(此部分我们连接一个没有密码的),至于这么做的原因我们只是想搞懂架构,而不是里面的处理方式,所以尽量使其简单化
连接的命令,我们在上一篇文章有介绍,再贴出一次
This command is used to assoc essid with asynced mode,and driver will auto retry if driver auto assoc enabled.
Usage:
mlanutl mlanX assocessid <"[essid]">
Where
<"[essid]"> is the essid which need to be associated with asynced mode.
Examples:
mlanutl mlan0 assocessid “IoT_lwos_wifi”
Mlanutl的入口函数我们截图表示,其中牵扯到的内容有,main函数入参,socket,如果有不懂的请自行查阅内容
下面我们来看process_command的函数
{“assocessid”, process_assocessid}, 连接对应的是这一项,分析下process_assocessid
其中组buffer的过程code中很简单,最出来的样子为:
MRVL_CMDassocessidIoT_lwos_wifi
我们来重点看下sockets发送的流程
既然有了发送,我们来看下Marvell的接收过程
补充知识:Linux wifi有一个叫做net_device的结构体,在这里假设Linux的kernel的版本超过2.6.39,net_device结构体中另外有一组叫做net_device_ops的函数指针,里面有定义ioctl的处理函数指针,如图:
- int (*ndo_do_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
- Called when a user request an ioctl which can’t be handled by
- the generic interface code. If not defined ioctl’s return
- not supported error code.
具体处理函数在woal_do_ioctl 里面,所以上面的接收过程为
woal_do_ioctl-》woal_android_priv_cmd,然后再此函数中有以下处理
所以就整个mlanutl的发送,marvell wifi driver的接收就就串起来
总结: ioctl <—> linux kernel <—> woal_do_ioctl
3 对接口WEXT的架构介绍
WEXT也是通过socket通信,wpa_supplicant的code太多,我们就不从main函数分析,我们只是看下WEXT socket的init,wpa_supplicant的发送,marvell的WEXT的接收
3.1 Wpa_supplicant WEXT socket的init
3.2 Wpa_supplicant WEXT的发送
此部分还是已连接为例
3.3 Marvell wifi driver WEXT的接收
Marvell wifi driver里面会有iw_handler的函数指针结构体
此结构体也是赋连同其他的结构体赋值给net_device中的其中一个结构体成员
在Marvell中的代码为:
也就是说只要在外部程序调用WEXT,最终都会透过函数此接口进来
总结:ioctl <—> linux kernel <—> woal_handler_def中woal_handler的特定函数指针
4 对接口LIBNL的介绍
libnl也是通过socket通信,同样,我们来说下wpa_supplicant的libnl的发送,marvell wifi driver libnl的接收部分
Wpa_supplicant基于libnl的发送
send_and_recv_msgs
Marvell wifi driver基于libnl的接收
woal_cfg80211_ops 结构体中某个函数指针
总结: wpa_supplicant <—> libnl <—> linux kernel <—> Marvell wifi
Linux SDIO WIFI Marvell8801/Marvell88w8801(四) --- Linux Wi-Fi架构相关推荐
- Linux SDIO WIFI Marvell8801/Marvell88w8801(三) --- Linux驱动以及组件的使用
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- Linux SDIO WIFI Marvell8801/Marvell88w8801(六) --- Marvell Linux Wi-Fi driver介绍-WIFI插入卡槽内发生的事情
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- Linux SDIO WIFI Marvell8801/Marvell88w8801(五) --- Linux SDIO API介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- Linux SDIO WIFI Marvell8801/Marvell88w8801(八) --- Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- Linux SDIO WIFI Marvell8801/Marvell88w8801(一) --- 代码及文档介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- STM32F103+SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- Marvell 8801/Marvell 88w8801 实现AP功能/实现热点功能
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- SDIO wifi Marvell8801/Marvell88w8801 介绍(八) ---- Marvell 8801实现STA功能/连接open热点/连接wpa热点/连接wpa2热点
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
- 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍
代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...
最新文章
- postbody传参_post传参params与body的区别(@RequestParam和@RequestBody的区别)
- 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?
- SAP面向iOS设备推Cloud Platform SDK工具
- (五)Unity插件生成
- 你提交代码前没有校验?巧用gitHooks解决
- q7goodies事例_Java 8 Friday Goodies:Lambda和SQL
- 批量建立EXCHANGE邮件帐号建立三部曲
- 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描
- 如何让.Net线程支持超时后并自动销毁!
- Rxjs初体验:制作语音测试工具
- 洛谷P2525 Uim的情人节礼物·其之壱
- wlan和wifi的区别
- java eclipse改名_Java EE更名Jakarta EE,但Oracle还给Eclipse基金会提了很多要求 - IT之家...
- AR技术在智慧交通中的应用
- 游戏(2017-12)
- linux系统发送短信,使用Linux发送短信
- 大华摄像头抓拍图像实时下载
- Python: 异常处理
- 是指使用计算机来加工管理,《运营管理》课程习题及答案-修订版(1)
- 影视后期制作需要用到哪些软件?