下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Android的RIL驅(qū)動(dòng)模塊啟動(dòng)流程Android 的 RIL 驅(qū)動(dòng)模 塊,在 hardware/ril 目錄下,一共分 rild, libril.so 以及l(fā)ibrefrence_ril.so三個(gè)部分,另有一 radiooptions可供自動(dòng)或手動(dòng)調(diào)試使用。 都依賴于include目錄中ril.h頭文件。目前cupcake分支上帶的是gsm的支持, 另有一 cdma分支,這里分析的是gsm驅(qū)動(dòng)。GSM模塊,由于Modem的歷史原因,AP一直是通過基于串口的AT命令 與BB交互。包括到了目前的一些edge或3g模塊,或像omap這類ap,bp集成 的芯片,已經(jīng)使用了 USB或其他等高速總線通
2、信,但大多仍然使用模擬串口機(jī) 制來使用AT命令。這里的RIL(Radio Interface Layer)層,主要也就是基于AT 命令的操作,如發(fā)命令,response解析等。(gprs等傳輸會(huì)用到的MUX協(xié)議等 在這里并沒有包含,也暫不作介紹。)以下是詳細(xì)分析,本文主要涉及基本架構(gòu)和初始化的內(nèi)容:首先介紹一下rild與libril.so以及l(fā)ibrefrence_ril.so的關(guān)系:rild:僅實(shí)現(xiàn)一 main函數(shù)作為整個(gè)ril層的入口點(diǎn),負(fù)責(zé)完成初始化。libril.so:與rild結(jié)合相當(dāng)緊密,是其共享庫,編譯時(shí)就已經(jīng)建立了這一關(guān)系。組成 部分為ril.cpp, ril_eventcpp
3、。libril.so駐留在rild這一 守護(hù)進(jìn)程中,主要完成 同上層通信的工作,接受 ril請求并傳遞給librefrence_ril.so,同時(shí)把來自 librefrence_ril.so的反饋回傳給調(diào)用進(jìn)程。librefrence_ril.so:rild通過手動(dòng)的dlopen方式加載,結(jié)合稍微松散,這也是因?yàn)閘ibrefrence.so 主要負(fù)責(zé)跟Modem硬件通信的緣故。這樣做更方便替換或修改以 適配更多的 Modem種類。它轉(zhuǎn)換來自libril.so的請求為AT命令,同時(shí)監(jiān)控Modem的反饋 信息,并傳遞回libril.so.在初始化時(shí),rild通過符號RIL_Init獲取一組函數(shù) 指
4、針并以此與之建立聯(lián)系。radiooptions:radiooptiongs通過獲取啟動(dòng)參數(shù),利用socket與rild通信,可供調(diào)試時(shí)配 置Modem參數(shù).接下來分析初始化流程,主入口是rild.c中的main函數(shù),主要完成三個(gè)任 務(wù):開啟libril.so中的event機(jī)制,在RIL_startEventLoop中,是最核心的由多 路I/O驅(qū)動(dòng)的消息循環(huán)。初始化librefrence_ril.so,也就是跟硬件或模擬硬件modem通信的部分(后面統(tǒng)一稱硬件),通過RIL_Init函數(shù)完成。通過 RIL_Init 獲取一組函數(shù)指針 RIL_RadioFunctions,并通過 RIL_regi
5、ster 完成注冊,并打開接受上層命令的socket通道。首先看第一個(gè)任務(wù),也就是 RIL_startEventLoop 函數(shù)。RIL_startEventLoop 在ril.cpp中實(shí)現(xiàn),它的主要目的是通過pthread_create(&s_tid_dispatch, &at切 eventLoop, NULL)建立一個(gè) dispatch線程,入口點(diǎn)在 eventLoop.而 eventLoop 中,會(huì)調(diào)ril_event.cpp中的ril_event_loop()函數(shù),建立起消息(event)隊(duì)列機(jī) 制。我們來仔細(xì)看看這一消息隊(duì)列的機(jī)制,這些代碼都在ril_event.cpp中。 void
6、ril_event_init();void ril_event_set(struct ril_event * ev, int fd, bool persist, ril_event_cb fUnc, void * param);void ril_event_add(struct ril_event * ev);void ril_timer_add(struct ril_event * ev, struct timeval * tv);void ril_event_del(struct ril_event * ev);void ril_event_loop();struct ril_event
7、struct ril_event *next;struct ril_event *prev;int fd;int index;bool persist;struct timeval timeout;ril_event_cb func;void *param;每個(gè)ril_event結(jié)構(gòu),與一個(gè)fd句柄綁定(可以是文件,socket,管道等), 并且?guī)б粋€(gè)func指針去執(zhí)行指定的操作。具體流程是:ril_event_init完成后,通過ril_event_set來配置一新ril_event, 并通過ril_event_add加入隊(duì)列之中(實(shí) 際通常用rilEventAddWakeup來添加), a
8、dd會(huì)把隊(duì)列里所有ril_event的fd,放入一個(gè)fd集合readFds中。這樣 ril_event_loop能通過一個(gè)多路復(fù)用I/O的機(jī)制( select)來等待這些fd,如果 任何一個(gè)fd有數(shù)據(jù)寫入,則進(jìn)入分析流程processTimeouts(), processReadReadies(&rfds, n),firePending()o 后丈會(huì)詳細(xì)分析這些流程。另外我們可以看到,在進(jìn)入ril_event_loop之前,已經(jīng)掛入了一 s_wakeupfd_event,通過pipe的機(jī)制實(shí)現(xiàn)的,這個(gè)event的目的是可以在一些 情況下,能內(nèi)部喚醒ril_event_loop的多路復(fù)用阻塞,比
9、如一些帶timeout的命 令timeout到期的時(shí)候。至此第一個(gè)任務(wù)分析完畢,這樣便建立起了基于event隊(duì)列的消息循環(huán),稍 后便可以接受上層發(fā)來的的請求了(上層請求的event對象建立,在第三個(gè)任務(wù) 中)。接下來看第二個(gè)任務(wù),這個(gè)任務(wù)的入口是RIL_Init, RIL_Init首先通過參數(shù) 獲取硬件接口的設(shè)備文件或模擬硬件接口的socket.接下來便新開一個(gè)線程繼 續(xù)初始化,即mainLoopomainLoop的主要任務(wù)是建立起與硬件的通信,然后通過read方法阻塞等 待硬件的主動(dòng)上報(bào)或響應(yīng)。在注冊一些基礎(chǔ)回調(diào)(timeout, readerclose)后, mainLoop首先打開硬件設(shè)
10、備文件,建立起與硬件的通信,s_device_path和s_port 是前面獲取的設(shè)備路 徑參數(shù),將其打開(兩者可以同時(shí)打開并擁有各自的 飽籍妙,這里也很容易添加雙卡雙待等支持)o接下來通過at_open函數(shù)建立 起這一設(shè)備文件上的reader等待循環(huán),這也 是通過新建一個(gè)線程完成,ret = pthread_create(&s_tid_readei, &attr, readerLoop, &attr),入口點(diǎn) readerLoop。AT命令都是以rn或nr的換行符來作為分隔符的,所以readerLoop是 line驅(qū)動(dòng)的,除非出錯(cuò),超時(shí)等,否則會(huì)讀到一行完整的響應(yīng)或主動(dòng)上報(bào),才會(huì) 返回。這個(gè)
11、循環(huán)跑起來以后,我們基本的AT響應(yīng)機(jī)制 已經(jīng)建立了起來。它的 具體分析,包括at_open中掛接的ATUnsolHandler我們都放到后面分析 response的連載文章里去。有了響應(yīng)的機(jī)制(當(dāng)然,能與硬件通信也已經(jīng)可以發(fā)請求了),通過 RIL_requestTimedCallback (initializeCallback, NULL, &TIMEVAL_0),跑到 initializeCallback中,執(zhí)行一些Modem的初始化命令,主要都是AT命令的方 式。發(fā)AT命令的流程,我們放到后面分析request的連載文章里。這里可以看 到,主要是一些參數(shù)配置,以及網(wǎng)絡(luò)狀態(tài)的檢查等。至此第二
12、個(gè)任務(wù)分析完畢, 硬件已經(jīng)可以訪問了。最后是第三個(gè)任務(wù)。第三個(gè)任務(wù)是由RIL_Init的返回值開始的,這是一個(gè) RIL_RadioFunctions 結(jié)構(gòu)的指針。typedef struct int version; /* set to RIL_VERSION */ RIL_RequestFunc onRequest;RIL_RadioStateRequest onStateRequest;RIL_Supports supports;RIL_Cancel onCancel;RIL_GetVersion getVersion; RIL_RadioFunctions;其中最重要的是onRequest域,上層來的請求都由這個(gè)函數(shù)進(jìn)行映射后轉(zhuǎn)換 成對應(yīng)的AT命令發(fā)給硬件。rild通過RIL_register注冊這一指針。RIL_register中要完成的另夕一個(gè)任務(wù),就是打開前面提到的跟上層通信的 socket 接口( s_fdListen 是主接口,s_fdDebug 供調(diào)試時(shí)使用)。然后將這兩個(gè)socket接口使用任 一中實(shí)現(xiàn)的機(jī)制進(jìn)行注冊(僅列出 s_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林藝術(shù)學(xué)院《勞動(dòng)教育II》2021-2022學(xué)年第一學(xué)期期末試卷
- 房產(chǎn)經(jīng)紀(jì)人返傭協(xié)議書范本模板
- 主播外出安全協(xié)議書范文范本
- 2024年大商鋪出租轉(zhuǎn)讓協(xié)議書模板范本
- 【初中數(shù)學(xué)】整式的加法與減法課件 2024-2025學(xué)年人教版數(shù)學(xué)七年級上冊
- 2024年處理廢石協(xié)議書模板范本
- 資金代管協(xié)議書范文樣本
- 2025(新人教版)地理八年級下冊全冊復(fù)習(xí)知識清單 課件
- 吉林師范大學(xué)《數(shù)字剪輯創(chuàng)作》2021-2022學(xué)年第一學(xué)期期末試卷
- 吉林師范大學(xué)《量子力學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- 2024-2030年中國虛擬專用網(wǎng)絡(luò)(VPN)行業(yè)市場行業(yè)發(fā)展分析及發(fā)展前景研究報(bào)告
- 檢驗(yàn)檢測機(jī)構(gòu)內(nèi)審員檢查表
- 2024中煤電力限公司面向中煤集團(tuán)內(nèi)部招聘15人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
- 統(tǒng)編版(2024新版)七年級上冊歷史第二單元 夏商周時(shí)期:奴隸制王朝的更替和向封建社會(huì)的過渡 單元復(fù)習(xí)課件
- 第07講 物態(tài)變化(原卷版)-2024全國初中物理競賽試題編選
- 高危兒規(guī)范化健康管理專家共識解讀
- 第13課《紀(jì)念白求恩》課件2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 食品安全的規(guī)章制度和食品操作流程
- 《義務(wù)教育體育與健康課程標(biāo)準(zhǔn)(2022年版)》解讀
- 部編版三年級上冊語文第七單元大單元教學(xué)設(shè)計(jì)
- NB-T 10435-2020 電動(dòng)汽車快速更換電池箱鎖止機(jī)構(gòu)通.用技術(shù)要求
評論
0/150
提交評論