1. 程式人生 > >Android RIL 除錯分析全記錄

Android RIL 除錯分析全記錄

    以前沒有除錯過RIL的東西, 從零開始, 花了兩週時間,終於撥號成功,這裡發表出來與大家共享經驗,少走彎路.

    上一篇文章是一個成功撥號的Android RIL log, 這裡主要結合上一篇log進行分析, 分享一些注意事項, 由於時間有限,儘量言簡意概, 主要要自己嘗試去實踐才會有所收穫。

(本文所指的log行號,是指上一篇文章所標記的行號)

1. 所要了解的一些原始碼及指令碼檔案:

android/hardware/ril/reference_ril/   (reference_ril.c)

android/hardware/ril/rild

android/extern/ppp/pppd

android/extern/ppp/chat

android/data/etc/apn-conf-sdk.xml

android/system/core/rootdir/etc/ppp/init.gprs-pppd

android/system/core/rootdir/etc/ppp/peers/cmnet

android/system/core/rootdir/etc/ppp/chat/cmtc-isp

android/vendor/xxxxx/xxxx/system.prop

reference_ril.c: RIL的一些AT命令操作,通過一些onRequest介面操作,對不同的硬體,需作一些修改調整。

apn-conf-sdk.xml: 以下是一個例子,有些不支援的APN,需要自己加上去,否則在log 中會出現類似:No APN found for carrier: 46xxx, 的錯誤。一般移動的TD USIM是46007, 

有些是46000.

<apns version="6">

    <apn carrier="Android"

        mcc="310"

        mnc="995"

        apn="internet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

    <apn carrier="TelKila"

        mcc="310"

        mnc="260"

        apn="internet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

    <apn carrier="CMCC"

        mcc="460"

        mnc="00"

        apn="cmnet"

        user="*"

        server="*"

        password="*"

        mmsc="null"

    />

        <apn carrier="CHINA MOBILE"

                mcc="460"

                mnc="07"

                apn="cmnet"

                user="*"

                server="*"

                password="*"

                mmsc="null"

        />

</apns>

init.gprs-pppd: 呼叫pppd GPRS撥號的初始化指令碼。

PPPD_PID=

/system/bin/setprop "net.gprs.ppp-exit" ""

/system/bin/log -t pppd "Starting pppd"

/system/xbin/pppd call cmnet $*

PPPD_EXIT=$?

PPPD_PID=$!

/system/bin/log -t pppd "pppd exited with $PPPD_EXIT"

/system/bin/setprop "net.gprs.ppp-exit" "$PPPD_EXIT"

cmnet:pppd撥號option指令碼:

/dev/ttyACM2

921600

nocrtscts

nocdtrcts

local

usepeerdns

defaultroute

noipdefault

ipcp-accept-local

ipcp-accept-remote

user cmnet

password cmnet

lock

nodetach

connect "/system/xbin/chat -v -t 50 -f /system/etc/ppp/chat/cmtc-isp"

cmtc-isp:

ABORT 'BUSY'

ABORT 'NO CARRIER'

ABORT 'ERROR'

ABORT '+CME ERROR: 100'

""    AT

OK    AT+CGDCONT=1,"IP","CMNET"

OK    AT+CGEQREQ=1,2,128,384,0,0,0,0,"0E0","0E0",,0,0

OK    AT

OK    AT

OK    ATS0=0

OK    AT

OK    AT

OK    ATDT*98*1#

CONNECT

system.prop

rild.libpath=/system/lib/libreference-ril.so

rild.libargs=-d /dev/ttyACM0

2. 所要具備的除錯工具:

microcom:  可在linux下通過傳送AT命令除錯硬體模組,在較新版本busybox中可以找到此模組。如命令:

#./microcom -t 12000 /dev/ttyACM0

注: -t 12000 為延遲退出ms時間,不宜太長時間,時間太長,會感覺 像宕機,時間太短,經常會命令沒輸完就退出了。

