代码工程的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架构相关推荐

  1. Linux SDIO WIFI Marvell8801/Marvell88w8801(三) --- Linux驱动以及组件的使用

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  2. Linux SDIO WIFI Marvell8801/Marvell88w8801(六) --- Marvell Linux Wi-Fi driver介绍-WIFI插入卡槽内发生的事情

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  3. Linux SDIO WIFI Marvell8801/Marvell88w8801(五) --- Linux SDIO API介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  4. Linux SDIO WIFI Marvell8801/Marvell88w8801(八) --- Marvell Linux Wi-Fi driver 对接芯片上行下行接口介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  5. Linux SDIO WIFI Marvell8801/Marvell88w8801(一) --- 代码及文档介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  6. SDIO wifi Marvell8801/Marvell88w8801 介绍(四) ---- Marvell8801/Marvell88w8801命令/事件/数据格式

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  7. STM32F103+SDIO wifi Marvell8801/Marvell88w8801 介绍(九) ---- Marvell 8801/Marvell 88w8801 实现AP功能/实现热点功能

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  8. SDIO wifi Marvell8801/Marvell88w8801 介绍(八) ---- Marvell 8801实现STA功能/连接open热点/连接wpa热点/连接wpa2热点

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

  9. 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍

    代码工程的GITHUB连接:点进进入GITHUB仓库 https://github.com/sj15712795029/stm32f1_marvell88w8801_marvell8801_wifi ...

最新文章

  1. postbody传参_post传参params与body的区别(@RequestParam和@RequestBody的区别)
  2. 数据库中存储日期的字段类型究竟应该用varchar还是datetime ?
  3. SAP面向iOS设备推Cloud Platform SDK工具
  4. (五)Unity插件生成
  5. 你提交代码前没有校验?巧用gitHooks解决
  6. q7goodies事例_Java 8 Friday Goodies:Lambda和SQL
  7. 批量建立EXCHANGE邮件帐号建立三部曲
  8. 将一正整数序列{K1,K2,…,K9}重新排成一个新的序列。新序列中,比K1小的数都在K1的左面(后续的再向左存放),比K1大的数都在K1的右面(后续的再向右存放),从K1向右扫描
  9. 如何让.Net线程支持超时后并自动销毁!
  10. Rxjs初体验:制作语音测试工具
  11. 洛谷P2525 Uim的情人节礼物·其之壱
  12. wlan和wifi的区别
  13. java eclipse改名_Java EE更名Jakarta EE,但Oracle还给Eclipse基金会提了很多要求 - IT之家...
  14. AR技术在智慧交通中的应用
  15. 游戏(2017-12)
  16. linux系统发送短信,使用Linux发送短信
  17. 大华摄像头抓拍图像实时下载
  18. Python: 异常处理
  19. 是指使用计算机来加工管理,《运营管理》课程习题及答案-修订版(1)
  20. 影视后期制作需要用到哪些软件?

热门文章

  1. Ubuntu 18.04 安装 fcitx 中文输入法
  2. 23种设计模式-完结!
  3. 推荐几个清华和哈工大学霸的公众号,值得学习
  4. 绿毛水怪入古格--想念阿里阿刁
  5. 对方向导数和梯度的理解
  6. r语言par mfrow c 1 1,R语言:一个画面上画多个图形的方法
  7. Security——Okta
  8. 常见用户行为分析模型解析—— 归因分析
  9. 找不到模块“*.vue”或其相应的类型声明。ts(2307)
  10. linux改熄屏时间,Android亮屏、熄屏控制