精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android GSM驅動模塊詳細分析

移動開發 Android
本文將給大家介紹Android中的RIL驅動模塊的詳細設計過程。本文將介紹GSM的支持,以及其中的工作原理。

Android的RIL驅動模塊, 在hardware/ril目錄下,一共分rild,libril.so以及librefrence_ril.so三個部分,另有一radiooptions可供自動或手動調試使用。都依賴于include目錄中ril.h頭文件。目前cupcake分支上帶的是gsm的支持,另有一cdma分支,這里分析的是gsm驅動。

GSM模塊,由于Modem的歷史原因,AP一直是通過基于串口的AT命令與BB交互。包括到了目前的一些edge或3g模塊,或像omap這類ap,bp集成的芯片,已經使用了USB或其他等高速總線通信,但大多仍然使用模擬串口機制來使用AT命令。這里的RIL(Radio Interface Layer)層,主要也就是基于AT命令的操作,如發命令,response解析等。(gprs等傳輸會用到的MUX協議等在這里并沒有包含,也暫不作介紹。)

以下是詳細分析,本文主要涉及基本架構和初始化的內容:

首先介紹一下rild與libril.so以及librefrence_ril.so的關系:

1. rild:

僅實現一main函數作為整個ril層的入口點,負責完成初始化。

2. libril.so:

與rild結合相當緊密,是其共享庫,編譯時就已經建立了這一關系。組成部分為ril.cpp,ril_event.cpp。libril.so駐留在rild這一守護進程中,主要完成同上層通信的工作,接受ril請求并傳遞給librefrence_ril.so, 同時把來自librefrence_ril.so的反饋回傳給調用進程。

3. librefrence_ril.so:

rild通過手動的dlopen方式加載,結合稍微松散,這也是因為librefrence.so主要負責跟Modem硬件通信的緣故。這樣做更方便替換或修改以適配更多的Modem種類。它轉換來自libril.so的請求為AT命令,同時監控Modem的反饋信息,并傳遞回libril.so。在初始化時, rild通過符號RIL_Init獲取一組函數指針并以此與之建立聯系。

4. radiooptions:

radiooptiongs通過獲取啟動參數, 利用socket與rild通信,可供調試時配置Modem參數。

接下來分析初始化流程,主入口是rild.c中的main函數,主要完成三個任務:

1. 開啟libril.so中的event機制, 在RIL_startEventLoop中,是最核心的由多路I/O驅動的消息循環。

2. 初始化librefrence_ril.so,也就是跟硬件或模擬硬件modem通信的部分(后面統一稱硬件), 通過RIL_Init函數完成。

3. 通過RIL_Init獲取一組函數指針RIL_RadioFunctions, 并通過RIL_register完成注冊,并打開接受上層命令的socket通道。

首先看***個任務,也就是RIL_startEventLoop函數。RIL_startEventLoop在ril.cpp中實現, 它的主要目的是通過pthread_create(&s_tid_dispatch, &attr, eventLoop, NULL)建立一個dispatch線程,入口點在eventLoop. 而eventLoop中,會調ril_event.cpp中的ril_event_loop()函數,建立起消息(event)隊列機制。

我們來仔細看看這一消息隊列的機制,這些代碼都在ril_event.cpp中。

void 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 {
   struct ril_event *next;
   struct ril_event *prev;

   int fd;
   int index;
   bool persist;
   struct timeval timeout;
   ril_event_cb func;
   void *param;
};

每個ril_event結構,與一個fd句柄綁定(可以是文件,socket,管道等),并且帶一個func指針去執行指定的操作。

具體流程是: ril_event_init完成后,通過ril_event_set來配置一新ril_event,并通過ril_event_add加入隊列之中(實際通常用rilEventAddWakeup來添加),add會把隊列里所有ril_event的fd,放入一個fd集合readFds中。這樣ril_event_loop能通過一個多路復用I/O的機制(select)來等待這些fd, 如果任何一個fd有數據寫入,則進入分析流程processTimeouts(),processReadReadies(&rfds, n),firePending()。 后文會詳細分析這些流程。

另外我們可以看到, 在進入ril_event_loop之前, 已經掛入了一s_wakeupfd_event, 通過pipe的機制實現的, 這個event的目的是可以在一些情況下,能內部喚醒ril_event_loop的多路復用阻塞,比如一些帶timeout的命令timeout到期的時候。

