<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                Rild的代碼在Rild.c中,它是一個應用程序。從它的main開始分析,代碼如下所示: **Rild.c** ~~~ int main(int argc, char **argv) { //動態庫的位置由rilLibPath決定 constchar * rilLibPath = NULL; char**rilArgv; void*dlHandle; /* Rild規定動態庫必須實現一個叫Ril_init函數,這個函數的第一個參數指向結構體 RIL_Env,而它的返回值指向結構體RIL_ RadioFunctions。這兩個結構體就是在 圖9-7中提到的接口。這兩個接口的具體內容,后文再做分析。 */ constRIL_RadioFunctions *(*rilInit)(const struct RIL_Env *, int, char **); constRIL_RadioFunctions *funcs; charlibPath[PROPERTY_VALUE_MAX]; unsigned char hasLibArgs = 0; int i; //Rild由init啟動,沒有對應的啟動參數,所以這個for循環不會進來。 for (i= 1; i < argc ;) { if(0 == strcmp(argv[i], "-l") && (argc - i > 1)) { rilLibPath = argv[i + 1]; i += 2; }else if (0 == strcmp(argv[i], "--")) { i++; hasLibArgs = 1; break; }else { usage(argv[0]); } } if(rilLibPath == NULL) { /* 讀取系統屬性,LIB_PATH_PROPERTY的值為"rild.libpath“,模擬器上 和RIL相關的屬性值有兩個,分別是: rild.libpath=/system/lib/libreference-ril.so rild.libargs=-d /dev/ttyS0 上面這些值都定義在build/target/board/generic/system.prop文件中 不同廠商可以有自己對應的實現。 */ if( 0 == property_get(LIB_PATH_PROPERTY, libPath, NULL)) { goto done; }else { /* 這里,使用參考的動態庫進行分析,它的位置為 /system/lib/libreference-ril.so。 */ rilLibPath = libPath; } } ...... //和模擬器相關的一些內容 switchUser();//設置Rild的組用戶為radio //通過dlopen系統加載動態庫 dlHandle = dlopen(rilLibPath, RTLD_NOW); ...... //① 啟動EventLoop,事件處理 RIL_startEventLoop(); //得到RefRil庫中RIL_Init函數的地址 rilInit= (const RIL_RadioFunctions *(*)(const struct RIL_Env *, int, char **))dlsym(dlHandle, "RIL_Init"); ...... rilArgv[0]= argv[0]; //②調用RefRil庫輸出的RIL_Init函數,注意傳入的第一個參數和它的返回值。 funcs= rilInit(&s_rilEnv, argc, rilArgv); //③注冊上面rilInit函數的返回值(一個RIL_RadioFunctions類型的結構體)到Rild中。 RIL_register(funcs); done: while(1) { //主線程sleep,具體工作交給工作線程完成。 sleep(0x00ffffff); } } ~~~ 將上面的代碼和分析結合起來,就知道了Rild解決問題的方法,代碼中列出了三個關鍵點。我們將逐一對其進行分析。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看