qca wlan wifi modules 解析四

qca wlan wifi modules 解析四WiFi驱动架构的一般层次为:应用层BSDsocket层TCP/IP协议层IP层网络设备层net/coremac8011层/ieee80211设备驱动层具体实例如下图:上层应用程序简历socket,对网络接口进行ioctl操作,正是通过触发,网络设备和80211层,调用底层驱动函数来实现的。qcawlanmodules中,通过创建虚拟AP来实现WiFi功能,即VAP…

大家好,又见面了,我是你们的朋友全栈君。

WiFi驱动架构的一般层次为:

  • 应用层
  • BSD socket层
  • TCP/IP协议层
  • IP层
  • 网络设备层net/core
  • mac8011层/ieee80211
  • 设备驱动层

具体实例如下图:

上层应用程序简历socket,对网络接口进行ioctl操作,正是通过触发,网络设备和80211层,调用底层驱动函数来实现的。

qca wlan modules中,通过创建虚拟AP来实现WiFi功能,即VAP: 创建VAP的命令如下:

wlanconfig ath0 create wlandev wifi0 wlanmode ap
复制代码

VAP网络接口是通过wifi radio网络接口的ioctl SIOC80211IFCREATE来创建的,VAP接口是wifi设备接口的子接口。

VAP创建调用了net_device中ioctl,在qca wlan modules中,__ath_attach 中attach了ioctl的操作:

dev->do_ioctl = ath_ioctl;
复制代码

ath_ioctl中,转入cmd:SIOC80211IFCREATE中执行创建:

case SIOC80211IFCREATE:
	{
       	    struct ieee80211_clone_params cp;
            if (scn->sc_in_delete) {
                printk("%s: Can't create VAP, in detach\n", __func__);
                return -ENODEV;
            }
            if (__xcopy_from_user(&cp, ifr->ifr_data, sizeof(cp))) {
       	        return -EFAULT;
            }	
            error = osif_ioctl_create_vap(dev, ifr, cp, scn->sc_osdev);
	}
        break;
复制代码

osif_ioctl_create_vap()调用alloc_netdev(),

dev = alloc_netdev(sizeof(osif_dev), name, ether_setup);
    if(dev == NULL) {
        adf_net_delete_wlanunit(unit);
        return EIO;
    }
复制代码

alloc_netdev()函数生成一个net_device结构体,对其成员赋值并返回该结构体的指针。第一个参数是设备私有成员的大小,第二个参数为设备名,第三个参数为net_devicesetup()函数指针。setup()函数接收的参数为struct net_device指针,用于预置net_device成员的值。

然后wlan_vap_create()函数根据创建wifi的模式来创建接口:

vap = wlan_vap_create(devhandle, cp.icp_opmode, scan_priority_mapping_base, cp.icp_flags, cp.icp_bssid, cp.icp_mataddr);
复制代码

wlan_vap_create()函数中实际调用的是attach关联的函数ath_vap_create(), 既ath_attach中的:

ic->ic_vap_create = ath_vap_create;  
复制代码

ath_vap_create()中设置一些列wifi参数

  • ieee80211_vap_setup
  • ieee80211vap_set_macaddr
  • ieee80211_vap_attach

底层的VAP创建,调用了osif_vap_setup()

osif_ioctl_create_vap()最后在实现网络接口的注册:

register_netdevice(dev)
复制代码

调用关系如下图:

VAR的删除操作,也通过wifi网络接口的ioctl来实现的,SIOC80211IFDESTROY

调用关系如下图:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157548.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm import cv2找不到指定模块_pycharm显示主菜单

    pycharm import cv2找不到指定模块_pycharm显示主菜单首先,我们是要导入opencv(cv2)包,那么这个包是不是必须就在我们这个文件夹下面才行?我认为必须是这样。所以,我们在cmd用pipinstall命令安装,也必须在这个文件夹下执行,并且放到pip.exe一起,我们从opencv官网下好的whl文件也应该放在python/scripts这个里面。在cmd里这样执行,就可以,根据自己的文件夹来,命令仅提供参考:cdC:\Users\YZTang\PycharmProjects\rk-pro\venv\Scriptspipinsta.

    2022年8月27日
    0
  • Pycharm的python interpreter选择「建议收藏」

    Pycharm的python interpreter选择「建议收藏」初学python时我在电脑装idle,装上了ANACONDA,也裸装了python3.9(也就是说我电脑上有两个独立的python,一个是python3.9,另一个是装在Anaconda里面的python3.7。在我装上Pycharm后,Pycharm自动使用Anaconda提供的环境,虽然Anaconda的包很全,但还是有缺少的包,当我使用pip命令安装需要的包时,确自动安装到了python3.9的安装目录下,而且命令行运行python时只运行python3.9而不是Anaconda里面的python

    2022年8月27日
    3
  • 前端页面的整合_web前端开发是什么

    前端页面的整合_web前端开发是什么前端页面的整合

    2022年4月22日
    41
  • docker 上传本地镜像_不同docker仓库镜像同步

    docker 上传本地镜像_不同docker仓库镜像同步前言之前通过docker搭建过jenkins+python3环境,如果想要在不同的机器上搭建一样的环境,就可以将之前搭建的镜像上传到镜像仓库,这样方便在不同的机器上快速搭建同一套环境。如果公开的话

    2022年7月31日
    3
  • 软件测试缺陷报告_软件测试缺陷分析

    软件测试缺陷报告_软件测试缺陷分析软件缺陷一、软件缺陷定义二、常见的软件缺陷三、软件缺陷产生原因四、软件缺陷的生命周期五、软件缺陷报告应包含的内容六、缺陷报告模板七、企业案例分析案例1缺陷描述案例2缺陷标题提炼Author:lucky多多转载请注明出处!一、软件缺陷定义软件缺陷是计算机或程序中存在的会导致用户不能或者不方便完成功能的问题、错误、或者隐藏的功能缺陷。缺陷的存在会导致产品在某种程度上不能满足用户的需要IEEE…

    2022年9月16日
    0
  • C# 读写 Photoshop PSD文件 操作类「建议收藏」

    C# 读写 Photoshop PSD文件 操作类「建议收藏」使用方法显示PSDOpenFileDialog_Dialog=newOpenFileDialog();_Dialog.Filter=”*.psd|*.psd”;if(_Dialog.ShowDialog()==DialogResult.OK){Zgke.MyImage.Image…

    2022年6月6日
    90

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号