一,名词简写

Qualcom Message Interface (QMI) 高通信息接口

Modem Host Interface (MHI)    modem host侧接口

Board Data File (BDF)        RF 校准数据

Boot Host Interface extended (BHIe)

Secondary Bootloader (SBL)

WLAN host platform (CNSS platform driver and WLAN host driver)

Wireless Connectivity Subsystem (WCNSS)

PBL (Primary bootloader)  主引导加载程序

二、各部分介绍

WCN39XX 和 WCN 67XX 不同芯片平台,qcom 文档里的流程会有差异,但是整体架构是类似的(当前FW 还是在 modem侧,也FW有独立于modem的)。

当前以 WCN67XX为例:

(1)FW,固件,运行在modem侧(BP)

其余部分运行在AP侧(可以理解跑在主cpu上),对于wlan来说, qcom 驱动和 固件是在不同芯片上,所以需要建立沟通的桥梁。

Modem Host Interface (MHI) 和  Qualcom Message Interface (QMI) 就起到沟通的作用。

(2)QMI 的作用是多个处理器之间进行通信,

QMI server :WLAN firmware

QMI client:有2个

CNSS platform driver -- 1. 负责跟驱动/FW 通信,2. 下载BDF 并 RF 校准参数传递给fw

CNSS daemon -- FW更新校准参数给CNSS daemon

(3)wlan host driver 就是我们的驱动。

综合就是下图结构

三、流程介绍

(1)CNSS platform driver (下面简称cnss)初始化,在我们加载驱动时(可以在rc文件开机加载,也可以配置驱动路径,打开wifi时加载.)会调用如下函数去注册cnss

cnss 会先做3件事

1.调到 cnss_pci_start_mhi  初始化MHI,会有Setting MHI state: INIT打印。

2.调 cnss_wlan_vreg_set   cnss_wlan_gpio_set  ,给wlan 芯片上电,并使能引脚 WLAN_EN

3. 恢复pcie 链接。(cnss_pci 挂载在pci 下)

(2) cnss 调用MHI INIT  API,这个过程会去加载FW image。(MSA1-MSA0)

(3)当FW image 加载完成后, FW 会启动QMI server端,并通知它的2个client端。

这样client 就知道 QMI server 已经起来了

(4)FW 会发送 请求内存的指示给  cnss,申请内存用于M3 文件下载

(5)cnss 将BDF 下载并给FW

(6)当cnss 获取到FW 已经准备ok的 信息,cnss 将通知到驱动,

驱动会通过cnss 将 wlan的配置信息,模式下发给FW

(7)FW 如果更新校准参数,会将更新数据发给cnss deamon。

至此,wlan 就起来了。

四、从Log 来看这次流程

03-16 09:46:27.134  1351  3030 I WifiService: setWifiEnabled package=com.android.settings uid=1000 enable=true isPrivileged=true  //开wifi

03-16 09:46:27.178  1351  1920 D HalDevMgr: initIWifiIfNecessary
01-16 23:28:49.368  1110  1110 I [wifi@1][0x1c972fc89][09:46:27.190607] wlan: [1110:I:HDD] wlan_hdd_state_ctrl_param_write: Wifi Turning On from UI
03-16 09:46:27.194  1110  1110 I android.hardware.wifi@1.0-service: Wifi HAL started
03-16 09:46:27.194  1351  1920 D HalDevMgr: initIWifiChipListeners
03-16 09:46:27.195  1351  1920 D HalDevMgr: getChipIds=[0]
01-16 23:28:49.400  1110  1110 D cnss    : Doing idle restart
01-16 23:28:49.412   335   335 D cnss    : Assert WLAN_EN GPIO successfully    // 使能WLAN_EN GPIO
01-16 23:28:49.412   335   335 D cnss    : Resuming PCI link                   //恢复pci link
01-16 23:28:49.412   335   335 I msm_pcie_enable: PCIe: Assert the reset of endpoint of RC0.
01-16 23:28:49.459   335   335 D cnss    : Setting MHI state: INIT(0)          //初始化MHI
01-16 23:28:49.459   335   335 D cnss    : Setting MHI state: POWER_ON(2)
01-16 23:28:49.461  6895  6895 W cnss_pci 0000: 01:00.0: Direct firmware load for amss20.bin failed with error -2    //cnss_pci 的EP就是0000: 01:00.0,加载固件
01-16 23:28:49.461  6895  6895 W cnss_pci 0000: 01:00.0: Falling back to sysfs fallback for: amss20.bin
01-16 23:28:50.553   233   233 I cnss    : QMI WLFW service connected, state: 0x20141   //cnss 与QMI 连接

01-16 23:28:50.559  6895  6895 D cnss    : Received QMI WLFW request memory indication   //fw 请求内存分配
01-16 23:28:50.559  6895  6895 D cnss    : FW requests for memory, size: 0x660000, type: 1
01-16 23:28:50.559  6895  6895 D cnss    : FW requests for memory, size: 0x39c000, type: 4

01-16 23:28:50.559   233   233 D cnss    : Sending respond memory message, state: 0x20141    //发送内容分配信息
01-16 23:28:50.559   233   233 D cnss    : Memory for FW, va: 0x00000000fdb49a76, pa: 0x00000000a1000000, size: 0x660000, type: 1 
01-16 23:28:50.559   233   233 D cnss    : Memory for FW, va: 0x0000000021548f94, pa: 0x00000000a1800000, size: 0x39c000, type: 4
03-16 09:46:28.386  1549  4500 I cnss-daemon: WLFW service connected

01-16 23:28:50.565  6880  6880 D cnss    : Received QMI WLFW FW memory ready indication       //fw内存准备ok
01-16 23:28:50.565  6880  6880 D cnss    : Posting event: FW_MEM_READY(3), state: 0x20141 flags: 0x0

