Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1636608
  • 博文数量: 511
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 2560
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-06 14:19
文章分类

全部博文(511)

文章存档

2016年(11)

2015年(61)

2014年(257)

2013年(63)

2012年(119)

分类: LINUX

2013-02-16 16:58:13

原文地址:marvell wifi驱动流程介绍 作者:wylhistory

目录

1.    Abstract.. 3

2.    Introduction.. 3

3.    用户使用流程.... 3

4.    WIFI驱动 的初始化.... 5

5.    数据的发送.... 7

6.    ioctl的 调用逻辑.... 11

7.    电源管理相关的调用逻辑.... 14

8.    剩下的问题.... 15


内核:

2.6.21


.这 里主要讲的是我对WIFI驱动的 理解。

因为将要负责WIFI驱动,所以就开始了WIFI驱动的学习,主要分析了WIFI驱动的初始化,数据的发送流程以及和电源管理相关的部分。

         通常用户的做法就是打开一 个socket, 调用一个ioctl, 等待消息返回,收到消息后继续做下面的事情,然后又等待内核消息的返回,如此循环。

         比如我们的系统的流程就是 这样的:

        

驱 动的初始化

 

                            4.1 wifi模 块初始化

这里主要的工作就是注册mmc driver, 注册回调函数,包括电源管理的,包括设备添加的,当然还有一些硬件初始化;

这里最重要的是wlan_add_card这 个函数做了很多事情,我把我没有分析的代码都略过了:

             

 

 

 

                   4.2wlan_add_card的 逻辑

 

这里创建了两个线程,一个用来 处理基本的输入输出,那就是wlan_service_main_thread,一个用来负责重新连接AP(当自动断开的时候),那就是wlan_reassociation_thread

还做了一些firmware的 初始化;然后就是注册mmc设备,取 得端口号;接着就是注册一个网络设备,用来供上层访问,这时候就可以通过ifconfig来 看到输出了,比如是eth0;最后 是一些用来使蓝牙和wifi能够共 存的代码;

 

 

                  

        

                   5.1发送数 据的触发

数据的发送请求从tcp/ip层 传到了这里,于是通过唤醒WIFI的主线 程的处理函数来发送具体的数据请求;

下面看主线程里面的数据发送:

可见最后数据是通过mmc总线发 送到了wifi模 组了,而且开始调度下一次的数据发送,至此,数据的发送过程已经分析完了,下面是ioctl的 调用逻辑

的 调用逻辑

         之所以要分析这个,是因为 上层和WIFI驱 动打交道的方式,多半是通过ioctl的方 式进行的,所以

         看看它的调用逻辑:

        

可以看到WIFI模块 对ioctl的 处理非常复杂,主要是要处理许多标准的调用,也要处理一些私有的调用;后面还要通过rtnl_notify给 上层用户发送消息,这里也是一套机制,我也就不细说了。

        

                                               7.1pm相 关的逻辑

在系统要求睡眠的时候会调用到sbi_suspend_card,由 此开始给WIFI模 块发送相关信息,并且detatch网 络设备,停止收发队列的处理,停止mmc总线等 等,唤醒过程没有分析;

        


OK;
图太多,不想上传,放在附件里面了;
文件:wifi驱动分析.pdf
大小:1288KB
下载:下载

阅读(1642) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~