|
本文將簡要的介紹android電話系統(tǒng)的架構(gòu),rild在電話系統(tǒng)中所處的位置及作用,最后再簡單分析QCOM平臺中,rild源碼的架構(gòu)。如標(biāo)題所示,本文主要是對rild的概述,讓大家首先了解rild的基本概念。關(guān)于rild的具體工作流程,將在以后的章節(jié)中詳細(xì)分析。
android電話系統(tǒng)架構(gòu)分析
phone service代表所有上層的應(yīng)用,包括Dialer,sms,stk,contact等應(yīng)用;
[edit]Rild作用及架構(gòu)介紹RIL--Radio Interface Layer,包括RIL Java,守護(hù)進(jìn)程rild,動態(tài)鏈接庫libril.so,ril實(shí)現(xiàn)庫libreference-ril.so。 RIL Java層實(shí)質(zhì)上是一個(gè)RIL代理,轉(zhuǎn)接的作用,將phone service所有應(yīng)用的request通過socket發(fā)給rild,再把rild通過socket發(fā)過來的response返回給上層應(yīng)用; Rild是電話系統(tǒng)的核心部分,是init進(jìn)程啟動的一個(gè)守護(hù)進(jìn)程,加載了動態(tài)鏈接庫libril.so和ril實(shí)現(xiàn)庫libreference-ril.so,建立socket監(jiān)聽ril java層發(fā)來的request,將其打包成AT命令發(fā)送給modem,同時(shí)將modem發(fā)過來的消息進(jìn)行解析,然后通過socket發(fā)給ril java層。 [edit]Rild存在的意義由于Android開發(fā)者使用的Modem是不一樣的,不同方案使用的Modem也不一樣,GSM和CDMA就差別更大了,所以各種指令格式,初始化序列都不一樣,為了消除這些差別,Android將ril做了一個(gè)抽象,使用一個(gè)虛擬電話的概念。這個(gè)虛擬電話對象就是GSMPhone(CDMAPhone),Phone對象所提供的功能協(xié)議,以及對下層支撐環(huán)境的要求都有一個(gè)統(tǒng)一的描述,這個(gè)描述的實(shí)現(xiàn)就是靠RIL來完成適配,主要是通過Reference-ril.so來實(shí)現(xiàn)。總之,Android RIL提供了無線硬件設(shè)備與電話服務(wù)之間的抽象層。 [edit]Rild的基本框架上圖所示為Rild的基本框架圖,建立了一個(gè)偵聽Socket,等待客戶端的連接,然后進(jìn)入Eventloop循環(huán),從該連接上讀取RIL-Java成傳遞來的命令并轉(zhuǎn)化成AT指令通過串口發(fā)送到Modem。同時(shí)在Readerlooper循環(huán),等待Modem的回應(yīng),然后將結(jié)果通過socket傳回到Ril-Java層。 [edit]Rild數(shù)據(jù)流
上圖所示為ril-java發(fā)送一個(gè)電話指令到接收到modem的回應(yīng)的過程,從圖中可看出在AT通訊的過程中有兩類響應(yīng):一種是請求后給出應(yīng)答,如上圖step4,一種是通知類,即為不請自來的,例如短信通知達(dá)到,我們稱該類通知為URC。在Rild中URC和一般的Response是分開處理的。 [edit]Rild源碼架構(gòu)分析
上圖是基于Qcom平臺的 hardware/ril 目錄下包含的rild相關(guān)代碼。 1、include/telephony 本目錄下面的ril.h文件,定義了很多如下類型的宏:RIL_REQUEST_XXXX。這些宏代表客戶進(jìn)程向rild發(fā)送的命令,包括SIM卡相關(guān)的功能,打電話,發(fā)短信,網(wǎng)絡(luò)信號查詢等 2、目錄hardware/ril/libril 本目錄下代碼負(fù)責(zé)與客戶進(jìn)程進(jìn)行交互。在接收客戶進(jìn)程命令后,調(diào)用相應(yīng)函數(shù)對命令進(jìn)行處理,再將命令的相應(yīng)結(jié)果傳回客戶進(jìn)程。收到網(wǎng)絡(luò)的通知即URC也傳回給客戶進(jìn)程。 3、目錄hardware/ril/reference-ril 本目錄下的代碼主要負(fù)責(zé)與modem進(jìn)行交互,將libril傳來的命令轉(zhuǎn)為AT命令再發(fā)給modem,也負(fù)責(zé)讀取modem發(fā)過來的相應(yīng)。 4、目錄hardware/ril/rild 本目錄下的代碼是rild守護(hù)進(jìn)程,開機(jī)時(shí)被init進(jìn)程啟動,負(fù)責(zé)完成ril初始化工作,加載ril動態(tài)庫*.so。 |
|
|