基帶處理器的開發實踐經驗

Winston_Jory發表於2016-09-29

前言

本文以一個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是從程式碼中列印出來的。


相關文章