- Android系統級深入開發
- 韓超 梁泉
- 1093字
- 2018-12-29 13:39:39
5.4.9 高通特有的組件相關內容
MSM處理器SOC內部集成應用處理器和基帶處理器,因此還包含了很多高通獨有的組件驅動。
這些文件在arch/arm/mach-msm/目錄中,主要內容如下所示。
smd_private.h:共享內存相關的結構和內存區域等定義
smd.c:共享內存的部分底層機制的實現
proc_comm.c:處理器間簡單遠程命令接口實現
smd_rpcrouter.c:ONCRPC實現部分
smd_rpcrouter_device.c:ONCRPC實現部分
smd_rpcrouter_servers.c:ONCRPC實現部分
1.SMEM
SMEM(Shared Memory)用于管理共享內存的區域。有靜態和動態兩種區域。靜態區域一般是定義好的,可以由兩個CPU分別直接訪問。而動態區域一般通過smem的分配機制來分配。
SMEM是最基礎的共享內存管理機制,所有使用共享內存的通信機制或協議都基于它來實現。區域很多,有用于存放基本的版本等信息的,也有用于實現簡單的RPC機制的,還有分配Buffer以用于大量數據傳輸的。
SMEM的區域定義在arch/arm/mach-msm/目錄smd_private.h中,實現代碼大多在該目錄下的smd.c中。
2.SMSM
SMSM利用SMEM中SMEM_SMSM_SHARED_STATE等區域,傳送兩個CPU的狀態信息,諸如modem重啟,休眠等狀態。
SMSM信息變化后,通常通過中斷來通知到另一處理器。
3.PROC COMM
PROC COMM使用SMEM中的最前面一個區域:SMEM_PROC_COMM。它是一套應用處理器向MODEM發送簡單命令的接口。
PROC COMM能傳遞的信息非常有限,僅能傳遞兩個uint32的數據作為參數,也只能接受兩個uint32的數據,加一個boolean作為返回值。但相對于后面提到的RPC,PROC COMM更輕量級。
PROC COMM定義在proc_comm.c中,通常應用處理器會使用msm_proc_comm接口函數來發送命令,并通過輪詢進行等待返回。注意需要支持的命令,要在modem側啟動時,注冊好對應的處理程序。
常用的PROC COMM命令有:
SMEM_PROC_COMM_GET_BATT_LEVEL:獲取電池電量級別
SMEM_PROC_COMM_CHG_IS_CHARGING:判斷是否在充電
SMEM_PROC_COMM_POWER_DOWN:關機
SMEM_PROC_COMM_RESET_MODEM:重啟modem
4.SMD
SMD用于在處理器之間,是一套通過共享內存,同步大量數據的協議。
目前SMD支持64個通道,其中36個已經定義。分別用于藍牙,RPC,modem數據鏈接等。為了防止沖突,每個通道使用兩路連接,將發送和接收分開。
SMD使用SMEM中的對應區域分配適當大小的緩沖,并定義了詳細的協議,用于控制傳輸的開啟、停止等??刂频臉擞涱愃朴赗S-232,而且支持流控。
SMD支持stream模式和packet模式。后者會對數據進行封包,保證對端獲取到的數據與傳送時分塊一致。
SMD主要實現在smd.c中。有一整套的函數接口:
smd_open:打開一個smd通道
smd_close:關閉一個smd通道
smd_read:從一個通道中讀取
smd_write:寫入到一個通道
smd_alloc_channel:分配一個通道
5.ONCRPC
RPC的含義為Remote Procedure Calls(遠程過程調用)。此處特指處理器間的遠程過程調用。在高通平臺中,這一機制又叫ONCRPC(Open Network Computing Remote Procedure Call),以下提及ONCRPC,都是特指高通平臺上的具體實現。
ONCRPC基于共享內存上的SMD實現。使應用處理器端的應用程序,可以直接訪問modem端的服務,支持的服務如下:
Call Manager (CM API)
Wireless Messaging Service (WMS API)
GSDI (SIM/USIM)
GSTK (Toolkit)
PDSM API (GPS)
其他
ONCRPC基于服務端/客戶端的思想構建,代碼分布在smd_rpcrouter開頭的源碼文件中。服務端實現到modem的具體服務訪問,而客戶端暴露透明的API給用戶程序調用。用戶程序如果需要使用ONCRPC,需要鏈接ONCRPC-shared,AMSS RPC exported等庫。
- ClickHouse性能之巔:從架構設計解讀性能之謎
- Vue.js設計與實現
- 機器人Python青少年編程開發實例
- 軟件架構:Python語言實現
- Symfony2 Essentials
- C++面向對象程序設計習題解答與上機指導(第三版)
- Mastering Unity 2D Game Development(Second Edition)
- 蘋果的產品設計之道:創建優秀產品、服務和用戶體驗的七個原則
- 零基礎學Python編程(少兒趣味版)
- Modernizing Legacy Applications in PHP
- UI動效設計從入門到精通
- 微信小程序開發邊做邊學(微課視頻版)
- Mastering Data Analysis with R
- Expert Cube Development with SSAS Multidimensional Models
- 前端Serverless:面向全棧的無服務器架構實戰