資源描述:
《Android-RIL結(jié)構(gòu)分析與移植》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、Android?RIL結(jié)構(gòu)分析與移植介紹本文檔對(duì)AndroidRIL部分的內(nèi)容進(jìn)行了介紹,其重點(diǎn)放在了AndroidRIL的原生代碼部分。包括四個(gè)主題:1.AndroidRIL框架介紹2.AndroidRIL與WindowsMobileRIL3.AndroidRILporting4.AndroidRIL的java框架在本文檔中將Android代碼中的重要模塊列出進(jìn)行分析,并給出了相關(guān)的程序執(zhí)行流程介紹,以加深對(duì)模塊間交互方式的理解。對(duì)于java代碼部分,這里僅進(jìn)行簡單的介紹。如果需要深入了解,可以查看相關(guān)參考資料。本文檔中還對(duì)AndroidRIL的Porting部分內(nèi)容進(jìn)行了描述和
2、分析。針對(duì)對(duì)unix操作系統(tǒng)環(huán)境并不熟悉的讀者,本文檔中所涉及到的相關(guān)知識(shí)包括:?Unixfilesystem?Unixsocket?Unixthread?Unix下I/O多路轉(zhuǎn)接以上信息可以在任意一份描述Unix系統(tǒng)調(diào)用的文檔中找到。1.AndroidRIL框架介紹術(shù)語:fd??????????????????????unix文件描述符pipe?????????????????????unix管道cond?????????????????????一般是conditionvariable的縮寫tty??????????????????????通常使用tty來簡稱各種類型的終端設(shè)備u
3、nsolicitedresponse????????被動(dòng)請(qǐng)求命令來自basebandeventloop????????????????android的消息隊(duì)列機(jī)制,由unix的系統(tǒng)調(diào)用select()實(shí)現(xiàn)init.rc????????????????????init守護(hù)進(jìn)程啟動(dòng)后被執(zhí)行的啟動(dòng)腳本。HAL????????????????????硬件抽象層(HardwareAbstractionLayer,HAL)1.1.AndroidRIL概況:AndroidRIL提供了無線硬件設(shè)備與電話服務(wù)之間的抽象層。下圖展示了RIL在Android體系中的位置。android的ril位于應(yīng)用程
4、序框架與內(nèi)核之間,分成了兩個(gè)部分,一個(gè)部分是rild,它負(fù)責(zé)socket與應(yīng)用程序框架進(jìn)行通信。另外一個(gè)部分是VendorRIL,這個(gè)部分負(fù)責(zé)向下是通過兩種方式與radio進(jìn)行通信,它們是直接與radio通信的AT指令通道和用于傳輸包數(shù)據(jù)的通道,數(shù)據(jù)通道用于手機(jī)的上網(wǎng)功能。?對(duì)于RIL的java框架部分,也被分成了兩個(gè)部分,一個(gè)是RIL模塊,這個(gè)模塊主要用于與下層的rild進(jìn)行通信,另外一個(gè)是Phone模塊,這個(gè)模塊直接暴露電話功能接口給應(yīng)用開發(fā)用戶,供他們調(diào)用以進(jìn)行電話功能的實(shí)現(xiàn)。1.2.AndroidRIL目錄結(jié)構(gòu):Android的RIL模塊位于Android/hardware
5、/ril文件夾,有三個(gè)子模塊:rild,libril,reference-ril●include文件夾:包含RIL頭文件,最主要的是ril.h●rild文件夾:RIL守護(hù)進(jìn)程,開機(jī)時(shí)被init守護(hù)進(jìn)程調(diào)用啟動(dòng),里面僅有main函數(shù)作為入口點(diǎn),負(fù)責(zé)完成RIL初始化工作。在rild.c文件中,將完成ril的加載過程,它會(huì)執(zhí)行如下操作:?動(dòng)態(tài)加載VendorRIL的.so文件?執(zhí)行RIL_startEventLoop()開啟消息隊(duì)列以進(jìn)行事件監(jiān)聽?通過執(zhí)行VendorRIL的rilInit()方法來進(jìn)行VendorRIL與libril的關(guān)系建立。在rild文件夾中還包括一個(gè)radioop
6、tions.c文件,它的作用是通過串口將一些radio相關(guān)的參數(shù)直接傳給rild來對(duì)radio進(jìn)行配置。●libril文件夾:在編譯時(shí)libril被鏈入rild,它為rild提供了event處理功能,還提供了在rild與VendorRIL之間傳遞請(qǐng)求和響應(yīng)消息的能力。Libril提供的主要功能分布在兩個(gè)主要方法內(nèi),一個(gè)是RIL_startEventLoop()方法,另一個(gè)是RIL_register()方法RIL_startEventLoop()方法所提供的功能就是啟用eventLoop線程,開始執(zhí)行RIL消息隊(duì)列。RIL_register()方法的主要功能是啟動(dòng)名為rild的監(jiān)聽端
7、口,等待java端通過socket進(jìn)行連接。●reference-ril文件夾:Android自帶的VendorRIL的參考實(shí)現(xiàn)。被編譯成.so文件,由于本部分是廠商定制的重點(diǎn)所在。所以被設(shè)計(jì)為松散耦合,且可靈活配置的。在rild中通過opendl()的方式加載。librefrence.so負(fù)責(zé)直接與radio通信,這包括將來自libril的指令轉(zhuǎn)換為AT指令,并且將AT指令寫入radio中。reference-ril會(huì)接收調(diào)用者傳來的參數(shù),參數(shù)內(nèi)容為與radio的通