Wlan简明流程分析
来源:互联网 发布:cms影视系统哪个好 编辑:程序博客网 时间:2024/06/10 13:54
一, 注册流程
1. 首先注册SDIO卡,进行一些初始化。
2. 进入sdio的probe, 里边调用wlan_add_card()接口。
3. 在这里创建了两个主要的线程
1. wlan_service_main_thread 主要的IO处理
2. wlan_reassociation_thread 主要进行AP的处理,断开时自动重连AP等。
4. 初始化wlan的fw.
5. 注册sbi, 注册net_device设备。
1. 首先注册SDIO卡,进行一些初始化。
2. 进入sdio的probe, 里边调用wlan_add_card()接口。
3. 在这里创建了两个主要的线程
1. wlan_service_main_thread 主要的IO处理
2. wlan_reassociation_thread 主要进行AP的处理,断开时自动重连AP等。
4. 初始化wlan的fw.
5. 注册sbi, 注册net_device设备。
二,数据发送流程
1. wlan_hard_start_xmit接受到数据,接着调用wlan_tx_packet。
2. 在wlan_tx_packet中,通过wmm_map_and_add_skb将skb拷贝到内存中.
3. 调用wake_up_interruptible(&priv->MainThread.waitQ)唤醒mainthread.
4. 主线程通过wmm_process_tx, 调用wlan_process_tx。
5. 最后通过sbi_host_to_card将skb包,发送到card上,由sdio送入wifi模组。
6. wmm_process_fw_iface_tx_xfer_start本身将数据发送。
三, 分析完数据流的通道,看看上层与底层交互的通道。
1. dev->do_ioctl = wlan_do_ioctl, ioctl 流程
1. 跳到wlan_do_ioctl, 进行ioctl 处理。
2. 数据是直接通过参数返回的。
2. 通过wlan_handler_def的netlink返回, 通用的和私有的接口
struct iw_handler_def wlan_handler_def = {
num_standard:sizeof(wlan_handler) / sizeof(iw_handler),
num_private:sizeof(wlan_private_handler) / sizeof(iw_handler),
num_private_args:sizeof(wlan_private_args) / sizeof(struct iw_priv_args),
standard:(iw_handler *) wlan_handler,
private:(iw_handler *) wlan_private_handler,
private_args:(struct iw_priv_args *) wlan_private_args,
#if WIRELESS_EXT > 20
get_wireless_stats:wlan_get_wireless_stats,
#endif
};
3. 返回的方式也有两种,1种直接通过参数返回,1种通过wireless_send_event发送。
1. wlan_hard_start_xmit接受到数据,接着调用wlan_tx_packet。
2. 在wlan_tx_packet中,通过wmm_map_and_add_skb将skb拷贝到内存中.
3. 调用wake_up_interruptible(&priv->MainThread.waitQ)唤醒mainthread.
4. 主线程通过wmm_process_tx, 调用wlan_process_tx。
5. 最后通过sbi_host_to_card将skb包,发送到card上,由sdio送入wifi模组。
6. wmm_process_fw_iface_tx_xfer_start本身将数据发送。
三, 分析完数据流的通道,看看上层与底层交互的通道。
1. dev->do_ioctl = wlan_do_ioctl, ioctl 流程
1. 跳到wlan_do_ioctl, 进行ioctl 处理。
2. 数据是直接通过参数返回的。
2. 通过wlan_handler_def的netlink返回, 通用的和私有的接口
struct iw_handler_def wlan_handler_def = {
num_standard:sizeof(wlan_handler) / sizeof(iw_handler),
num_private:sizeof(wlan_private_handler) / sizeof(iw_handler),
num_private_args:sizeof(wlan_private_args) / sizeof(struct iw_priv_args),
standard:(iw_handler *) wlan_handler,
private:(iw_handler *) wlan_private_handler,
private_args:(struct iw_priv_args *) wlan_private_args,
#if WIRELESS_EXT > 20
get_wireless_stats:wlan_get_wireless_stats,
#endif
};
3. 返回的方式也有两种,1种直接通过参数返回,1种通过wireless_send_event发送。
- Wlan简明流程分析
- wireless流程简明分析
- wireless流程简明分析
- wlan分析
- WLAN用户接入流程
- WLAN驱动分析文档
- WLAN驱动分析文档
- WLAN驱动分析文档
- 切换流程(WLAN->E-UTRAN)
- wlan信道利用效率分析
- WLAN协议分析的网站
- qcacld-2.0的wlan分析
- EBox3300开发简明流程
- QT3 简明编程流程
- 单文档,简明流程
- WLAN用户接入流程(转)
- WLAN
- WLan
- 扫雷游戏制作全过程02 之JLabel弯路
- computer organization and design notes(3)-程序调用
- 安装vim插件,提高编程效率
- 设计模式学习(三) —— Builder
- 亲爱的姑娘~~~
- Wlan简明流程分析
- ARM Linux静态映射分析
- bash脚本循环测试sample
- 导弹拦截二&&http://acm.hdu.edu.cn/showproblem.php?pid=1257
- ChartDirector 5.0 for python 笔记【0】目录概览
- ChartDirector 5.0 for python 笔记【1】环境介绍和搭建
- Android常用名令集锦
- dm6446的内存分配(davinci)
- linux的硬链接和软链接