ppp(pppd, chat):可手撥號連線GPRS,如命令:

# pppd call cmnet &

3. 裝置檔案

1)/dev/ttyACM0, /dev/ttyACM1, /dev/ttyACM2

    這是usb transceiver 模擬串列埠的裝置檔案,如果是直接串列埠連線,可能是/dev/ttyS0, /dev/mux0等。

2) #ifconfig ppp0

    GPRS連線上後,會出現ppp0的網路介面,用如上命令可以檢視ppp0網路介面屬性。

4. 常用AT命令,具體可以查《中國移動寬頻隨e 行客戶端軟體A T命令介面規範》

AT+CFUN

AT+CREG

AT+CGREG

AT

AT+COPS

AT+CPIN

AT+CIMI

AT^SYSCONFIG

ATD

AT+CGDCONT

AT+CGEQREQ

AT+CSQ

5. RIL啟動過程分析

如果硬體模組驅動配置成功,在/dev目錄下會出現類似於ttyACM0,ttyS0等的裝置檔案 。

1-36行: 初始化過程,裝置檔案由system.prop屬性檔案決定,

40行:   D/RILJ    (  110): [0000]> SCREEN_STATE   這裡開始了第一個onRequest,

然後會開始一系列的onRequest:

40     D/RILJ    (  110): [0000]> SCREEN_STATE

49   D/RILJ    (  110): [0001]> RADIO_POWER

62   D/RILJ    (  110): [0002]> BASEBAND_VERSION

63   D/RILJ    (  110): [0003]> GET_IMEI

64   D/RILJ    (  110): [0004]> GET_IMEISV

65   D/RILJ    (  110): [0005]> REQUEST_GET_ACCESS_MODE

83   D/RILJ    (  110): [0006]> OPERATOR

84   D/RILJ    (  110): [0007]> GPRS_REGISTRATION_STATE

85   D/RILJ    (  110): [0008]> REGISTRATION_STATE

86   D/RILJ    (  110): [0009]> QUERY_NETWORK_SELECTION_MODE

87   D/RILJ    (  110): [0010]> GET_CURRENT_CALLS

88   D/RILJ    (  110): [0011]> OPERATOR

91   D/RILJ    (  110): [0012]> GPRS_REGISTRATION_STATE

96   D/RILJ    (  110): [0013]> REGISTRATION_STATE

97   D/RILJ    (  110): [0014]> QUERY_NETWORK_SELECTION_MODE

100   D/RILJ    (  110): [0015]> OPERATOR

101   D/RILJ    (  110): [0016]> GPRS_REGISTRATION_STATE

102   D/RILJ    (  110): [0017]> REGISTRATION_STATE

103   D/RILJ    (  110): [0018]> QUERY_NETWORK_SELECTION_MODE

104   D/RILJ    (  110): [0019]> SET_NETWORK_SELECTION_AUTOMATIC

105   D/RILJ    (  110): [0020]> OPERATOR

106   D/RILJ    (  110): [0021]> GPRS_REGISTRATION_STATE

107   D/RILJ    (  110): [0022]> REGISTRATION_STATE

108   D/RILJ    (  110): [0023]> QUERY_NETWORK_SELECTION_MODE

116   D/RILJ    (  110): [0024]> getIMSI:RIL_REQUEST_GET_IMSI 11 GET_IMSI

117   D/RILJ    (  110): [0025]> GET_SIM_STATUS

118   D/RILJ    (  110): [0026]> QUERY_FACILITY_LOCK

119   D/RILJ    (  110): [0027]> QUERY_FACILITY_LOCK

239   D/RILJ    (  110): [0028]> OPERATOR

240   D/RILJ    (  110): [0029]> GPRS_REGISTRATION_STATE

241   D/RILJ    (  110): [0030]> REGISTRATION_STATE

242   D/RILJ    (  110): [0031]> QUERY_NETWORK_SELECTION_MODE

248   D/RILJ    (  110): [0032]> OPERATOR

