前言

本文以一个3GPP下MO call(mobile original call)为例,简述从上层到下层如何建立call。安卓架构很多人都有印象,从APP层到FrameWork层到HAL层再到Linux Kernel层。由于安卓有两个处理器,一个是AP(Application Processor),一个是BP(baseband processor),而通话主要由BP去处理,所以这里我们关注BP。


一、平台架构分析



图1 高通平台架构

一个正常的主叫通话经过以下顺序发送到网络:
UI(属于APP层)
Telephony(属于FrameWork层)
RIL.Java(属于FrameWork层)
RILD(属于HAL层)
QCRIL(高通设计实现的RIL处理机制,完成reqeust、response和modem indication)。
QMI(高通提供的与modem侧的接口)
AP和BP的通信通过共享内存
Call manager(也就是CM,modem还有许多其他的模块这里不作介绍)
NAS(Non-Access Stratum非接入层,业务建立、移动性管理等,通话问题主要关注NAS,OTA消息也是从NAS发出来的)
AS(Access Stratum接入层,无线资源控制和无线链路控制)
最后发往网络


二、OTA (over the air)信令流程








三、高通平台常见通话问题原因


通话问题一般分为手机问题和网络问题,绝大多数都是网络问题造成的,通话问题处理要综合QXDM log,modem 代码和协议。
手机问题:手机没有发某条消息

1,主要得看NAS,因为OTA就是从NAS发出来的,从NAS可以看到当前是否掉网,是否进行其他数据业务,是否进行位置区更新,从而判断是什么导致无法通话。

2,如果NAS报了什么异常,就得向上看qmi、RIL或者向下看AS层确定问题了。
网络侧问题:网络没有发某条消息

3,主要查看信号质量和信号强度就可以确定网络状态了。


高通平台抓取log
在高通平台上,通话问题处理常用高通工具QXDM抓取log,然后分析log找到问题


1.打开QPST查看手机连接状态

首先必须安装QPST和手机驱动。

QXDM 是通过 QPST 软件来统一管理端口连接,实现手机终端和 PC 用户图形界面的一个交互的功能的。

当我们通过 USB 延长线将手机的连接到电脑上后,如果已经正确安装该手机终端的 USB 驱动,那么就应该可以在“我的电脑(右键)->管理->设备管理器”中看到以下菜单。

首先打开设备管理器查看连接的状态。



4.连接手机,Options->Communications->traget port 下拉框选择当前活动的端口,从disconnect变成其他活动的com口,此处是com9


6,QXDM log保存 File->Save Items(CTRL + I),下次可以用File->Load Items(CTRL + L)打开,保存格式是ISF,如果想放弃已经抓到的log,那就点击File->New Item(ALT + I),开始新的log抓取,如果想保存在其他路径那就需要通过File->Item Store Settings来设置
7,注意:一般抓取log得用default logmask来抓取,否则有些log抓不全。





协议查找
在log分析中,如何查找协议呢?




/ 0/

 SYS_SRV_DOMAIN_NO_SRV,

   /**< No service. */

 

 SYS_SRV_DOMAIN_CS_ONLY,

   /**< Circuit switched only capable. */

 

 SYS_SRV_DOMAIN_PS_ONLY,

   /**< Packet switched only capable. */

 

  SYS_SRV_DOMAIN_CS_PS,

   /**< Circuit and packet switched capable. */

 

所以,reg_svc_domain = 3代表的是cs+ps域,cs是电路域,用来打电话、发信息的,ps是数据域,发彩信、数据连接的。

其实代码并不仅仅用来查找结构体,更多的是用来跟踪流程,毕竟log是从代码中打印出来的。


Logo

更多推荐