Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2090002
  • 博文数量: 288
  • 博客积分: 10594
  • 博客等级: 上将
  • 技术积分: 3469
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-27 19:27
文章分类

全部博文(288)

文章存档

2012年(4)

2011年(30)

2010年(40)

2009年(32)

2008年(71)

2007年(79)

2006年(32)

分类: LINUX

2011-06-17 15:24:51

一, 注册流程
 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发送。
阅读(1939) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~