249   D/RILJ    (  110): [0033]> GPRS_REGISTRATION_STATE

250   D/RILJ    (  110): [0034]> REGISTRATION_STATE

251   D/RILJ    (  110): [0035]> QUERY_NETWORK_SELECTION_MODE

以上onRequest不一定都是必須的,如果GPRS_REGISTRATION_STATE,REGISTRATION_STATE出現的註冊狀態為:

AT< +CGREG: 1,1

AT< +CREG: 2,1,"a834","5692"

那麼你的恭喜你網路註冊成功了,如果出現

AT< +CGREG: 1,0

AT< +CREG: 2,0

那麼要查一下為什麼註冊不成功,檢查一下SIM插好沒,我發現AT+CFUN=4命令有可能會影響到後來的網路註冊。

如果網路沒有註冊,不會出現以下連線資訊

295   D/GSM     (  110): [DataConnectionTracker] ***trySetupData due to gprsAttached

如果出現此條資訊,那麼恭喜你又進了一步,要開始下一步ppp撥號上網了,

通過 #logcat &命令,會看到

I/pppd    (  140): Starting pppd 

如果撥號成功,會出現如下資訊:

Serial connection established.

Using interface ppp0

Connect: ppp0 <--> /dev/ttyACM2

Remote message: Login OK

PAP authentication succeeded

local  IP address 10.77.154.38

remote IP address 192.200.1.21

primary   DNS address 211.136.112.50

secondary DNS address 211.136.20.203

這時候網路連線成功,radio log會出現如下資訊,

327   D/GSM     (  110): [DataConnectionTracker] setState: CONNECTED

這時候就可以放鬆一下了,鬱悶期已過,剩下的穩定性的問題可以慢慢除錯了。

ping 一下www.google.com

#ping www.google.com

出現:

PING www.l.google.com (64.233.189.99) 56(84) bytes of data.

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=1 ttl=242 time=196 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=2 ttl=242 time=189 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=3 ttl=242 time=195 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=4 ttl=242 time=199 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=5 ttl=242 time=203 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=6 ttl=242 time=196 ms

64 bytes from hkg01s01-in-f99.1e100.net (64.233.189.99): icmp_seq=7 ttl=242 time=187 ms

#ifconfig ppp0

出現ppp0介面屬性。

6. 所遇問題分析總結:

1)No APN found for carrier: 46xxx

改一下apn-conf-sdk.xml檔案吧,將所對應的46xxx的APN資訊寫入即可。

2)  網路註冊失敗,出現:

AT+CGREG?

+CGREG: 1,0

AT+CREG?

+CREG: 2,0

我發現有幾種情況:

1>沒插SIM卡;

2>訊號不好(一般3G出現低於100的訊號值,說明訊號強度太差,無法註冊);

3>AT+CFUN=4關機命令,即使後面用了AT+CFUN=1開機,可能因為開機需要時間延遲,造成無法註冊,這是我發現的比較詭異的地方,需要諮詢一下供應商。

3)pppd call cmnet:   connect script failed!   pppd exited with 8 

發現出現這個錯誤的原因比較複雜,不一定是真正的cmnet與cmtc-isp兩個指令碼的問題,按我的經驗發現,如果connect script failed!錯誤出現緊跟著Starting pppd, 那應該是

真正的指令碼有問題;如果間隔時間較長,那就不應該是指令碼的問題了,指令碼語法問題程式很快能檢查出來,通常這樣的可能是通道通訊的問題,rild與pppd用的同一個串

