整理:徐建祥(netpirate@gmail.com)
日期:2009/09/21
網(wǎng)址:http://www.anymobile.org
初始化流程,主入口init.rc, rild.c中的main函數(shù),主要完成三個任務(wù):
1. 開啟libril.so中的event機(jī)制, 在RIL_startEventLoop中,是最核心的由多路I/O驅(qū)動的消息循環(huán)。
2. 初始化librefrence_ril.so,也就是跟硬件或模擬硬件modem通信的部分(后面統(tǒng)一稱硬件), 通過RIL_Init函數(shù)完成。
3. 通過RIL_Init獲取一組函數(shù)指針RIL_RadioFunctions, 并通過RIL_register完成注冊,并打開接受上層命令的socket通道。
RIL的線程和事件
一共創(chuàng)建了3個線程,5個事件:
s_wakeupfd_event(s_fdWakeupRead,pipe),
s_listen_event(s_fdListen,socket RILD),
s_commands_event(accept(s_fdListen...)),
s_debug_event(s_fdDebug,socket RILD-debug),
-1.
第一個線程s_tid_dispath處理所有fd(socket,pipe,port)對應(yīng)的事件處理,處理和上層RIL.JAVA聯(lián)系是第一個線程和對應(yīng)的5個事件。
第二個線程s_tid_mainloop和第三個線程s_tid_reader通過硬件層連接的fd,來處理readline,processline,處理下層硬件相關(guān)。