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