口通道,也可能造成這個錯誤,通常都會有2-3個通道,換成另一個tty通道就可以了,我想了如下一個辦法來除錯這個錯誤:

    1>刪除檔案/etc/init.gprs-pppd,重啟後,系統不會用pppd自動撥號;

    2>手動撥號, 執行如下命令:

         #pppd call cmnet &

         第一次執行會出現錯誤:

         Removed stale lock on ttyACM2 (pid 259)

         Failed to open /dev/ttyACM2: I/O error

         再執行一次:

           Serial connection established.

          Using interface ppp0

          Connect: ppp0 <--> /dev/ttyACM2

          Remote message: Login OK

         PAP authentication succeeded

         local  IP address 10.77.48.209

         remote IP address 192.200.1.21

         primary   DNS address 211.136.112.50

         secondary DNS address 211.136.20.203

        目前還不知道為什麼這樣,正在查,有高手可以指點一下。

        另外出現這個問題可能還有其它原因,按出現的時間來看,我認為是比較好的一個排查問題的方法。

附:與xxxx聊天解決問題記錄,以供大家參考,可能會有點用(注意,時間要從下往上看呀)

在 2010年12月24日 下午4:43,xxxx寫道:

另外,還有一些問題:

我現在這種上網是跟android完全沒有關係的。還沒有跟上層完成資料傳輸。

要完成跟上層的資料傳輸,就必需要實現要正確的返回我剛才問你的那個問題“GET_IMEI”, "GET_IMSI",

因為這兩個返回了,android才能完成與apns-conf.xml檔案中的numeric值的匹配。

麻煩指點下,我上面這個理解對不對。還有你現在的apns-conf.xml中主資料可以寫入telephony.db資料庫嗎?

在 2010年12月24日 下午4:39,xxxx寫道:

方便就留個聯絡方式,改天請你吃個便飯。交個朋友。

在 2010年12月24日 下午4:29,xxxx寫道:

恩。這個必需的。。。

你也在深圳吧?

在 2010年12月24日 下午4:29,xxxx寫道:

# ping 220.181.112.76

PING 220.181.112.76 (220.181.112.76) 56(84) bytes of data.

64 bytes from 220.181.112.76: icmp_seq=1 ttl=50 time=2646 ms

64 bytes from 220.181.112.76: icmp_seq=2 ttl=50 time=1659 ms

64 bytes from 220.181.112.76: icmp_seq=3 ttl=49 time=679 ms

64 bytes from 220.181.112.76: icmp_seq=5 ttl=49 time=185 ms

64 bytes from 220.181.112.76: icmp_seq=6 ttl=50 time=181 ms

64 bytes from 220.181.112.76: icmp_seq=7 ttl=49 time=198 ms

64 bytes from 220.181.112.76: icmp_seq=8 ttl=49 time=185 ms

64 bytes from 220.181.112.76: icmp_seq=9 ttl=50 time=202 ms

原來什麼都不用設定就可以撥號成功了?和linux下面的是一樣的,只是這麼弄好像上層根本響應不到。

在 2010年12月24日 下午4:26,xxxx寫道:

I/pppd    ( 2319): Connect: ppp0 <--> /dev/ttyUSB5

D/pppd    ( 2319): sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x7b8e6e14> <pcomp> <accomp>]

D/pppd    ( 2319): rcvd [LCP ConfReq id=0x0 <mru 1500> <asyncmap 0xffffffff> <auth pap> <magic 0x11223344> <pcomp> <accomp>]

D/pppd    ( 2319): No auth is possible

D/pppd    ( 2319): sent [LCP ConfRej id=0x0 <auth pap>]

D/pppd    ( 2319): rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x7b8e6e14> <pcomp> <accomp>]

D/pppd    ( 2319): rcvd [LCP ConfReq id=0x1 <mru 1500> <asyncmap 0xffffffff> <magic 0x11223344> <pcomp> <accomp>]

D/pppd    ( 2319): sent [LCP ConfAck id=0x1 <mru 1500> <asyncmap 0xffffffff> <magic 0x11223344> <pcomp> <accomp>]

D/pppd    ( 2319): sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]

D/pppd    ( 2319): sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]

D/pppd    ( 2319): rcvd [LCP ProtRej id=0x2 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]

D/pppd    ( 2319): sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]

D/pppd    ( 2319): rcvd [IPCP ConfReq id=0x3 <addr 192.168.0.1>]