01-16 23:28:50.577   334   334 D cnss    : Sending BDF download message, state: 0x20143, type: 4 
01-16 23:28:50.594   334   334 D cnss    : Downloading BDF: regdb.bin, size: 24278               //下载regdb.bin

01-16 23:28:50.608   334   334 D cnss    : Sending BDF download message, state: 0x20143, type: 1
01-16 23:28:50.626   334   334 D cnss    : Downloading BDF: bdwlan.elf, size: 60000               //下载bdwlan.elf

01-16 23:28:50.659   334   334 D cnss    : Sending M3 information message, state: 0x20143
01-16 23:28:50.659   334   334 D cnss    : M3 memory, va: 0x0000000098c8960a, pa: 0x00000000a1d00000, size: 0x411bc
01-16 23:28:50.661   334   334 D cnss    : Sending QDSS config download message, state: 0x20143
01-16 23:28:50.662  6880  6880 D cnss    : Received QMI WLFW FW initialization done indication
01-16 23:28:50.662  6880  6880 D cnss    : Posting event: FW_READY(4), state: 0x20143 flags: 0x0
01-16 23:28:50.750   334   334 D cnss    : Processing driver event: FW_READY(4), state: 0x20143
01-16 23:28:50.750   334   334 D cnss    : Processing FW Init Done..

qcom 子系统启动流程相关推荐

  1. qcom android GPS 启动流程

    1 LocationManagerService启动及初始化过程 (1) 在SystemServer.java的startOtherServices中添加LocationManagerService的 ...

  2. JVM启动流程和内存结构

    "Great haste makes great waste" JVM启动流程 JVM是Java程序运行的环境,同时是一个操作系统的一个应用程序进程,因此它有自己的生命周期,也有自 ...

  3. CentOS系列启动流程详解

    一.Linux启动内核文件 1.Linux系统组成 动态视角:内核+根文件系统 静态视角:磁盘分区+相关文件 2.Kernel特点 (1)支持某块化:.ko (kernel object)文件 (2) ...

  4. Android 蓝牙启动流程(以及设置蓝牙为作为sink模式 接收端模式)

    本文以Android 7.1为基础 最近在做蓝牙开发,研究了一下蓝牙的启动流程,总结一下 Google在Android源码中推出了它和博通公司一起开发的BlueDroid以替代BlueZ.BlueZ的 ...

  5. 高通msm8994启动流程简介

    处理器信息 8994包含如下子系统: 子系统 处理器 含义 APSS 4*Cortex-A53 应用子系统 APSS 4*Cortex-A57 应用子系统 LPASS QDSP6 v5.5A(Hexa ...

  6. MDM9x35MDM9x35启动流程简介

    1.前言.... 3 1.1编写背景... 3 1.2概述... 3 1.3定义与缩写... 3 1.4参考资料... 4 2.启动流程.... 4 2.1子系统.处理器及启动地址... 4 2.2启 ...

  7. ARM 之九 Cortex-M/R 内核启动过程 / 程序启动流程(基于ARMCC、Keil)

    内核规范   ARM Cortex-M/R 内核的复位启动过程也被称为复位序列(Reset sequence).ARM Cortex-M/R内核的复位启动过程与其他大部分CPU不同,也与之前的ARM架 ...

  8. CentOS系列启动流程和内核原理(5系列,6系列,7系列)

    前言,本来让我写博客我是拒绝的然而看见大家都在写,还能不能一起友好的玩耍了? 我要是不写怎能和同大神们一起ZB呢?遂开博客! 一.Linux启动内核文件 1.Linux系统组成 动态视角:内核+根文件 ...

  9. 计算机开机启动流程详解

    一.BIOS 1.BIOS是什么 BIOS:基本输入输出系统(Basic Input Output System),它是一组固化到计算机内主板上一个ROM(Read-Only Memory)只读存储器 ...

最新文章

  1. 隧道6in4 和隧道6to4(GNS3)
  2. link url下载php,php脚本生成google play url的下载链接,下载apk并自动反编译后获取android版本号...
  3. python实现汉诺塔程序
  4. 信息学奥赛一本通 2045:【例5.13】蛇形填数
  5. 算法学习三:使用霍纳规则计算多项式
  6. Windows Server 2012R2 安装IIS 的详细配置
  7. 发票系统KF网络报税服务器信息,增值税发票综合服务平台操作指南及注意事项...
  8. configmapsecrets基本操作
  9. golang的dep和vender
  10. 动态拨号vps有什么作用?
  11. DOM2和DOM3——JavaScript高级程序设计第三版第12章知识总结
  12. linux 文件系统损坏修复方式
  13. 简单的KTV点歌系统
  14. 2022年版中国腰果酚市场趋势研究与竞争策略分析报告
  15. 【Bulldog】靶场记录
  16. 历代诗词咏宁夏注释1----常星景: 六盘
  17. QML---Repeater
  18. RISC-V基金会董事谭章熹:RISC-V,从边缘逐渐向中央扩展
  19. java web课设
  20. 深度优先和广度优先的理解

热门文章

  1. JVM详解之:运行时常量池
  2. 软件企业价格估算方法
  3. gRPC应用demo--复杂proto文件编写
  4. 腾讯拿 Cocos Creator 玩出新花样:Hybrid App
  5. QGraphicsScene设置SceneRect
  6. RS485单灯控器通信协议
  7. python创建excel表格_python使用VBA:Excel创建图表(转)
  8. windows pwn 基础知识
  9. sol日历outlook同步
  10. 前端常见面试题之----js单线程,微任务宏任务