1. 程式人生 > >Android 4G模組除錯總結

Android 4G模組除錯總結

最近除錯Android的4G模組;這裡做個總結;走個流程;程式碼就不貼了;公司保密;驅動方面沒什麼好說的;一般都是廠家會提供文件;其實也就是把4G模組虛擬機器成ttyUSB0~ttyUSB5等幾個虛擬串列埠;再開啟CDC_NCM虛擬網絡卡繫結到某一個虛擬串列埠;產生虛擬網絡卡usb0或者什麼的;

             先走個大概流程;其實主要就是hardware/ril/幾個庫檔案;修改的也不多;有些公司主要是修改reference-ril.so庫的修改;有些公司為了公司保密直接給編譯好的reference-ril.so檔案;那更簡單了;直接新增進系統就OK了;

  1. hardware/ril/rild
    /rild.c => main()
  2. main()開啟reference-ril.so庫;呼叫reference-ril.so庫裡面的RIL_Init()函式;
  3. RIL_Init()函式建立執行緒呼叫mainLoop()函式;
  4. mainLoop()函式開啟4G模組的虛擬串列埠;然後:首先呼叫onUnsolicited()函式監聽4G模組主動上報的資訊;再呼叫initializeCallback()函式初始化4G模組;
  5. onRequest()函式接收上層傳下來的指令轉換成AT指令撥號等;

關鍵函式:

initializeCallback()4G 模組初始化函式;裡面就是一些發給4G模組的AT指令;不能出錯;

 onUnsolicited()函式接收4G模組對AT指令的返回值;可以在裡面新增根據返回值相應的動作;比如根據撥號成功返回值做出繫結網絡卡分配IP的動作;

 onRequest()主動撥號、上層發下來的所有AT指令都在這裡;

一般除錯4G模組就是修改上面的三個檔案;

開機自動撥號實現:

       frameworks/base/services/Java/com/android/server/ConnectivityService.java

  1. publicboolean getMobileDataEnabled() {  
  2.        // TODO: This detail should probably be in DataConnectionTracker's
  3.        //       which is where we store the value and maybe make this
  4.        //       asynchronous.
  5.        enforceAccessPermission();  
  6.        boolean retVal = Settings.Secure.getInt(mContext.getContentResolver(),  
  7.                Settings.Secure.MOBILE_DATA, 1/*預設是0,改為1就可以了*/) == 1;  
  8.        if (VDBG) log("getMobileDataEnabled returning " + retVal);  
  9.        return retVal;  
  10.    }  

其實就是預設開機就打開了上網流量開關;手機的4G上網開關;

還有個關鍵點:apns-conf.xml

根據你使用的SIM修改apns-conf.xml檔案;就是apn接入點;如果apns-conf.xml檔案裡面沒有相應的核心網的mcc和mnc則Android系統不能自動撥號;如下圖;

        

注意點:

       如果有些4G模式使用軟卡、或者硬體是在4G模組初始化的時候決定的;修改相應的AT指令;在initializeCallback()函式裡;