精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲国产成人精品激情在线| 国产xxx在线观看| 麻豆tv免费在线观看| 国产中文一区二区三区| 国内免费精品永久在线视频| 国产精久久一区二区三区| 欧美一级在线| 欧美日韩免费观看中文| 宅男av一区二区三区| 欧美熟妇另类久久久久久不卡| 日韩专区中文字幕一区二区| 欧美激情区在线播放| www亚洲色图| 婷婷综合国产| 欧美午夜视频网站| 国产3p露脸普通话对白| 免费av网站在线看| 91免费观看视频| 亚洲永久免费观看| 日韩久久久久久久久久| 1000部精品久久久久久久久| 久久久国产视频| 国产精品高清无码在线观看| 精品伊人久久久| 日韩亚洲欧美中文三级| 午夜剧场在线免费观看| 日韩成人av电影| 欧美日韩国产限制| 日韩一级免费看| 国产午夜精品久久久久免费视| 久久色.com| 精品九九九九| 人妻va精品va欧美va| 国产成人在线影院| 亚洲aa中文字幕| 91在线公开视频| 日本不卡视频一二三区| 国产不卡精品视男人的天堂| 免费在线不卡视频| 1024日韩| 久久久久久国产免费| 国产这里有精品| 伊人情人综合网| 久久亚洲一区二区三区四区五区高| 欧美a在线播放| 国产欧美一区二区三区精品观看 | 91精品在线国产| 久久这里只有精品9| 美女日韩在线中文字幕| 日本久久亚洲电影| 亚洲免费在线视频观看| 亚洲一区二区毛片| 欧美在线日韩在线| 天天射天天干天天| 老牛影视一区二区三区| 国产99久久精品一区二区 夜夜躁日日躁| 日韩欧美性视频| 亚洲激精日韩激精欧美精品| 久久免费视频在线| 男女视频免费看| 久久久久免费| 国产精品成人av在线| 国产一级片一区二区| 蜜臀av性久久久久蜜臀av麻豆| 国产精品wwww| 国产精品无码AV| 国产丶欧美丶日本不卡视频| 国产精品.com| 五月婷婷开心中文字幕| 久久久久久麻豆| 亚洲欧洲中文| 精品精品导航| 黑人精品xxx一区| 欧美精品无码一区二区三区| 久久久国产精品网站| 91精品国产综合久久久久久漫画| 日本成人xxx| 老牛影视av一区二区在线观看| 日韩精品在线视频| 综合 欧美 亚洲日本| 欧美人成在线| 日本国产精品视频| 一区二区三区亚洲视频| 成人不卡免费av| 日韩欧美三级电影| 综合久久2019| 一本色道亚洲精品aⅴ| 特级西西444www| 国产欧美三级电影| 最好看的2019的中文字幕视频| 国产一区二区三区在线视频观看| 亚洲精品字幕| 91精品视频在线| 日韩成人黄色| 一区二区三区精品视频| av观看免费在线| 亚洲成人a级片| 日韩禁在线播放| 亚洲最大的黄色网址| 亚洲色诱最新| 91欧美日韩一区| 麻豆app在线观看| 亚洲欧洲制服丝袜| 国产成人久久婷婷精品流白浆| 成年永久一区二区三区免费视频| 亚洲国产精品推荐| 国产精品免费人成网站酒店| 日日噜噜夜夜狠狠视频欧美人| 999在线观看免费大全电视剧| 国产视频精品久久| 亚欧色一区w666天堂| 99精品视频国产| 国产中文字幕一区二区三区| 午夜伦理精品一区| 草逼视频免费看| 国产精品伦理在线| 成人一区二区三| 欧美亚洲色图校园春色| 欧美另类69精品久久久久9999| 特级西西444www大胆免费看| 久久久久久电影| 国产二区视频在线| 日韩欧美中文字幕一区二区三区| 夜夜嗨av色综合久久久综合网| 99视频在线看| 国产a区久久久| 妞干网这里只有精品| 2019年精品视频自拍| 日韩高清a**址| 国产无遮挡aaa片爽爽| 国产乱码精品一区二区三区五月婷 | 中文字幕+乱码+中文| 成人小视频在线观看| 久久www视频| 4438五月综合| 久久精品久久精品亚洲人| 中文字幕+乱码+中文| 国产午夜精品久久| www.日日操| 精品午夜久久| 国产精品色悠悠| 福利在线午夜| 欧美在线观看一区| 成人小视频免费看| 久久福利资源站| 中文字幕一区二区三区四区五区六区| av成人在线看| 日韩一中文字幕| 国产片高清在线观看| 亚洲免费在线观看视频| 奇米777在线| 国产精品大片| 96久久精品| caoprom在线| 日韩www在线| 日韩手机在线视频| 国产日韩欧美精品电影三级在线| 在线观看免费成人av| 国产精品99视频| 99一区二区| 免费看男女www网站入口在线| 日韩av中文字幕在线| 日韩国产成人在线| 国产精品久久久久7777按摩 | 久久69av| 国产综合在线视频| 久久久久久青草| 欧美日韩精品综合在线| 欧美成人一区二区三区高清| 99精品国产91久久久久久| 国产成人久久777777| 欧美成人精品一区二区三区在线看| 91在线看www| 国产理论在线| 在线a欧美视频| 精品国产一级片| 精品久久久久久久中文字幕| 91l九色lporny| 久久99最新地址| 91免费国产精品| 欧美日韩中文一区二区| 成人免费xxxxx在线观看| 6699嫩草久久久精品影院| 亚洲欧美综合v| 99视频在线观看免费| 精品国产成人av| 992在线观看| 99精品欧美一区| 涩涩网站在线看| 久久激情婷婷| 91免费国产精品| 青青草综合网| 精品伦理一区二区三区| 四虎精品永久免费| 欧美在线性爱视频| www视频在线看| 亚洲日本成人网| 成人免费一级视频| 欧美日韩一区二区三区高清| 日韩欧美激情视频| 亚洲欧美一区二区视频| 免费看污片网站| 国产成人日日夜夜| 亚洲国产高清av| 美女日韩在线中文字幕| 欧美亚洲黄色片| 五月激情久久久| 欧美一区二区高清在线观看| 盗摄牛牛av影视一区二区| 国产精品视频免费在线观看| 美女av在线免费看| 欧美国产日韩在线| 乱人伦中文视频在线| 国产亚洲激情在线| 日韩大胆视频| 亚洲大胆人体在线| 亚洲国产精品一| 911精品产国品一二三产区| 波多野结衣视频网址| 精品久久久视频| 国产网址在线观看| 一区二区成人在线| 免费在线观看日韩| 亚洲色图一区二区三区| 欧美精品日韩在线| 国产日韩欧美综合在线| 国产精品无码久久久久久| 成人福利视频网站| 亚洲美女高潮久久久| 国产精品一区二区三区乱码 | 成人一区在线看| 日韩av一卡二卡三卡| 蜜臀va亚洲va欧美va天堂| 99草草国产熟女视频在线| 裸体素人女欧美日韩| 亚洲国产精品久久久久婷蜜芽| 亚洲精彩视频| 九九久久九九久久| 国产伊人精品| www.avtt| 国产精品外国| 欧美激情国产精品日韩| 久久综合婷婷| 日本在线观看免费视频| 久久91精品久久久久久秒播| 青青草原国产在线视频| 国产原创一区二区| 男人添女人荫蒂国产| 粉嫩一区二区三区在线看| 乱码一区二区三区| 成人h精品动漫一区二区三区| 中国极品少妇xxxx| 91亚洲精品久久久蜜桃网站 | 999成人网| 久久久久久久久网| 亚洲成色精品| 超碰97人人射妻| 日本视频一区二区三区| 国产精品嫩草影院8vv8| 国产精品伊人色| 久久久久成人精品无码中文字幕| 91香蕉视频污| 99国产精品免费| 亚洲欧美乱综合| 日韩xxxxxxxxx| 91久久精品网| 国产欧美熟妇另类久久久| 亚洲成人激情图| 男人的天堂在线| 精品国产一区二区在线 | 国产精品99久久久久久www| 国产亚洲人成a在线v网站| 2014国产精品| 四虎5151久久欧美毛片| 一区二区三区四区免费视频| 欧美午夜a级限制福利片| 男女午夜激情视频| 久久99精品一区二区三区三区| 原创真实夫妻啪啪av| wwwwxxxxx欧美| 夫妻性生活毛片| 精品久久中文字幕久久av| 中文字幕无线码一区| 日韩视频免费观看高清完整版在线观看 | 中文网丁香综合网| 亚洲电影成人| 永久免费的av网站| av影院午夜一区| 黑人狂躁日本娇小| 欧美日韩性视频| 一区二区www| 精品亚洲国产成av人片传媒| 久操视频在线免费播放| 热re99久久精品国产66热| 激情视频亚洲| 日韩欧美视频一区二区| 99精品热6080yy久久| 爽爽爽在线观看| 久久久蜜桃精品| 久久一二三四区| 宅男噜噜噜66一区二区66| 青青免费在线视频| 高清一区二区三区四区五区| crdy在线观看欧美| 欧美日韩精品中文字幕一区二区| 国产精品啊啊啊| 五月天婷婷影视| 亚洲国产精品t66y| www毛片com| 亚洲黄色av女优在线观看| 在线中文字幕视频观看| 国产精品欧美日韩久久| 伊人精品一区| 人妻av中文系列| 国产精品亚洲综合一区在线观看| 99精品欧美一区二区| 欧美性xxxxxx| 少妇精品高潮欲妇又嫩中文字幕| 久久成人av网站| 小说区图片区亚洲| 午夜久久资源| 久久中文精品| 亚洲成人黄色av| 色一情一乱一乱一91av| 欧美视频在线观看一区二区三区| 欧美成人全部免费| 国产成人视屏| 一区二区三区视频| 日本va欧美va欧美va精品| 午夜理伦三级做爰电影| 亚洲观看高清完整版在线观看| 99热在线只有精品| 欧美成人精品一区二区| 国产一区二区三区国产精品| 中文字幕剧情在线观看一区| 日本不卡视频在线观看| 中文字幕第二区| 欧美特级限制片免费在线观看| 爱久久·www| 国产精品日韩专区| 久久精品不卡| 亚洲欧美日本一区二区三区| 中文字幕在线视频一区| 99久久精品国产色欲| 欧美日韩国产成人在线| 77成人影视| 日韩国产欧美亚洲| 久久嫩草精品久久久精品一| 日韩黄色一级视频| xvideos国产精品| 日韩成人在线看| 免费看黄在线看| 972aa.com艺术欧美| 久久久久久久久久一级| 在线免费观看羞羞视频一区二区| 欧美日韩伦理一区二区| 无码人妻aⅴ一区二区三区日本| 国产成人综合亚洲91猫咪| 五月天婷婷综合网| 国产小视频国产精品| 在线播放成人| 丰满少妇久久久| 久久久美女毛片| 91国内精品视频| 九九热精品在线| 最近国产精品视频| 五月激情婷婷在线| 亚洲一区二区三区四区五区黄 | 日日摸日日碰夜夜爽无码| 久久久99精品久久| 国产手机av在线| 97在线视频一区| 日韩毛片视频| 成熟妇人a片免费看网站| 色婷婷激情综合| 成人无遮挡免费网站视频在线观看| 成人综合av网| 视频在线在亚洲| 青娱乐91视频| 亚洲人成在线观看| 亚洲精品18| 丁香婷婷激情网| 亚洲永久免费av| 成人高清免费观看mv| av资源站久久亚洲| 日本欧美大码aⅴ在线播放| 国产a免费视频| 亚洲人成网站免费播放| 精品国产不卡一区二区| 大肉大捧一进一出好爽动态图| 自拍偷拍亚洲综合| 日韩av成人| 成人91免费视频| 青椒成人免费视频| 日本在线小视频| 久久久91精品国产一区不卡| 猛男gaygay欧美视频| 苍井空张开腿实干12次| 欧美撒尿777hd撒尿| 亚洲欧洲自拍|