基帶處理器的開發實踐經驗
前言
本文以一個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是從程式碼中列印出來的。
相關文章
- 大資料處理的開發經驗大資料
- BP 基帶處理器
- 初嘗微信小程式開發與實踐經驗分享微信小程式
- 敏捷開發的實戰經驗敏捷
- 基於ArkUI框架開發——圖片模糊處理的實現UI框架
- UIScrollView 實踐經驗UIView
- JAVA多執行緒下高併發的處理經驗Java執行緒
- UML建模——使用EA工具開發時序圖實踐及經驗時序圖
- 敏捷實踐經驗分享,企業如何在敏捷開發中實施DoD敏捷
- (流式、lambda、觸發器)實時處理大比拼-物聯網(IoT)金融,時序處理最佳實踐觸發器
- 敏捷開發的6個實戰經驗敏捷
- Taro實踐 - 深度開發實踐體驗及總結
- Oracle開發基礎-異常處理Oracle
- 基於 Python 的簡單自然語言處理實踐Python自然語言處理
- Nifi:nifi內建處理器Processor的開發Nifi
- 程式碼審查的實踐經驗
- 蔣煒航:敏捷開發的實戰經驗敏捷
- 基於go開發日誌處理包Go
- 自然語言處理的最佳實踐自然語言處理
- JavaScript 錯誤處理的最佳實踐JavaScript
- DBA實踐---壞塊處理
- 異常處理最佳實踐
- Sobol 序列並行化的實踐經驗並行
- 無限滾動的最佳實踐經驗
- 基於swagger的RESTfulAPI開發實踐SwaggerRESTAPI
- 企業安全實踐經驗分享
- 我的 Android 開發實戰經驗總結Android
- USB開發速成-我最真實的經驗!(轉)
- JavaScript 實戰開發經驗!“智力”測試JavaScript
- 關卡設計實踐經驗總結:一種開展設計實踐的思考框架框架
- 基於Spark的大資料實時處理開課Spark大資料
- .NET中異常處理的最佳實踐
- 20個異常處理的最佳實踐
- Java中的異常處理最佳實踐Java
- 處理器基礎知識
- 銀行基於雲原生架構的 DevOps 建設實踐經驗架構dev
- Taro實踐 – TOPLIFE小程式 開發體驗
- Taro實踐 - TOPLIFE小程式 開發體驗