至此***個任務分析完畢,這樣便建立起了基于event隊列的消息循環,稍后便可以接受上層發來的的請求了(上層請求的event對象建立,在第三個任務中)。

接下來看第二個任務,這個任務的入口是RIL_Init, RIL_Init首先通過參數獲取硬件接口的設備文件或模擬硬件接口的socket. 接下來便新開一個線程繼續初始化, 即mainLoop。

mainLoop的主要任務是建立起與硬件的通信,然后通過read方法阻塞等待硬件的主動上報或響應。在注冊一些基礎回調(timeout,readerclose)后,mainLoop首先打開硬件設備文件,建立起與硬件的通信,s_device_path和s_port是前面獲取的設備路徑參數,將其打開(兩者可以同時打開并擁有各自的reader,這里也很容易添加雙卡雙待等支持)。

接下來通過at_open函數建立起這一設備文件上的reader等待循環,這也是通過新建一個線程完成, ret = pthread_create(&s_tid_reader, &attr, readerLoop, &attr),入口點readerLoop。

AT命令都是以\r\n或\n\r的換行符來作為分隔符的,所以readerLoop是line驅動的,除非出錯,超時等,否則會讀到一行完整的響應或主動上報,才會返回。這個循環跑起來以后,我們基本的AT響應機制已經建立了起來。它的具體分析,包括at_open中掛接的ATUnsolHandler, 我們都放到后面分析response的連載文章里去。

有了響應的機制(當然,能與硬件通信也已經可以發請求了),通過RIL_requestTimedCallback(initializeCallback, NULL, &TIMEVAL_0),跑到initializeCallback中,執行一些Modem的初始化命令,主要都是AT命令的方式。發AT命令的流程,我們放到后面分析request的連載文章里。這里可以看到,主要是一些參數配置,以及網絡狀態的檢查等。至此第二個任務分析完畢,硬件已經可以訪問了。

***是第三個任務。第三個任務是由RIL_Init的返回值開始的,這是一個RIL_RadioFunctions結構的指針。

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域,上層來的請求都由這個函數進行映射后轉換成對應的AT命令發給硬件。rild通過RIL_register注冊這一指針。

RIL_register中要完成的另外一個任務,就是打開前面提到的跟上層通信的socket接口(s_fdListen是主接口,s_fdDebug供調試時使用)。

然后將這兩個socket接口使用任務一中實現的機制進行注冊(僅列出s_fdListen)

ril_event_set (&s_listen_event, s_fdListen, false,
               listenCallback, NULL);
rilEventAddWakeup (&s_listen_event);

這樣將兩個socket加到任務一中建立起來多路復用I/O的檢查句柄集合中,一旦有上層來的(調試)請求,event機制便能響應處理了。到這里啟動流程已經分析完畢。

【編輯推薦】

  1. Android應用開發入門五問
  2. Android創建和使用數據庫詳細指南
  3. 開發者眼中的Android手機平臺
責任編輯:彭凡 來源: IT168
相關推薦

2009-03-24 08:30:54

AndroidGoogle移動os

2009-09-28 10:39:01

Hibernate基礎

2009-09-25 14:23:39

2013-12-04 10:21:38

AndroidAndroidMani

2010-02-06 15:19:35

2009-06-18 14:00:51

2009-09-09 09:48:43

Linq延遲加載

2009-10-10 13:52:57

VB Update方法

2009-09-14 16:21:34

LINQ To XML

2009-09-14 13:50:35

LINQ編程模型

2009-09-08 15:56:50

Linq使用Group

2009-11-20 13:11:44

Oracle XML數

2010-01-06 13:50:37

.NET Framew

2010-04-26 18:17:19

Oracle存儲過程

2009-12-07 15:37:00

WCF控件

2009-09-07 13:19:44

C#線程同步

2009-12-16 14:09:14

Visual Stud

2009-09-04 15:43:07

C#流模型

2009-09-03 17:57:06

C#聲明事件

2011-09-24 12:34:03

點贊
收藏

51CTO技術棧公眾號

