RK WiFi驱动层初始化分析
RK3368 默认支持的WiFi芯片为AP6XXX系列,此芯片还默认支持BT。
可以先看看原理图里面的的情况,方便我们理解其在代码里面的配置情况
WiFi 设备配置:
./rockchip/rk3368/*/rk3368-p9.dts
此配置为WiFi kernel驱动在初始化时使用,包括芯片类型,ref voltage为1800mv, wake up irq为GPIO_ACTIVE_HIGH
device/rockchip/rk3368/*/rockchip_defconfig
此文件有kernel相关的WiFi相关配置,只有打开这些配置,真正WiFi驱动才能初始化。
打开配置:CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP
表示WiFi驱动是built in的,而且是在内核启动之后才开始加载驱动。
接下来来看看代码里面WiFi驱动加载的地方:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
|
由于上面定义了CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP, 那么rockchip_wifi_init_module_rkwifi()就会被调用
rockchip_wifi_init_module_rkwifi,从这个起点开始,我们来看看WiFi的整个初始化流程:
以上流程图涉及的源码目录:
drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/
net/rfkill/rfkill-wlan.c
drivers/mmc/core/host.c
drivers/mmc/core/sdio_bus.c
看完整个流程图,我们再结合看下机器启动时的kernel messages就很轻松了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
因为大部分WiFi是通过模拟SD卡来操作的,所以里面还会牵涉MMC驱动,
整个初始化过程复杂缠绕,备注以下几点:
1、WiFi驱动是通过一个单独的线程wifi_init_thread去加载,这样可以减少开机阻塞的时间;
2、adapter->wifi_plat_data=dhd_wlan_control 是在wifi_ctrlfunc_register_drv中进行初始化的,后面的set_power和set_carddetect钩子函数都是在这里进行调用的;
3、sdio总线驱动检测到的id和bcmsdh_sdmmc_ids表里的匹配才会调用probe函数;
4、dhd_update_fw_nv_path固件和配置存放在/system/etc/firmware/路径下,所以如果我们有WiFi相关的配置文件,直接编译拷贝到这个目录即可
5、在wl_cfg80211_attach调用wl_cfg80211_attach_p2p进行p2p初始化,可以看到最后log打印P2P interface started
RK WiFi驱动层初始化分析相关推荐
- RLT USB WiFi驱动源码分析(Type A)
USB WiFi驱动属于USB设备驱动,底层是USB主机控制器驱动.USB主机控制器驱动根据USB协议向USB设备驱动提供读写接口.USB WiFi驱动根据USB主机控制器驱动提供的读写接口对USB ...
- marvel wifi 驱动分析
WIFI驱动分析 Revision History Date Issue Description Author <25/02/2009> <0.5> First draft W ...
- Android wifi探究二:Wifi framework层源码分析
上一篇博客初步认识了wpa_supplicant的作用和使用方法,并且尝试着梳理了wifi的大框架,不过,java层的框架我们忽略了,没有分析,也就是说上一篇博客简单的指出了wifi代码的大框架,那么 ...
- 【Android 事件分发】事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) 文章目录 ...
- V4L2 驱动层分析
一.Camera V4L2 驱动层分析 Linux系统中视频输入设备主要包括以下四个部分: 1.字符设备驱动:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用户空间: 2.V4L2驱 ...
- wifi linux 驱动分析,Linux 下wifi 驱动开发(二)—— WiFi模块浅析
一.什么是wifi 模块百度百科上这样定义: Wi-Fi模块又名串口Wi-Fi模块,属于物联网传输层,功能是将串口或TTL电平转为符合Wi-Fi无线网络通信标准的嵌入式模块,内置无线网络协议IEEE8 ...
- Binder源码分析之驱动层(原)
前言 在< Binder源码分析之ServiceManager >一文中我们介绍了利用Binder进行通讯的流程,即ServiceManager把自己注册为"管理员"之 ...
- RK平台移植rtl8852bs wifi驱动
RK平台 android 12的内核里面没有rtl8852bs wifi驱动,找模组原厂要了驱动,看了一下是其他平台的...要放RK平台是编译不过的,要做一下相应的修改,有点坑! 首先,修改kerne ...
- Linux 下wifi 驱动开发(三)—— SDIO接口WiFi驱动浅析
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转 ...
最新文章
- java redis 命名空间_redis里通过命名空间存储缓存,根据结构生成树型
- 判断正则 shell_【US分享】Shell中的括号
- 一些在线的WebEdit编辑器
- Egret note
- zookeeper简介以及C客户端用法
- Jupyter配置步骤
- 一场赛跑引起的并发知识
- Eclipse:如何附加Java源代码
- Python 3.7 即将发布,引入多项新功能!
- soliworks三维机柜布局(三)绘制电气线路图
- Android6.0 dump h264/h265编码裸流(二)
- servlet的请求转发与重定向
- java fseek_无法使用fseek(C)浏览文件
- 推导余弦距离和欧式距离的关系
- Linux安装以及固定ip
- [BZOJ 3561] DZY Loves Math VI
- html验证码自动刷新,验证码输入错误后自动刷新验证码
- 会议室选多大尺寸的会议平板才合适?
- 【Nature | EpiMap】Regulatory genomic circuitry of human disease loci by integrative epigenomics
- 图像处理(十一)高斯差分算法(边缘检测)