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

Android GSM驅動模塊詳細分析

系統
Android的RIL驅動模塊, 在hardware/ril目錄下,一共分rild,libril.so以及librefrence_ril.so三個部分,另有一radiooptions可供自動或手動調試使用。都依賴于include目錄中ril.h頭文件。目前cupcake分支上帶的是gsm的支持,另有一cdma分支,這里分析的是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. 下一代iPhone將有更快的網絡訪問速度
  2. DELL的智能手機計劃暫緩
  3. Android移植之J2ME篇
責任編輯:龐桂玉 來源: IT168
相關推薦

2009-03-24 09:17:58

驅動GSMAndroid

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編程模型

2010-01-06 13:50:37

.NET Framew

2009-11-20 13:11:44

Oracle XML數

2009-09-08 15:56:50

Linq使用Group

2010-04-26 18:17:19

Oracle存儲過程

2009-12-07 15:37:00

WCF控件

2009-12-16 14:09:14

Visual Stud

2009-09-07 13:19:44

C#線程同步

2009-09-04 15:43:07

C#流模型

2011-09-24 12:34:03

2009-09-03 17:57:06

C#聲明事件
點贊
收藏

51CTO技術棧公眾號

天海翼一区二区| 男人靠女人免费视频网站 | 你懂的好爽在线观看| 欧美亚洲三级| 在线播放国产一区二区三区| www,av在线| 青青青免费在线视频| 亚洲国产高清在线| 国产麻豆日韩| 中文字幕一区二区在线视频| 欧美精品大片| 国产一区二区三区视频免费| 男人女人拔萝卜视频| www.精品| 亚洲午夜av在线| 亚洲午夜精品久久| 国产又爽又黄网站亚洲视频123| 男女男精品视频网| 91国语精品自产拍在线观看性色| 国产午夜精品久久久久久久久| 最新精品在线| 欧美日韩三级在线| 久久国产亚洲精品无码| 2024短剧网剧在线观看| 国产欧美日韩精品a在线观看| 成人资源av| 91丨porny丨在线中文 | 国产三级三级看三级| av色在线观看| 亚洲免费电影在线| 亚洲欧美综合一区| 噜噜噜噜噜在线视频| 成人激情小说乱人伦| 成人免费福利视频| 中文字幕一区二区三区波野结 | 国产精品69精品一区二区三区| 九九九免费视频| 国产精品99久久久久久动医院| 亚洲另类图片色| 95视频在线观看| 日本一区二区三区视频在线看| 欧美日韩在线一区二区| 88av.com| 日韩电影免费观| 色综合欧美在线| 69堂免费视频| 中文在线аv在线| 亚洲二区在线观看| 91免费国产精品| 日韩精品分区| 亚洲黄色av一区| 日本福利视频网站| 丝袜美女在线观看| 一区二区三区.www| 黄色一级片黄色| 三级资源在线| 亚洲高清免费在线| 国产一区二区在线视频播放| 日韩伦理精品| 色综合视频在线观看| 91看片就是不一样| 亚洲爱爱视频| 欧美久久久影院| 国产乱叫456| 欧一区二区三区| 精品久久人人做人人爰| 国产精品福利导航| 中文精品一区二区| 在线电影av不卡网址| 天海翼在线视频| 欧美成人69| 668精品在线视频| 亚洲自拍一区在线观看| 免费看欧美女人艹b| 成人精品一区二区三区电影免费| 99精品免费观看| 岛国av在线一区| 欧美成人dvd在线视频| 成人免费视频| 亚洲精品国产品国语在线app| 黄色a级片免费看| 二区三区不卡| 欧美精品久久一区| 怡红院一区二区| 色综合中文网| 久久久av免费| 日本熟女一区二区| 日韩有码一区二区三区| 国产精品电影网| а√中文在线资源库| 99r国产精品| 中文字幕一区二区三区5566| 欧美高清另类hdvideosexjaⅴ| 精品欧美一区二区三区| 天天干天天爽天天射| 91综合久久爱com| 亚洲天堂成人在线视频| 爱爱视频免费在线观看| 一本色道久久| 亚洲va男人天堂| 日韩精品视频无播放器在线看| 欧美国产一区在线| 日本一本中文字幕| 欧美爱爱视频| 亚洲精品久久久久中文字幕欢迎你 | 波多野结衣激情视频| 国产传媒一区在线| 日韩免费av电影| а√天堂中文资源在线bt| 欧美色综合网站| 亚洲一区二区乱码| 亚洲色图插插| 国产精品观看在线亚洲人成网| 亚洲黄色片视频| 国产精品美女一区二区| 精品国产免费av| 玖玖玖电影综合影院| 国产亚洲精品美女久久久久| 日韩精品――中文字幕| 精品一区免费av| 欧美在线3区| 嗯啊主人调教在线播放视频| 欧美一级高清片在线观看| 快灬快灬一下爽蜜桃在线观看| 亚洲精品女人| 超碰97国产在线| 看黄网站在线| 欧美色偷偷大香| 中文字幕高清视频| 99热免费精品| 国产精品一区在线播放| 91福利国产在线观看菠萝蜜| 欧美精品一二三区| 成熟人妻av无码专区| 久久久久国产精品一区二区| 精品乱子伦一区二区三区| 黄色美女视频在线观看| 日韩一区二区影院| 潘金莲一级黄色片| 美女视频网站黄色亚洲| 日韩一二三区不卡在线视频| 欧美电影网址| 亚洲男人的天堂在线| 日本午夜视频在线观看| av在线播放一区二区三区| 国产精品一线二线三线| 中文字幕亚洲在线观看| 欧美第一淫aaasss性| www.xxx国产| 亚洲一区二区三区四区中文字幕| 在线观看视频你懂得| 一区二区蜜桃| 成人女人免费毛片| av中文资源在线资源免费观看| 亚洲大胆人体在线| 国产成人亚洲精品自产在线 | 日韩精品久久久毛片一区二区| 性欧美hd调教| 中文字幕亚洲专区| 亚洲网站免费观看| 亚洲色大成网站www久久九九| 午夜啪啪小视频| 国产精品videossex久久发布| 超碰在线97av| 美女视频在线免费| 亚洲午夜精品视频| 在线免费观看一区二区| 亚洲视频你懂的| 免费在线观看日韩av| 99热这里只有成人精品国产| 久久艳妇乳肉豪妇荡乳av| 日韩成人av电影| 久久在线观看视频| 亚洲国产剧情在线观看| 欧美性生交xxxxx久久久| 精品人妻无码一区| 国产精一区二区三区| 成人在线播放网址| 久久av中文| 亚洲一区二区免费在线| 九色porny丨国产首页在线| 亚洲深夜福利在线| 国产视频一区二区三| 午夜久久福利影院| www.涩涩爱| 成人性生交大片| 精品少妇无遮挡毛片| 亚洲不卡av不卡一区二区| 国产在线精品一区二区中文 | 国产精品精品软件视频| 日韩在线影院| 久精品免费视频| 国产黄色片在线播放| 日韩三级中文字幕| 精品久久久久久久久久久国产字幕 | 麻豆mv在线看| 久久精品成人动漫| 天堂91在线| 欧美一级日韩一级| 久久久精品毛片| 亚洲综合一二区| www久久久久久久| av在线不卡观看免费观看| 国产乱叫456| 日韩精品亚洲一区| 亚洲国产成人精品无码区99| 色喇叭免费久久综合网| 久久大香伊蕉在人线观看热2| 日韩护士脚交太爽了| 青青青国产精品一区二区| 欧美日韩在线视频免费观看| 中文欧美在线视频| 亚洲 欧美 自拍偷拍| 日韩三级免费观看| 中文字幕自拍偷拍| 日韩欧美精品在线观看| 国产在线观看免费av| 亚洲欧美一区二区视频| 免费成人深夜天涯网站| 91在线观看免费视频| 亚洲成人福利视频| 狠狠色伊人亚洲综合成人| www日韩在线观看| 国产欧美日韩一级| 成年女人18级毛片毛片免费| 亚洲综合中文| 欧美三级午夜理伦三级老人| 日韩精品免费一区二区在线观看| 欧美精品一区二区三区在线四季 | 一区二区亚洲精品国产| 亚洲欧美综合一区二区| 欧美成人官网二区| 国产夫妻在线观看| 91麻豆精品国产综合久久久久久 | 亚洲一区二区高清视频| 精品不卡一区| 日本中文不卡| 国产欧美日韩视频在线| 欧美性天天影院| 竹菊久久久久久久| 欧美精品一区二区三区久久| 亚洲人和日本人hd| 久久久久se| 中文有码一区| 日韩精品无码一区二区三区| 国模精品一区| 亚洲精品一品区二品区三品区| 国产调教一区二区三区| 奇米888一区二区三区| 久久av免费看| 亚洲午夜精品久久久久久浪潮| 久久综合av| 美女黄色片网站| 欧美三级午夜理伦三级中文幕| 超碰人人爱人人| 亚洲国产高清一区二区三区| 日本在线xxx| 免费亚洲网站| 中文字幕乱码人妻综合二区三区 | 国产精品热视频| 亚洲伊人精品酒店| 97碰碰视频| 欧美黄色影院| 日韩精品极品视频在线观看免费| 欧美岛国激情| 欧美国产综合在线| 国产精品综合色区在线观看| 777米奇影视第四色| 欧美a一区二区| 污免费在线观看| 99久久精品免费精品国产| 成人在线一级片| 中文字幕一区二区三区在线观看| 国产免费久久久久| 亚洲成人精品影院| 欧产日产国产69| 欧美日韩精品一区二区在线播放| 精品二区在线观看| 精品一区精品二区| 欧美13一16娇小xxxx| 欧美国产日韩在线| 日韩网站中文字幕| 99re在线视频上| 国产成人精品一区二区免费看京 | 午夜在线激情影院| 538国产精品一区二区在线| 日韩视频网站在线观看| 91九色在线免费视频| 网友自拍区视频精品| 亚洲第一精品区| 国产精品永久| 久草福利在线观看| 久久嫩草精品久久久久| 欧美日韩午夜视频| 一本久久a久久免费精品不卡| 国产美女明星三级做爰| 亚洲区免费影片| 丝袜综合欧美| 国产欧美精品一区二区三区介绍| 国产成人一二片| 一本一生久久a久久精品综合蜜| 日韩一级欧洲| 亚洲一区二区三区中文字幕| 妺妺窝人体色777777| 久久精品一区| 粗大的内捧猛烈进出视频| 久久久噜噜噜久噜久久综合| 国产三级国产精品国产国在线观看| 婷婷一区二区三区| 国产a级免费视频| 永久免费精品影视网站| www.超碰在线| 亚洲一区二区久久久久久| 激情综合网站| 男人日女人下面视频| 国产a精品视频| 永久免费看片直接| youjizz欧美| 日韩视频―中文字幕| 啊啊啊久久久| **亚洲第一综合导航网站| 成人激情诱惑| 欧美aⅴ在线观看| 成人黄色777网| 久久久国产精品人人片| 6080亚洲精品一区二区| 超碰97在线免费观看| 日韩美女视频免费在线观看| 国产精品传媒| 18黄暴禁片在线观看| 国产精品一区二区视频| 熟女av一区二区| 欧美日韩在线三区| 国产精品影院在线| 日本老师69xxx| 欧美精品momsxxx| 熟女性饥渴一区二区三区| 2021中文字幕一区亚洲| 国产性xxxx高清| 亚洲精品国产精品自产a区红杏吧| 亚洲小说区图片区都市| 亚洲最大福利网| 欧美久久综合| 国产无套精品一区二区三区| 亚洲免费av网站| 亚洲精品综合网| 欧美激情乱人伦一区| 1769国产精品视频| 美脚丝袜脚交一区二区| va亚洲va日韩不卡在线观看| 奇米影视第四色777| 亚洲国产精品一区二区三区| 擼擼色在线看观看免费| 欧美日韩综合久久| 首页欧美精品中文字幕| 国产欧美小视频| 91精品国产综合久久福利| 最近中文字幕免费mv2018在线| 亚洲aⅴ男人的天堂在线观看 | jizz欧美| 亚洲精品9999| 国产一区二区三区视频在线播放| 69xx绿帽三人行| 亚洲精品在线观| 天堂电影一区| 五月天色一区| 国产麻豆视频一区二区| 精品视频一区二区在线观看| 国产午夜精品久久久 | 天堂网av2018| 欧美精品乱码久久久久久 | 精品福利樱桃av导航| 欧美日韩激情视频一区二区三区| 日韩美女视频免费看| 91超碰成人| 亚洲av成人精品一区二区三区 | 亚洲精品视频网| 日本久久久久久| 国产精品99一区二区三区| 日本一区二区免费视频| 色婷婷久久久综合中文字幕| 福利在线视频网站| 欧美一区二区三区视频在线观看 | 欧美黄色片在线观看| 日韩欧美国产大片| 另类小说色综合| 亚洲影院理伦片| 国产裸舞福利在线视频合集| 91青草视频久久| 欧美一区=区| 男人操女人的视频网站| 亚洲精品视频免费| 国产麻豆一区二区三区| 国产免费黄视频| 亚洲精品免费播放| 毛片网站在线| 国产一区二区三区奇米久涩| 美女性感视频久久| 国产黄色片免费看| 欧美尺度大的性做爰视频|