前記:
這是我好多年前寫的一個文檔了。有一年沒有做modem側了,最近一直在做AP原生撥号盤和架構。發現自己原來比較喜歡看協定文檔,也喜歡對着協定看代碼實作。看一個協定的過程中,總是發現原來還有更多相關協定需要了解。一個還沒看完,待看清單卻已經越變越長。就像是一個一個散落絲,等待着織成一個網。
整個科技社會中,我就是一個渺小的螞蟻,提不出創新。但是我仍然盡力學着别人發明創造的東西,盡可能的實作或優化這龐然高塔的某個細小螺絲。
後面陸續将自己之前的一些文檔傳上來吧。也算是自己的心血了。
正文開始:
1.Ril側
Android側通過如下ril指令通知終端擷取目前網絡清單:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 此指令發出後等待cm ph 時間:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。這個事件會列舉目前網絡清單。
然後此ril指令變為
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 狀态。
見下圖:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 此ril指令遠端調用modem側的
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數。
要等到ril側收到
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 cm事件,此ril指令才完成。
2.Modem側收到
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
通過此函數發出
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,最終處理此指令的是函數
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。此函數會調用mmoc子產品的
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數發出指令
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,type為
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。
3.Mmoc子產品處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數處理指令
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,當為
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 時,調用
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ------>
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數通過
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,發送
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 給 SD子產品 。
4.SD子產品處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 的枚舉值是9,下面的log顯示出sd子產品對此event的處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 從上圖看出,SD腳本查找到腳本73符合要求。在中
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,第73個腳本是
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 腳本的入口的條件是
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。即
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 5.SD腳本調用
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 6.
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 對
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 的處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 從腳本裡取一行一行的cons處理。有個
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 循環,一般cons的處理都回傳回
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,是以腳本會一行一行的執行。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數 處理到
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 時, 調用
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。然後
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 調用
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 中最後如下:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 當return為
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,則是指去腳本的下一個cons,在目前腳本中為
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。
不過
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 的處理是,傳回了
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,
不滿足while循環條件,即腳本不繼續執行,而是産生了一個action給sd engine。退出函數
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,傳回
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 。
5.
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 實際上是在
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 裡的一個死循環裡,
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 但是
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 會退出死循環,
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 7.最終函數一步步回退到
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 雙卡時,每個卡各有自己的stack,即sdss_eng_stack_s執行個體。即各有自己的sd腳本處理堆棧。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 之前的流程簡單說一下:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 發送指令,cm的
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 處理指令。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 調用
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 函數,發送mmoc指令。Mmoc通過
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 處理
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 指令。
到了
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ,開始進入sd子產品。這個沒有指令的轉發了,是函數的層層調用。我們看看sd的函數調用層次:
---------------------------------------------------------------
1.
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ------------------------------------------------------------------
2
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ----------------------------------------------------------------------
3
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ----------------------------------------------------------------------------------------------
4
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ---------------------------------------------------------------------------------------------
5
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 ---------------------------------------------------------------------------------------------------------
6
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 整個執行流程我畫了一個圖:
如下:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 SD是個腳本和資料庫的組合。腳本的執行基于棧的原理,腳本的每行執行相當于壓棧,一個腳本執行完了,就會将腳本從棧裡彈出。
目前我知道的是新腳本的執行是事件觸發的。因為每個腳本的第一行都是對event的判斷,那個event比對了,這個腳本就會被壓棧并執行。
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件 特列是:dssscr_called_tbl,這個組裡面的腳本是被其他腳本調用的腳本,這些腳本不對event進行判斷。
腳本是分組排序的,總共有如下幾組腳本:
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件
從高通手動搜網代碼流程看sd腳本的執行1.Ril側2.Modem側收到3.Mmoc子產品處理4.SD子產品處理事件