android 3G pppd 調試記錄。

來源:互聯網
上載者:User

android 3G pppd 調試記錄。

1.  JAVA 部分
android/development/data/etc/apns-conf_sdk.xml   --->  system/etc/apns-conf.xml
注意 apns 的版本,
<apns version="6">
<apn carrier="中國聯通 3g 網路 (China Unicom)"
      apn="3gnet"
      mcc="460"
      mnc="01"
      proxy=""
      port=""
      user=""
      server=""
      password=""
      type="default,supl"
 />
</apns>

android/packages/providers/TelephonyProvider/src/com/android/providers/telephony/TelephonyProvider.java
檔案中:
public void onCreate(SQLiteDatabase db) 
會根據  system/etc/apns-conf.xml 建立
/data/data/com.android.providers.telephony/databases/telephony.db

而pppd 撥號時候需要依賴 telephony 所提供的 apn 等。

2. drvier 部分。
我的 3G 模組是 moto 的 HTM1000, USB 介面。3G 驅動簡單點說就是一個 usb 轉串口的驅動。
模組提供 2 個 tty 裝置, 一個用來發送 AT 指令, 一個用於 pppd 撥號。

3. C 部分。
cd android/hardware/ril/

3.1, 先說說 rild/radiooptions.c
這是一個測試程式,
    perror("Usage: radiooptions [option] [extra_socket_args]/n/
           0 - RADIO_RESET, /n/
           1 - RADIO_OFF, /n/
           2 - UNSOL_NETWORK_STATE_CHANGE, /n/
           3 - QXDM_ENABLE, /n/
           4 - QXDM_DISABLE, /n/
           5 - RADIO_ON, /n/
           6 apn- SETUP_PDP apn, /n/
           7 - DEACTIVE_PDP, /n/
           8 number - DIAL_CALL number, /n/
           9 - ANSWER_CALL, /n/
           10 - END_CALL /n");
}
可以用來測試接打電話等。

選項 6 可以用來測試 pppd 撥號。

3.2  rild/rild.c
如果有許可權問題, 可以直接修改 init.rc 直接給 rild root 許可權。

main 函數中會讀取 /proc/cmdline 中的  android.ril= 來決定 tty裝置的名稱。
所以不用那麼麻煩了, 直接寫成自己的裝置名稱就行了。
            arg_overrides[1] = "-d";
            arg_overrides[2] = "/dev/ttyMOT1";

3.3 reference-ril/reference-ril.c
撥號流程清參考另一篇文章。
            asprintf(&cmd, "AT+CGACT=0,%d", s_defultPDPCid);
            err = at_send_command(cmd, NULL);
            free(cmd);

            asprintf(&cmd, "AT+CGDCONT=%d,/"IP/",/"%s/",,0,0", s_defultPDPCid, apn);
            err = at_send_command(cmd, NULL);
            free(cmd);
也 就相當於發送:   'AT+CGDCONT=1 “ip", "3gnet", 0,0'
這點很重要,
接下來本來是需要發送 "ATD*99***1#" 可是我的情況很怪異,
用 /dev/ttyMOT0 可以 成功,並且 pppd  也能成功, 但用 /dev/ttyMOT1 就不能成功, 無耐之下。。
只好讓 /dev/ttyMOT1 作為 rild 使用的介面。
/dev/ttyMOT0 作為 pppd 的介面,並且 "ATD*99***1#"由 /dev/ttyMOT0 去發送, 無奈之下只好再移植一個 chat .
接下來:
    property_set("net.ppp0.status", "0");
    asprintf(&cmd, "/system/bin/pppd connect '/system/bin/chat -esvf /system/etc/Talk.chat' user %s password %s /dev/ttyMOT0 115200  crtscts modem novj noipdefault nobsdcomp usepeerdns defaultroute  noauth debug nodetach dump &",(username == NULL) ? "any" : username, (password == NULL) ? "any" : password);
               err = system(cmd);
               LOGD("Launch: %s and ret is: %d!", cmd, err);
               free(cmd);

                /* wait for system update property */
for(iretry=0; iretry<ppp_retry; iretry++)
 {
        sleep(2);
        property_get("net.ppp0.status", pppstatus, NULL);
        LOGD("net.ppp0.status = %s/n", pppstatus);
        if(atoi(pppstatus) > 0)
               break;
 }

由於 pppd 不會立即返回,所以只好 修改 pppd如果串連成功則
    property_set("net.ppp0.status", "1");

#cat /system/etc/Talk.chat
ABORT 'BUSY'
ABORT 'NO ANSWER'
ABORT 'ERROR'
TIMEOUT 20
'' 'ATZ'
OK ATDT*99***1#
CONNECT  ""

pppd 串連成功以後會 設定網關和 dns 等。

 

另外, android 預設是開啟撥接功能的。 但也有一些手機做了個開關。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.