D/pppd    ( 2319): sent [IPCP ConfAck id=0x3 <addr 192.168.0.1>]

D/pppd    ( 2319): rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>]

D/pppd    ( 2319): sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns3 0.0.0.0>]

D/pppd    ( 2319): rcvd [IPCP ConfNak id=0x2 <addr 10.233.0.103> <ms-dns1 120.196.165.7> <ms-dns3 221.179.38.7>]

D/pppd    ( 2319): sent [IPCP ConfReq id=0x3 <addr 10.233.0.103> <ms-dns1 120.196.165.7> <ms-dns3 221.179.38.7>]

D/pppd    ( 2319): rcvd [IPCP ConfAck id=0x3 <addr 10.233.0.103> <ms-dns1 120.196.165.7> <ms-dns3 221.179.38.7>]

I/pppd    ( 2319): local  IP address 10.233.0.103

I/pppd    ( 2319): remote IP address 192.168.0.1

I/pppd    ( 2319): primary   DNS address 120.196.165.7

I/pppd    ( 2319): secondary DNS address 221.179.38.7

兄弟,看起來是不是已經成功了啊。

在 2010年12月24日 下午4:11,xxxx寫道:

我是在深圳的,你呢?

已經開始撥號了,注意以下幾個設定:

1. tty埠設定,一般會有3個虛擬埠,各有用處,諮詢模組廠商;

   :恩。我們這個是TD模組,有5個埠,實際只用了3個,你說的BUSY這種情況應該是對的,因為我現在AT是用的ttyUSB5,剛才我的撥號指令碼也是用的ttyUSB5。我覺得應該是這個問題吧。

2. 撥號指令碼配置,諮詢模組廠商;

  :這個指令碼應該不是問題,因為我在linux下面已經可以撥號上網了。用這兩個指令碼。 

在 2010年12月24日 下午4:05,wenfeng cao <[email protected]>寫道:

已經開始撥號了,注意以下幾個設定:

1. tty埠設定,一般會有3個虛擬埠,各有用處,諮詢模組廠商;

2. 撥號指令碼配置,諮詢模組廠商;

在 2010年12月24日 下午4:01,xxxx寫道:

我現在改的/etc/apns-conf.xml中已經有了中國移動的,但是/data/data//data/data/com.android.providers.telephony/databases/telephony.db中沒有生成對應的記錄。

然後按你說的直接撥號,提示下面的錯誤。。

I/pppd    ( 2261): Starting pppd 

I/chat    ( 2265): chat_send (BUSY)

I/chat    ( 2265): abort on (BUSY)

I/chat    ( 2265): chat_send (NO CARRIER)

I/chat    ( 2265): abort on (NO CARRIER)

I/chat    ( 2265): chat_send (ERROR)

I/chat    ( 2265): abort on (ERROR)

I/chat    ( 2265): chat_send (AT+CGDCONT=1,"IP","cmnet")

I/chat    ( 2265): send (AT+CGDCONT=1,"IP","cmnet"^M)

I/chat    ( 2265): expect (OK)

I/chat    ( 2265): alarm

I/chat    ( 2265): Failed

E/pppd    ( 2263): Connect script failed

I/pppd    ( 2274): pppd exited with 8 

在 2010年12月24日 下午3:38,wenfeng cao <[email protected]>寫道:

framework, java層呼叫過來的, 直接把中移動的加進去試試吧。

在 2010年12月24日 下午3:35,xxxx寫道:

你的意思是我直接改/development/data/etc/apns-conf_sdk.xml這個檔案是吧?

能否指點下,這個檔案最後生成的檔案系統的目錄下的/system/etc/apns-conf.xml檔案,跟撥號上網的關係在程式碼中體現在哪裡啊?

也就是說我用PPPD撥號的時候,哪裡呼叫到了這個apns-conf.xml檔案中的資訊了。

在 2010年12月24日 下午3:27,wenfeng cao <[email protected]>寫道:

