AR1021x是高通的一款2T2R的WiFi芯片,支持USB和SDIO两种接口模式,一般挂接在Linux系统上。

学习AR1021x的驱动主要有几个部分,1、USB或SDIO驱动;2、网卡驱动、3、80211驱动。

USB驱动建议参考:

https://www.cnblogs.com/gzqblogs/p/10159417.html

http://blog.sina.com.cn/s/blog_4da4ea3c0102vtzv.html

还有Linux设备驱动程序USB驱动程序那一章

1、UBS结构体关系:

struct usb_device {
    struct usb_host_config *config;    /* All of the configs */
}

struct usb_host_config {
    /* the interfaces associated with this configuration, stored in no particular order */
    struct usb_interface *interface[USB_MAXINTERFACES];
};

struct usb_interface {
    struct usb_host_interface {
        /* array of desc.bNumEndpoint endpoints associated with this interface setting.  these will be in no particular order.     */
        struct usb_host_endpoint *endpoint;
    }*altsetting;
};
struct usb_host_endpoint {
    struct usb_endpoint_descriptor {
        __u8  bLength;
        __u8  bDescriptorType;

__u8  bEndpointAddress;
        __u8  bmAttributes;
        __u16 wMaxPacketSize;
        __u8  bInterval;

// NOTE:  these two are _only_ in audio endpoints.
        // use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof.
        __u8  bRefresh;
        __u8  bSynchAddress;
    } __attribute__ ((packed))     desc;
};

2、函数调用关系:

ath6kl_usb_probe
    ath6kl_usb_create
        ath6kl_usb_io_comp_work
    ath6kl_core_create
        ath6kl_cfg80211_create
            wiphy_new(&ath6kl_cfg80211_ops, sizeof(struct ath6kl));
    ath6kl_core_init
        ath6kl_htc_pipe_attach
        ath6kl_hif_power_on
        ath6kl_cfg80211_init

Send flow:
SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags)
__sys_sendmsg (net\socket.c)
    sock_sendmsg
        __sock_sendmsg
            __sock_sendmsg_nosec (sock->ops->sendmsg调用netlink_sendmsg)
                netlink_sendmsg
                    netlink_unicast
                        netlink_unicast_kernel
                            genl_rcv // nlk->netlink_rcv=cfg->input=genl_rcv
                                netlink_rcv_skb
                                    genl_rcv_msg // err = cb(skb, nlh);
                                        genl_family_rcv_msg
                                            nl80211_trigger_scan // ops->doit
                                                rdev_scan
                                                    ath6kl_cfg80211_scan // rdev->ops->scan
                                                        ath6kl_wmi_beginscan_cmd
                                                            ath6kl_wmi_startscan_cmd
                                                                ath6kl_wmi_cmd_send
                                                                ath6kl_wmi_cmd_send
                                                                    ath6kl_control_tx
                                                                        ath6kl_htc_tx
                                                                            ath6kl_htc_pipe_tx
                                                                                htc_send_packets_multiple
                                                                                    htc_try_send
                                                                                        htc_issue_packets
                                                                                            ath6kl_hif_pipe_send //硬件相关,sdio或USB ,USB类似于usb_class_driver.fops.write
                                                                                                ath6kl_usb_send 
                                                                                                    usb_fill_bulk_urb //初始化bulk urb
                                                                                                    usb_submit_urb    //提交urb,发送到USB设备端
                                        
Receive flow:
ath6kl_core_init
    ath6kl_hif_power_on
        ath6kl_usb_power_on // ar->hif_ops->power_on(ar);
            hif_start
                ath6kl_usb_start_recv_pipes
                    ath6kl_usb_post_recv_transfers
                        usb_fill_bulk_urb
                            ath6kl_usb_recv_complete // urb->complete(urb);
                                ath6kl_usb_io_comp_work //schedule_work(&pipe->io_complete_work);
                                    ath6kl_core_rx_complete
                                        ath6kl_htc_rx_complete
                                            ath6kl_htc_pipe_rx_complete // ar->htc_ops->rx_complete
                                                recv_packet_completion
                                                    do_recv_completion
                                                        ath6kl_rx // connect.ep_cb.rx
                                                            ath6kl_wmi_control_rx
                                                                ath6kl_wmi_proc_events
                                                                    ath6kl_wmi_proc_events_vif
                                                                        ath6kl_wmi_scan_complete_rx
                                                                            ath6kl_scan_complete_evt
                                                                                ath6kl_cfg80211_scan_complete_event
                                                                                    cfg80211_scan_done // 此函数通知内核将扫描结果上报
                                                                                        __cfg80211_scan_done // queue_work(cfg80211_wq, &wiphy_to_rdev(request->wiphy)->scan_done_wk);
                                                                                            ___cfg80211_scan_done
                                                                                                nl80211_build_scan_msg
                                                                                                    nl80211_send_scan_msg
                                                                                                        nl80211_add_scan_req

