AR1021x USB网卡驱动学习笔记
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网卡驱动学习笔记相关推荐
- Linux驱动学习笔记
驱动学习笔记 1.字符设备驱动 Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启 动的时候就会自动运行驱动程序. 第二种就是将驱动编译成模块(Li ...
- 【嵌入式环境下linux内核及驱动学习笔记-(16)linux总线、设备、驱动模型之input框架】
目录 1.Linux内核输入子系统概念导入 1.1 输入设备工作机制 1.2 运行框架 1.3 分层思想 2.驱动开发步骤 2.1 在init()或probe()函数中 2.2 在exit()或rem ...
- linux安装comfast网卡驱动,电脑如何通过usb共享手机网络 Linux安装wifi 无线网络 811AC usb网卡驱动...
电脑如何通过usb共享手机网络 该方法是通过USB线将手机和电脑连接的方式来共享网络,所以不管是笔记本电脑还是台式机,不管电脑有无线网卡,都可以使用该方法. 准备工作:首先用数据线把手机连接到电脑上, ...
- 转载:mongoDB java驱动学习笔记
http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...
- Debian系统源码安装usb网卡驱动
系统为debian 9.6 64位版本,安装网卡驱动为asix的 AX88772B芯片 1. 安装系统build模块 apt-get install linux-image-$(uname -r) l ...
- 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 ...
- ubuntu 16.04安装TP-LINK TL-WDN5200H无线USB网卡驱动
TP-LINK TL-WDN5200H无线USB网卡驱动没有自带ubuntu系统的驱动 参考如下两篇文章后搞定: 1.https://blog.csdn.net/F_BQ333/article/det ...
- USB 网卡驱动数据流
1. peripheral 1.1 发数据 tx (1)应用层通过系统调用,进入到内核层: (2)内核的数据链路层将数据送入驱动层: (3)USB 网卡驱动将数据发送到 UDC控制器:(将req 写入 ...
- 电脑如何通过usb共享手机网络 Linux安装wifi 无线网络 811AC usb网卡驱动
电脑如何通过usb共享手机网络 该方法是通过USB线将手机和电脑连接的方式来共享网络,所以不管是笔记本电脑还是台式机,不管电脑有无线网卡,都可以使用该方法. 准备工作:首先用数据线把手机连接到电脑上, ...
- 雷凌无线usb网卡驱动官方版
雷凌无线usb网卡驱动v5.1.7.1官方版 软件大小:38.7MB 软件语言:简体中文 软件类别:硬件驱动 软件授权:官方版 更新时间:2015-01-15 应用平台:/Win8/Win7/WinX ...
最新文章
- 在ATS 5.3.0上测试background_fetch插件
- VMware Mac版本漏洞可任意执行恶意代码
- oracle数据泵导入分区表统计信息报错(一)
- 【SpringBoot】项目实现热部署的两种方式
- 注册表被黑客篡改 怎样修复_使用快速注册表黑客设置Office 2007配色方案
- (z)无杂散动态范围SFDR--影响通信机性能的因素
- Python写个小游戏:看图猜成语(上)
- 服务器外接显卡不显示,RE: power edge T620按照第二块显卡,不能正常工作,操作系统中查看驱动程序安装正常,工作正常,外接显示器无独立信号...
- HC-SR501红外人体传感模块封锁时间调整
- 带参数矩阵求逆(matlab)
- Rabbitmq基于插件的延迟队列
- OpenGL核心技术之Gamma校正
- 汉字拼音的一个解决方法(初具使用价值)
- 问题解决:Invalid version number:Version number may be negative or greater than 255
- 全能IDE VsCode
- 调用C# System.Drawing 画图
- 手机上的 Google 地图
- ABA问题基础及解决
- ADAMS 文件导入的相关研究
- 台式电脑怎么解除自动锁计算机,电脑不小心被锁了怎么办如何解除开机密码
热门文章
- 平分七筐鱼c语言y,平分七筐鱼 - 寂寞暴走伤的个人空间 - OSCHINA - 中文开源技术交流社区...
- vscode汇编环境配置
- 生物信息学之抗癌药物反应论文阅读三:ML+PDX
- BlenderGIS:No ImageIO解决办法 天地图地图资源
- 如何购买并配置华为云服务器?
- android手机和包支付,中国移动和包支付客户端下载-和包支付appv9.7.16 安卓版-手机腾牛网...
- 药品计算机系统操作知识培训,新版GSP:计算机系统专业知识培训测试题(6)
- 「雷军万字总结」小米十周年公开演讲全文
- 机器人开发--D435
- Python 【人工智能】【大数据】【全栈】【自动化】技能-张子夜-专题视频课程...