1.課題研究的背景和意義
1.1 Android RIL簡介
Android RIL(Radio Interface Layer)提供了無線基帶Modem與電話應用之間的抽象層.在Android RIL層中,完善的考慮了電話應用的各種情況,如:雙SIM卡;電話,短信,彩信,PS DATA業務,PIN/PUK碼等各種3G網絡業務.
RIL層在Android系統中,處于硬件抽象層,運行在一個獨立的守護進程中,主要為框架層和基帶接口提供適配,具有良好的獨立性.其中的通信機制,與框架層接口主要使用Socket通信,內部線程主要使用管道,與基帶接口默認使用AT命令.且其代碼均由C和C++來完成,依賴第三方庫較少,所以,Android RIL層具有良好的移植性.
1.2 移植Android RIL的意義
目前很多基于L I N U X平臺的系統,如:
PC(LINUX操作系統),QT,路由器平臺(如O p e n W r t系統)等等,都對連接3 G網絡有需求,但在這些平臺原生的功能中,沒有獨立的RIL接口層,所以開發一套基于LINUX的獨立應用,用來支持與基帶發起各種3G網絡相關業務是很有意義的.Android RIL具有良好的穩定性,獨立性,以及對3G網絡業務的完整性,所以將其移植成一個獨立的,供LINUX通用平臺使用的RIL層,可方便所有的基于LINUX的平臺完成各種電話應用的開發.
2.Android系統中RIL層分析
2.1 RIL層在Android系統中的位置
RIL在Android系統中,處于硬件抽象層位置.主要通過SOCKET通信連接框架層,將框架層下發的消息解析后,向基帶下發相應的AT指令,并將從基帶返回的AT指令的響應,封裝成消息,返回給框架層.位置如圖1所示.
2.2 Android RIL工作原理
2.2.1 Android RIL代碼說明
RIL主要由RILD(radio interface layerdaemon)守護進程和兩個動態庫:librefrence_ril.so和libril.so組成.Android工程源代碼目錄中,RIL代碼包含于hardware/ril目錄中,主要文件說明如表1所示.
2.2.2 Android RIL工作原理
rild以一個main函數作為整個RIL層的入口點,負責完成初始化.libril.so庫包含了主要的消息循環流程,主要負責與框架層進行交互,在接收框架層命令后,調用相應函數處理,然后將命令響應結果傳回客戶進程.
librefrence_ril.so主要提供各個具體業務的AT指令的封裝和解析接口,供libril調用,向下通過AT_COM和基帶進行交互.具體工作線程如圖2所示.
3.移植Android RIL層功能
通過對Android RIL層代碼分析, 在RIL層主要使用了基于linux的POSIX Thread(pthread)多線程編程和socket IPC通信,這些在移植過程中是無須考慮的.需要移植的是RIL層依賴于Android系統的功能.
3.1 移植Android系統屬性
系統屬性系統的一個重要特性.屬性數據由init進程維護,用于管理系統全局配置和狀態,每個屬性對應一對鍵值.
在RIL層中對系統屬性的依賴比較小,所以不需要將Android系統屬性機制全部移植.RIL層主要在RILD初始化過程中需要從系統屬性讀取reference-ril.so路徑.AT設備路徑,網卡設備等信息,以及運行過程中將從網絡中動態獲取的IP和DNS等信息寫入對應系統屬性中.
可根據所處的具體系統,將需要的信息寫入系統保存全局共享參數的機制,并根據所處系統的配置方法去獲取需要的參數.由于RIL層需要獲得的參數非常有限,所以同樣可以配置RIL層獨有的配置文件,通過配置和解析RIL層的配置文件來達到替換Android系統屬性機制.甚至可直接在rild啟動的時候,作為應用參數直接傳入.
3.2 移植Android.mk編譯文件
Android. m k機制是Android平臺利用makefile封裝成一種特有的編譯機制,在通用linux平臺上,通常每個模塊都有自己的Makefile文件.所以我們需要根據。/libril../reference-ril和。/rild文件夾中的Android.
mk內容寫出對應的Makefile文件.從本質上來講,Android.mk就是對Makefile的的一部分,所以移植編譯文件是很簡單的.
. / l i b RIL和。 / reference – RIL中的Android.mk描述了libril.so和libreferenceril.
so兩個動態庫的生成和安裝路徑../rild中的Android.mk描述了rild守護進程的生成和安裝路徑和鏈接libril.so庫.
3.3 移植Parcel消息
由以上對Android RIL層功能分析發現,框架層和RIL層的交互是通過socket消息來互相傳遞的.消息作為IPC通信的數據單元是通過Parcel容器來進行封裝的,用于存儲序列化數據.所以在移植過程中,完成相同的消息機制,是整個移植工作的核心任務.源碼位于Frameworks/base/libs/binder/parcel.cpp.
分析源碼可知:1.整個讀寫全是在內存中進行,主要根據數據大小需求通過malloc().realloc().memcpy()等內存操作動態分配,這些接口都是標準C所具備的,移植性非常好;2.Binder通信中數據對象都是封裝成為parcel格式進行傳輸的,傳輸的類型包括IBinder.Filedescriptor等,這些數據在傳輸過程中需要做特殊處理,移植的依賴較多,好在RIL部分用不到Binder通信,所以這部分代碼可以從中刪除,降低了移植難度,所以只需要實現普通數據的消息封裝.在Parcel中對普通數據的讀寫,定義了以下方法:
基本數據的消息封裝通過這些方法來寫入Parcel和從Parcel讀出.由于AT指令的參數以及AT response均為Int和String型數據,所以在RIL層中主要使用到了對這兩種數據操作的方法.所以通過C++代碼實現一個容器,并含有writeInt(int),readInt(),writeString(String),readString()四種處理數據的方法是非常簡單的.所以通過自己實現的類來模擬Android在RIL層中的消息機制是可行的.
3.4 開發框架層
綜上所述,將Android RIL移植到基于LINUX的通用平臺就完全能夠實現了.RIL只能支持一路socket連接,事物處理都是串行的,要讓其工作在多任務的系統上,互相不阻塞對方,需要更上層進行封裝,Android的移動通信相關業務流程以及策略控制都是在框架層是通過JAVA代碼實現的,在Android中叫做Telephony,Telephony為上層應用提供了并行訪問的接口,但一般LINUX平臺是沒有運行JAVA虛擬機的,所以Android的Telephony是無法進行移植的,所以需要開發一個與AndroidTelephony對等的框架層.
框架層主要起連接RIL層和應用的作用,框架內部分為了客戶端和服務端,客戶端封裝成共享庫提供函數接口供應用程序使用,函數內部通過socket與服務端通信,服務端可以支持多個客戶端同時連接,并將客戶端的請求串行化發送到RILD,能夠將RILD返回的結果異步地將返回給對應的請求客戶端.為避免阻塞,服務端由三個線程來實現,如圖3所示.線程一(accept_thread):接收上層應用下發的消息.將應用接入的clients排序,并將發送的消息存入鏈表data_queue中;線程二(sender_thread):將應用消息寫入與RIL層的接口.依次從鏈表data_queue中取出消息,并依次寫入到RIL層的接口;線程三(receiver_thread):將RIL的response寫回應用.從RIL層的接口中讀出消息,并判斷出所屬的應用描述符,并寫入.
4.搭建驗證平臺
OpenWrt系統是一個運行在嵌入式設備上的LINUX系統,主要實現路由器功能,所以PSDATA是其最基本的業務.將OpenWrt系統移植到ARM開發板上,并加載基帶模塊.通過移植的RIL層代碼,使開發板成功連入3G網絡.驅動枚舉出/dev/設備作為AT_COM與RIL層通信,并創建網卡設備作為網絡通信設備,如圖4所示.編寫應用創建SOCKET,并連入框架層的服務端,并在應用中將PS DATA請求寫入Parcel.
在系統中成功ping通網絡,驗證了移植后的RIL層在LINUX平臺上運行良好.
5.總結
在基于LINU X的通用平臺上,通過移植工作,成功實現RIL層功能和框架層應用.在Android RIL中定義了電話.短信.PS DATA等100多種與基帶通信業務.在平臺上便可根據功能需求向RIL層發起所需請求,便能簡單.方便.高效的完成這些定義好的業務.移植后的RIL層將所有的LINUX平臺與基帶建立連接,實現了通用性.
-
Android
+關注
關注
12文章
3946瀏覽量
128032 -
Linux
+關注
關注
87文章
11352瀏覽量
210550 -
無線
+關注
關注
31文章
5471瀏覽量
173926
發布評論請先 登錄
相關推薦
想要學習在DSP的平臺上進行圖像處理,求推薦入門教材。
Android RIL架構簡介
【學習打卡】OpenHarmony的系統服務層說明
酷派手機擁抱鴻蒙,成功在展訊T606平臺上接入OpenHarmony
基于Android平臺的雙網雙待的設計方法
![基于Android<b class='flag-5'>平臺</b>的雙網雙待的設計方法](https://file1.elecfans.com//web2/M00/A6/3A/wKgZomUMPF-ACzmKAAAM-BQ_4ys505.jpg)
評論