国产亚洲欧美日韩在线一区| 国模 一区 二区 三区| 在线日韩国产精品| 亚洲成人a**址| 97免费观看视频| 韩国在线视频一区| 亚洲人精选亚洲人成在线| 国产91色在线观看| 波多野结衣中文字幕久久| 99久久精品99国产精品| 国产欧美精品va在线观看| 美女视频黄免费| 最新国产一区| 91精品国产免费| 亚洲中文字幕无码不卡电影| 日韩子在线观看| 韩国三级在线观看久| 欧亚一区二区| 亚洲国产婷婷综合在线精品| 品久久久久久久久久96高清| 99久久精品免费看国产交换| 亚洲在线一区| 欧美精品在线视频观看| 老熟妇一区二区| 91精品国产自产精品男人的天堂 | 日本爱爱小视频| 粉嫩av一区二区| 制服丝袜日韩国产| av五月天在线| 天堂√8在线中文| 亚洲午夜电影在线| 欧美日韩国产一级二级| 国产精品国产福利国产秒拍 | 成人黄色免费网站在线观看| 波多野结衣 久久| 最新日韩av| 欧美另类xxx| 免费三级在线观看| 成人3d动漫在线观看| 亚洲精品影视在线观看| 国产人妻黑人一区二区三区| 日韩精品成人| 日韩一区和二区| 亚洲午夜精品一区| 男女啪啪999亚洲精品| 欧美亚洲高清一区二区三区不卡| 波多野结衣家庭教师在线播放| 蜜臀av国内免费精品久久久夜夜| 亚洲品质自拍视频网站| 亚洲精品日韩精品| jizz在线观看中文| 2024国产精品| 蜜桃av噜噜一区二区三区| 99这里有精品视频| 久久国产免费看| 国产成人极品视频| 国产在线拍揄自揄拍无码视频| 日韩有码中文字幕在线| 亚洲第一精品福利| 无码人妻丰满熟妇区毛片蜜桃精品 | 国产精品资源在线| 91精品久久久久久久久久入口| 日本一二三区视频| 亚洲一区网站| 午夜精品亚洲| 欧美色大人视频| 97视频在线免费播放| www555久久| 亚洲欧美一区二区三区国产精品 | 少妇精品久久久一区二区三区| 欧美成人福利视频| 男插女视频网站| 亚洲最大的免费视频网站| 亚洲国产精品视频| 69堂免费视频| 咪咪网在线视频| 精品露脸国产偷人在视频| 草b视频在线观看| 午夜激情在线| 一区二区三区成人在线视频| 亚洲av首页在线| 大片免费在线看视频| 国产精品狼人久久影院观看方式| 亚洲精品自在在线观看| h视频网站在线观看| 亚洲国产精品99久久久久久久久 | 国偷自产av一区二区三区麻豆| 精品三级国产| 精品久久久久久最新网址| 国产av一区二区三区传媒| 一区二区日韩| 亚洲高清久久网| 欧产日产国产精品98| 久久亚州av| 亚洲裸体xxxx| 懂色av粉嫩av浪潮av| 久久精品一区二区不卡| 久久综合免费视频| 激情小说中文字幕| 国产精品丝袜xxxxxxx| 欧美中文字幕在线观看| 中文字幕久久久久| 精品一区中文字幕| 国产日韩一区欧美| 天天人人精品| 99在线无码精品入口| 国产一区二区三区免费看| 99久热re在线精品视频| 四虎影视精品成人| 国产精品欧美久久久久一区二区| 五月婷婷综合色| 暖暖在线中文免费日本| 日本韩国一区二区三区| 天天操狠狠操夜夜操| 7m精品国产导航在线| 国产丝袜精品视频| 自拍偷拍第9页| 狠狠综合久久| 国产精品久久久| www.我爱av| 久久精品男人的天堂| 国产又粗又大又爽的视频| 2001个疯子在线观看| 欧美网站一区二区| 亚洲欧美日韩偷拍| 偷偷www综合久久久久久久| 97人人爽人人喊人人模波多| 最近中文字幕在线免费观看| 成人综合婷婷国产精品久久蜜臀| 日韩成人av电影在线| 在线免费观看的av| 欧美三级韩国三级日本一级| 性囗交免费视频观看| 欧美残忍xxxx极端| 青青青国产精品一区二区| 秋霞欧美在线观看| 亚洲欧美视频一区| 国产又大又黄又粗的视频| 国产成人aa在线观看网站站| 最新亚洲国产精品| 日韩黄色在线播放| 国产激情视频一区二区在线观看| 日韩精品极品视频在线观看免费| a级大胆欧美人体大胆666| 欧美日韩你懂的| 波多野结衣av在线免费观看| 欧美精品国产一区| 欧洲亚洲在线视频| 色视频在线观看免费| 好男人在线视频www| 国产精品一二三四| 亚洲精品人成| 精品欧美日韩精品| 亚洲欧美激情在线视频| 久久9999久久免费精品国产| 激情深爱一区二区| 亚洲二区三区四区| 欧美三区四区| 亚洲色图25p| 在线能看的av| 2欧美一区二区三区在线观看视频| 欧美一级黄色录像片| 欧美三级一区| 免费99精品国产自在在线| 一级黄色片视频| 国产精品久久午夜夜伦鲁鲁| 欧美婷婷精品激情| 欧美在线免费看视频| 国产精品∨欧美精品v日韩精品| 亚洲欧美色视频| 五月激情综合色| 男女性杂交内射妇女bbwxz| 好吊一区二区三区| 国产精品免费一区二区| 国产啊啊啊视频在线观看| 日韩欧美中文字幕制服| 91精品国产高清一区二区三蜜臀| 国产麻豆精品95视频| 精品91一区二区三区| 国产精品久久久久久久久久辛辛| 久久久999精品| 99精品在线视频观看| 亚洲久草在线视频| 在线播放av网址| 欧美精品啪啪| 国产精品高清一区二区三区| 51漫画成人app入口| 亚洲精品日韩丝袜精品| 区一区二在线观看| 国产精品欧美一区喷水| 欧美日韩精品区别| 欧美午夜在线视频| 玖玖玖精品中文字幕| 国产一区二区三区朝在线观看| 亚洲香蕉av在线一区二区三区| 欧美h在线观看| √…a在线天堂一区| 亚洲成a人无码| 亚洲一区日本| 一本一道久久久a久久久精品91 | 欧美三级美国一级| 成人精品久久久| 亚洲丝袜一区| 中文国产亚洲喷潮| 国内精品久久久久久久久久| 亚洲国产色一区| 永久免费看mv网站入口78| 麻豆91精品91久久久的内涵| 欧美美女黄色网| 色婷婷精品视频| 成人中文字幕在线观看| 欧美日韩在线视频免费观看| 日韩精品www| 午夜精品久久久久久久第一页按摩| 亚洲国产精品久久久久秋霞影院| 国产又粗又猛又爽又黄av| 国产精品一区二区91| 国产a级一级片| **女人18毛片一区二区| 精品婷婷色一区二区三区蜜桃| 欧洲av不卡| 欧美成人免费在线观看| 国产一级片在线| 日韩精品一区二区三区老鸭窝| 欧美成人一区二区三区四区| 亚洲精品国久久99热| 久久只有这里有精品| 国产传媒一区在线| 亚州精品一二三区| 99精品热视频只有精品10| 日韩精品一线二线三线| 超碰精品在线| 成人激情在线播放| 欧洲一区二区三区精品| 性欧美长视频免费观看不卡| 免费大片黄在线观看视频网站| 国产视频自拍一区| 色综合久久久久久| 日韩一区二区精品在线观看| 中文字幕视频网站| 欧美小视频在线| 久久久久久久伊人| 亚洲女人小视频在线观看| 久久久久久国产免费a片| proumb性欧美在线观看| 久久久九九九热| 蜜臀精品一区二区三区在线观看| 波多野结衣综合网| 影音先锋成人在线电影| 国产成人三级视频| 999成人精品视频线3| 日韩在线导航| 国产91久久精品一区二区| 久久久久一区二区三区| 一区二区三区在线免费看| 亚洲在线免费视频| 成人午夜sm精品久久久久久久| 国产精品美女久久久久av超清| 欧美人体一区二区三区| 欧美亚洲视频一区二区| а√天堂8资源中文在线| 欧美激情一区二区三区久久久 | ,亚洲人成毛片在线播放| 欧美亚男人的天堂| av毛片在线免费观看| 欧美日韩久久久一区| 中文在线字幕av| 欧美午夜一区二区三区免费大片| 波多野结衣一本一道| 色综合久久综合| 精品久久久久久久久久久久久久久久久久 | 精品视频一二三| 亚洲男人天堂网| 国产在线你懂得| 在线播放精品一区二区三区 | 在线观看日本一区| 久久综合成人| 亚洲欧洲精品一区二区三区波多野1战4| 首页国产精品| 天天综合五月天| 亚洲无线一线二线三线区别av| 老子影院午夜伦不卡大全| 日韩午夜精品| 成人黄色一区二区| 开心九九激情九九欧美日韩精美视频电影 | 成人在线视频网| 国产日本亚洲| 91久色国产| 国产亚洲第一伦理第一区| 亚洲 国产 日韩 综合一区| 欧美oldwomenvideos| 青青草视频国产| 香蕉成人久久| 鲁一鲁一鲁一鲁一av| 韩国精品久久久| 四虎1515hh.com| 国产色一区二区| 欧美老熟妇一区二区三区| 午夜电影一区二区| 波多野结衣激情视频| 91麻豆精品国产91久久久久久久久| 亚洲av综合色区无码一二三区 | 亚洲欧洲中文字幕| 免费特级黄色片| 日精品一区二区三区| 在线观看日本www| 91久色porny| 成人免费毛片xxx| 欧美在线免费观看亚洲| 性做久久久久久久| 亚洲欧美激情在线视频| 国产三区在线观看| 青青草成人在线| 国产麻豆精品| 日本10禁啪啪无遮挡免费一区二区 | 国产欧洲精品视频| 亚洲精品一区二区三区中文字幕| 欧美性大战久久久久| 91高清一区| 国产午夜福利视频在线观看| 国内精品写真在线观看| 亚洲午夜久久久久久久久红桃| 最新国产精品久久精品| 日本天堂网在线| 日韩免费电影一区| 欧美人xxx| 国产黑人绿帽在线第一区| xxxx日韩| 日本一级淫片演员| 久久香蕉精品| 91丝袜在线观看| 亚洲精品免费在线播放| 国产成人无码一区二区三区在线| 欧美日韩一区高清| 久草视频视频在线播放| 国内精品视频久久| av日韩在线免费观看| 日韩高清dvd| 国产精品综合| www.美色吧.com| 国产欧美一区二区精品秋霞影院 | 日韩av中文| 日韩av电影国产| 色爱av综合网| 我的公把我弄高潮了视频| 国产综合久久久久久鬼色| 精品人妻互换一区二区三区| 午夜成人免费电影| 国产91免费在线观看| 欧美精品情趣视频| www.久久草.com| 中日韩在线视频| 久久99九九99精品| 波多野结衣一二三四区| 一本色道亚洲精品aⅴ| 青青国产在线| 欧洲美女免费图片一区| 中国av一区| 精品中文字幕av| 久久久久九九视频| 国产嫩bbwbbw高潮| 亚洲美女视频网站| 性xxxfreexxxx性欧美| 国产伦精品一区二区三区视频黑人| 国产精品99一区二区| 国产成人精品综合久久久久99| 亚洲人成7777| 国产夫妻在线观看| 久久久亚洲精选| 高潮按摩久久久久久av免费| 男人的天堂狠狠干| av在线不卡网| 国产亚洲欧美在线精品| 在线观看日韩av| av成人在线看| 在线亚洲美日韩| 国产一区二区网址| 欧美成人一二三区| 亚洲缚视频在线观看| 韩国美女久久| 日韩偷拍一区二区| 久久99久久99精品免视看婷婷 | 精品国产第一国产综合精品| 久久久成人精品一区二区三区| 国产精品一区二区你懂的| 九九视频在线观看| 亚洲第一中文字幕在线观看| 国产经典一区| 99热这里只有精品7| 成人国产精品免费观看视频| 国产又黄又猛又粗又爽| 在线一区二区日韩| 精品国模一区二区三区欧美| 成人免费观看在线| 久久久亚洲高清| 国产精品视频第一页| 欧美激情伊人电影| 久操国产精品| 日本一区二区三区在线免费观看| 精品国产福利在线|