直接找到那個配置xml檔案吧,APN寫資料庫不一定好使,應該要修改framework!

在 2010年12月24日 下午3:25,xxxx寫道:

如果這個問題不解決,在 ”設定/無線和網路設定/行動網路設定/接入點名稱“ 設定裡面顯示不出來我設定的APN

另外,我是參考這篇文章設定的APN,但是寫入資料庫沒有成功。很奇怪。

http://myqdroid.blog.51cto.com/2057579/389134

在 2010年12月24日 下午2:31,wenfeng cao <[email protected]>寫道:

D/AT      ( 2034): AT< +CGREG: 1,1

D/AT      ( 2034): AT< OK

D/AT      ( 2034): AT< +CREG: 2,1,"a563","c46b"

D/AT      ( 2034): AT< OK

感覺網路註冊成功了,你這個應該不算什麼致命錯誤,

試著配置APN,撥號看看,

你的APN還沒有配置,直接在xml檔案裡裡配置一下吧,

在 2010年12月24日 下午2:19,xxxx寫道:

卡肯定是插了,只是SIM卡檢測好像是有點問題。因為我安裝了一個Hidroid的設定APN的工具,它提示“無法檢測到SIM卡”,但是我的SIM ready已經打印出來了。

 我給你發了一個日誌檔案,logcat -b radio

在 2010年12月24日 下午1:12,wenfeng cao <[email protected]>寫道:

參看我部落格這段log吧,不會是沒插入SIM吧,感覺IMEI你已經讀到了呀

73  D/RIL     (   56): onRequest: GET_IMEI

74  D/AT      (   56): AT> AT+CGSN

75  D/GSM     (  110): Notifying: Radio On