AR1021x USB网卡驱动学习笔记相关推荐

  1. Linux驱动学习笔记

    驱动学习笔记 1.字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序. 第二种就是将驱动编译成模块(Li ...

  2. 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】

    目录 1.Linux内核输入子系统概念导入 1.1 输入设备工作机制 1.2 运行框架 1.3 分层思想 2.驱动开发步骤 2.1 在init()或probe()函数中 2.2 在exit()或rem ...

  3. linux安装comfast网卡驱动,电脑如何通过usb共享手机网络 Linux安装wifi 无线网络 811AC usb网卡驱动...

    电脑如何通过usb共享手机网络 该方法是通过USB线将手机和电脑连接的方式来共享网络,所以不管是笔记本电脑还是台式机,不管电脑有无线网卡,都可以使用该方法. 准备工作:首先用数据线把手机连接到电脑上, ...

  4. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

  5. Debian系统源码安装usb网卡驱动

    系统为debian 9.6 64位版本,安装网卡驱动为asix的 AX88772B芯片 1. 安装系统build模块 apt-get install linux-image-$(uname -r) l ...

  6. ubuntu 16.04/18.04安装TP-LINK TL-WDN5200H无线USB网卡驱动

    TP-LINK TL-WDN5200H无线USB网卡驱动没有自带ubuntu系统的驱动 参考如下两篇文章后搞定: 1.https://blog.csdn.net/F_BQ333/article/det ...

  7. ubuntu 16.04安装TP-LINK TL-WDN5200H无线USB网卡驱动

    TP-LINK TL-WDN5200H无线USB网卡驱动没有自带ubuntu系统的驱动 参考如下两篇文章后搞定: 1.https://blog.csdn.net/F_BQ333/article/det ...

  8. USB 网卡驱动数据流

    1. peripheral 1.1 发数据 tx (1)应用层通过系统调用,进入到内核层: (2)内核的数据链路层将数据送入驱动层: (3)USB 网卡驱动将数据发送到 UDC控制器:(将req 写入 ...

  9. 电脑如何通过usb共享手机网络 Linux安装wifi 无线网络 811AC usb网卡驱动

    电脑如何通过usb共享手机网络 该方法是通过USB线将手机和电脑连接的方式来共享网络,所以不管是笔记本电脑还是台式机,不管电脑有无线网卡,都可以使用该方法. 准备工作:首先用数据线把手机连接到电脑上, ...

  10. 雷凌无线usb网卡驱动官方版

    雷凌无线usb网卡驱动v5.1.7.1官方版 软件大小:38.7MB 软件语言:简体中文 软件类别:硬件驱动 软件授权:官方版 更新时间:2015-01-15 应用平台:/Win8/Win7/WinX ...

最新文章

  1. 在ATS 5.3.0上测试background_fetch插件
  2. VMware Mac版本漏洞可任意执行恶意代码
  3. oracle数据泵导入分区表统计信息报错(一)
  4. 【SpringBoot】项目实现热部署的两种方式
  5. 注册表被黑客篡改 怎样修复_使用快速注册表黑客设置Office 2007配色方案
  6. (z)无杂散动态范围SFDR--影响通信机性能的因素
  7. Python写个小游戏:看图猜成语(上)
  8. 服务器外接显卡不显示,RE: power edge T620按照第二块显卡,不能正常工作,操作系统中查看驱动程序安装正常,工作正常,外接显示器无独立信号...
  9. HC-SR501红外人体传感模块封锁时间调整
  10. 带参数矩阵求逆(matlab)
  11. Rabbitmq基于插件的延迟队列
  12. OpenGL核心技术之Gamma校正
  13. 汉字拼音的一个解决方法(初具使用价值)
  14. 问题解决:Invalid version number:Version number may be negative or greater than 255
  15. 全能IDE VsCode
  16. 调用C# System.Drawing 画图
  17. 手机上的 Google 地图
  18. ABA问题基础及解决
  19. ADAMS 文件导入的相关研究
  20. 台式电脑怎么解除自动锁计算机,电脑不小心被锁了怎么办如何解除开机密码

热门文章

  1. 平分七筐鱼c语言y,平分七筐鱼 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. vscode汇编环境配置
  3. 生物信息学之抗癌药物反应论文阅读三:ML+PDX
  4. BlenderGIS:No ImageIO解决办法 天地图地图资源
  5. 如何购买并配置华为云服务器?
  6. android手机和包支付,中国移动和包支付客户端下载-和包支付appv9.7.16 安卓版-手机腾牛网...
  7. 药品计算机系统操作知识培训,新版GSP:计算机系统专业知识培训测试题(6)
  8. 「雷军万字总结」小米十周年公开演讲全文
  9. 机器人开发--D435
  10. Python 【人工智能】【大数据】【全栈】【自动化】技能-张子夜-专题视频课程...