wireless流程简明分析
来源:互联网 发布:大庆软件开发公司 编辑:程序博客网 时间:2024/05/25 12:21
一, 注册流程
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发送。
- wireless流程简明分析
- wireless流程简明分析
- Wlan简明流程分析
- EBox3300开发简明流程
- QT3 简明编程流程
- 单文档,简明流程
- wireless-tools源码分析-iwconfig
- wireless-tools源码分析-iwlist
- wireless-tools源码分析-iwpriv
- 《无冬之夜》简明流程攻略 一
- 《无冬之夜》简明流程攻略 2
- UDP、TCP打洞简明流程
- Arch Linux安装简明流程
- 深圳租房简明分析
- Spark架构简明分析
- wireless
- SQL简明数据分析教程
- cscope、ctags和vim简明使用流程
- 生活中的哈哈语录和顺口溜。
- ARM设计思想与高效C编程
- log 日志
- C++编码转换多字节字符宽字符
- 容器的打印
- wireless流程简明分析
- HTTP状态码详解
- Oracle中rownum的使用
- 活到老学到老
- 在Debian 7中开关touchpad
- 【屌丝学习笔记】第七天 JAVA基础
- js中cookie设置与获取
- visual studio 的10个调试技巧(c++)
- zen cart去掉zenid的简单方法