76  D/RILJ    (  110): [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED SIM_NOT_READY

77  D/RILJ    (  110): [UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED

78  V/RILJ    (  110): [UNSL]< RIL_UNSOL_ACCESS_MODE_CHANGED {2}

79  D/GSM     (  110): Notifying: SIM ready

80  D/RILJ    (  110): [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED SIM_READY

。。。。

在 2010年12月24日 下午1:07,wenfeng cao <[email protected]>寫道:

那是這條AT命令錯誤了,用microcom串列埠工具調一下吧,看看AT命令有沒有語法問題。

AT+CGSN

在 2010年12月24日 上午10:15,xxxx寫道:

Hi wenfeng,

  那個問題我剛看了一下,錯誤是在下面這裡返回的:

  @reference-ril.c

        case RIL_REQUEST_GET_IMEI:

            p_response = NULL;

            err = at_send_command_numeric("AT+CGSN", &p_response);

           // 因為這裡返回的err = -6 所以在這裡就報錯了

            if (err < 0 || p_response->success == 0) {

                RIL_onRequestComplete(t, RIL_E_GENERIC_FAILURE, NULL, 0);

            } else {

                RIL_onRequestComplete(t, RIL_E_SUCCESS,

                    p_response->p_intermediates->line, sizeof(char *));

            }

            at_response_free(p_response);

            break;

  目前還不太清楚具體原因是什麼。。

  :-(

在 2010年12月22日 下午2:43,wenfeng cao <[email protected]>寫道:

那得到com.android.internal.telephony中跟蹤一下java程式碼,列印一下LOG,

看一下在哪裡出現異常了。

在 2010年12月22日 上午11:24,xxxx寫道:

非常感謝,這麼快回復我,我已經測試過了,沒有問題,你看下面的LOG也已經打出來了,AT返回是正確的。只是好像上層沒有收到這個資料。。

在 2010年12月22日 上午10:49,wenfeng cao <[email protected]>寫道:

用microcom串列埠除錯工具對AT命令測試一下吧

在 2010年12月22日 上午10:06,xxxx寫道:

Hi, wenfeng:

  我現在在獲取IMEI和IMSI的時候遇到一點問題,想請教一下:

現在的問題上層RILJ傳送請求。RILD已經收到,也正確返回,但是RILJ處理響應時出現異常,LOG如下:

1. GET_IMEI出錯:

D/RILJ    ( 2108): [0004]> GET_IMEI

D/RIL     ( 2032): onRequest: GET_IMEI

D/AT      ( 2032): AT> AT+CGSN

D/AT      ( 2032): AT< +CGSN: 860103005026647

D/AT      ( 2032): AT< OK

D/RILJ    ( 2108): [0004]< GET_IMEI error: com.android.internal.telephony.CommandException: GENERIC_FAILURE

2. GET_IMSI出錯:

D/RILJ    ( 2108): [0020]> getIMSI:RIL_REQUEST_GET_IMSI 11 GET_IMSI

D/RIL     ( 2032): onRequest: GET_IMSI

D/AT      ( 2032): AT> AT+CIMI

D/AT      ( 2032): AT< +CIMI: 460077119750323

D/AT      ( 2032): AT< OK

com.android.internal.telephony.CommandException: GENERIC_FAILURE

看起來這兩個問題比較類似。 

相關推薦

Android RIL 除錯分析記錄

    以前沒有除錯過RIL的東西, 從零開始, 花了兩週時間,終於撥號成功,這裡發表出來與大家共享經驗,少走彎路.     上一篇文章是一個成功撥號的Android RIL log, 這裡主要結合上一篇log進行分析, 分享一些注意事項, 由於時間有限,儘量言簡意概,

QTrace--Android系統除錯分析的利器(4)

QTrace的遠端程式碼檢視與搜尋        這個功能簡單的說:就是OpenGrok的客戶端。OpenGrok不用網頁上搜索與檢視程式碼,可以讓OpenGrok像原生代碼一樣搜尋與檢視。該功能主要使用場景有兩個:     &

QTrace--Android系統除錯分析的利器(2)

LogCat指令碼分析 QTrace為了方便指令碼處理,提供瞭如下幾個基礎功能: 1)QTrace將所有的log是放在資料庫中的,這樣查詢速度很快,並且可以按照不同的欄位進行查詢。 2)QTrace提供了資料圖形化顯示的基礎框架。可以方便的將資料圖形化。 3)QTrace的指令碼有介

QTrace--Android系統除錯分析的利器(1)

    QTrace為一個專為Android系統除錯而開發的IDE。與Android Studio不同,QTrace更關注與Android系統的除錯與分析,以及無原始碼情況下的程式執行分析。           QT

android除錯3G之Ril分析

一、基本架構概述           Android RIL (Radio Interface Layer)提供了Telephony服務和Radio硬體之間的抽象層。RIL負責資料的可靠傳輸、AT命令

Android藍芽開發之低功耗藍芽(藍芽4.0)開發記錄

主要內容概況 前面我記錄了開發藍芽2.0的過程,今天準備介紹現在的主流藍芽技術,藍芽4.0的開發,該藍芽技術是在Android4.3(API級別18)版本引入的API。 官方文件 具體的區別主要以下幾點: 1.新的藍芽技術提供了連線服務的方法,以前是沒有提供連線藍芽的方法

Android藍芽開發之經典藍芽(藍芽2.0)開發記錄

前言部分 最近因為需要開始藍芽相關開發,所以在網上搜索了很多內容,並且結合自己的開發過程做了一個總結,先儲備上,也許可能幫到正在做藍芽開發的同學。 藍芽很早就是android裝置上基本通訊功能了,只是以前的沒有那麼多藍芽裝置,現在藍芽裝置種類繁多,所以經常會有人遇到藍芽相關的開發

Unity3d 加密 Assembly-CSharp dll Android平臺 記錄

                0、加密的原理Unity3d 是基於 Mono的,我們平時寫的 C# 指令碼都被編譯到了 Assembly-CSharp.dll ,然後 再由 Mono 來載入、解析、然後執行。Mono 載入 Assembly-CSharp.dll 的時候就是讀取檔案到記憶體中,和平時讀取一個

Android記憶體洩漏分析除錯

 尊重原創作者,轉載請註明出處: 首先了解一下dalvik的Garbage Collection: 如上圖所示,GC會選擇一些它瞭解還存活的物件作為記憶體遍歷的根節點(GC Roots),比方說thread stack中的變數,JNI中的全域性變數,zygote中

Android 8.0 RIL原始碼分析(一)

1.去電流程三中跟蹤到最後的時候可以看到其呼叫了RIL的dail方法 這裡繼續以此分析其從RIL到Modem的流程 @Override public void dial(String address, int clirMode, UUSInfo

Unity3d 加密 Assembly-CSharp.dll (Android平臺) 記錄

0、加密的原理Unity3d 是基於 Mono的,我們平時寫的 C# 指令碼都被編譯到了 Assembly-CSharp.dll ,然後 再由 Mono 來載入、解析、然後執行。Mono 載入 Assembly-CSharp.dll 的時候就是讀取檔案到記憶體中,和平時讀取一

Android Camera資料流分析全程記錄(overlay方式二)

Android Camera資料流分析全程記錄(overlay方式) 這篇文章接著上一篇文章繼續:http://blog.chinaunix.net/uid-26765074-id-3568436.html 上一篇文章overlay這個過程已經走了一遍,但是根

android lcd除錯 高通平臺lcd除錯深入分析總結(mipi和rgb介面)

    各位網友:最近發現我這篇文章轉載的到處都是,有的則以原創存在,轉載時請註明出處,還有文中錯誤的地方請指正!謝謝合作。      下面點lk方法適用於8660,8064。當然qrd則沒有那麼複雜。 一:點亮lcd in kernel 其實點亮lcd很簡單必須保證以後幾個步驟正確: 1:確認Lcd資訊所

android自己定義Application局變量不能類型轉換的問題

默認 .... 清單 font ng- context net until roi 今天弄了個全局變量AppContext ,但一直出現例如以下錯誤,原來繼承 Application的得在清單文件聲明。 java.lang.RuntimeException: Un

Android異步載入解析之開篇瞎扯淡

com des turn pro 能夠 eat launch 卡頓 ring Android異步載入概述 Android異步載入在Android中使用的很廣泛,除了是由於避免在主線程中做網絡操作。更是為了避免在顯示時由於時間太長而造成ANR,添加顯示的流暢性,特別是像Li

誰動了我的特征?——sklearn特征轉換行為記錄

blog selection clas 意義 print encoder 分享 steps 轉換函數 目錄 1 為什麽要記錄特征轉換行為?2 有哪些特征轉換的方式?3 特征轉換的組合4 sklearn源碼分析  4.1 一對一映射  4.2 一對多映射  4.3 多對多映

[Android開發] Android Studio問題以及解決記錄

bool found contex -i 設置 o-c mave expect andro http://blog.csdn.net/niubitianping/article/details/51400721 1、真機運行報錯Multi dex requires Buil

在CentOS6上編譯安裝實現LAMP(php-modules)+phpMyAdmin安裝過程記錄

輸出 dev 補充 server log tab cif web 必須 php與apache協作有三種模式:CGI、modules、FastCGI。  在CGI模式下,用戶請求php文件時,apache會啟動響應進程,調用php處理器處理請求,然後將結果返回給客戶端。用

在CentOS7上通過RPM安裝實現LAMP+phpMyAdmin過程記錄

isp -s 管理工具 gpgcheck b2c link 5.5 art http 在CentOS7上通過RPM安裝實現LAMP+phpMyAdmin過程全記錄 時間:2017年9月20日 一、軟件環境: IP:192.168.1.71 Hostname:centos73

在CentOS7上配置MariaDB-Galera-Cluster過程記錄

base table inf replicat connect 全局 lec sig 5.5 在CentOS7上配置MariaDB-Galera-Cluster過程全記錄 MySQL or MariaDB Replication之Galera Cluster Galera