android のlogの見方と出し方
android のlogの見方と出し方Radio周りのログ$ logcat -b radio | grep -e RILD -e RILC -e RILJ | grep RADIO E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH_CHANGED D RILJ : [3835]> RADIO_POWER on = false [SUB0] D RILJ : [3835]< RADIO_POWER [SUB0] I RILC : RIL_SOCKET_1 UNSOLICITED: UNSOL_RESPONSE_RADIO_STATE_CHANGED length:0 D RILJ : [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED radioStateChanged: RADIO_OFF [SUB0] E RILD : OnRadioStateChanged: RADIO_OFF : mIsDeviceReadyNotiNeed = NOT_CONNECTED D RILJ : [3836]> RADIO_POWER on = true [SUB0] E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH_CHANGED I RILC : RIL_SOCKET_1 UNSOLICITED: UNSOL_RESPONSE_RADIO_STATE_CHANGED length:0 D RILJ : [3836]< RADIO_POWER [SUB0] D RILJ : [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED radioStateChanged: RADIO_ON [SUB0] 最初のE,D,Iの文字は以下のログのFunctionと対になっている ALOGV(),ALOGD(),ALOGI(),ALOGW(),ALOGE() I...InfoレベルV...VerboseレベルD...DebugレベルW...WarningレベルE...Errorレベル ちなみに、Google(AOSP)と違いスマホメーカーのエンジニアさんはIやVやDの代わりにEを使っているケースが多く、Eが出ているからといってかならずしもエラーとは限らない。彼らは、デバッグ用の出し方が分らないのか面倒くさいなのか分からないが、ログ出力用に単にLOGE()を使っているだけだから。 上記のNET-MGRの行もproprietaryのモジュールからのログ出力、なぜかEになっている。 次のRILJ,RILDはTAG(タグ)の記述 ソースの中で以下のように記載している箇所が該当する #define LOG_TAG "RILC" ちなみにRADIO周りは、流儀として ・Javaソースなら RILJ・c(cpp)ソースなら、RILC として定義しているようである。 ソースでのログ出力を有効にする方法 .cやcppで以下の1行を入れる #define LOG_NDEBUG=0 このやり方もあるけど Android.mkで LOCAL_CFLAGS += -DLOG_NDEBUG=0 を入れた方がソースに手を入れずに済むので使いやすいちなみにLOG_NDEBUG=0のゼロはログのすべてを出すという意味になる。入れないとALOGD(),RLOG()とソースの中に入れても出力されない。 機内モードをONからOFFにした際のログ$ logcat -b radio | grep -e RILD -e RILC -e RILJ | grep RADIO <01) D RILJ : [3835]> RADIO_POWER on = false [SUB0]02) D RILJ : [3835]< RADIO_POWER [SUB0]03) I RILC : RIL_SOCKET_1 UNSOLICITED: UNSOL_RESPONSE_RADIO_STATE_CHANGED length:004) D RILJ : [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED radioStateChanged: RADIO_OFF [SUB0]05) E RILD : OnRadioStateChanged: RADIO_OFF : mIsDeviceReadyNotiNeed = NOT_CONNECTED06) D RILJ : [3836]> RADIO_POWER on = true [SUB0]07) E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH_CHANGED08) I RILC : RIL_SOCKET_1 UNSOLICITED: UNSOL_RESPONSE_RADIO_STATE_CHANGED length:009) D RILJ : [3836]< RADIO_POWER [SUB0]10) D RILJ : [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED radioStateChanged: RADIO_ON [SUB0]11) D RILJ : [3848]> RIL_REQUEST_VOICE_RADIO_TECH [SUB0] 機内モード=ON01)JavaソースからリクエストとしてRADIO_POWER パラメータにoffを入れて送る03-05)モデムの状態が変わったと応答が来る(OFFになったと応答) 機内モード=OFF06)JavaソースからリクエストとしてRADIO_POWER パラメータにonを入れて送る08-10)モデムの状態が変わったと応答が来る(ONになったと応答) モデムの電源ONOFFは、Functionの中でリクエストを投げてずっと待つという処理ではなく、応答を受ける処理が別にある形になっている。 投げてすぐに応答が返ってくるわけではないのだけどアンテナピクトのアイコンはリクエストと同時に飛行機マークになっているらしい。 異常な時$ logcat -b radio | grep -e RILD -e RILC -e RILJ | grep RADIO < D RILJ : [3915]> RADIO_POWER on = true [SUB0] E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH_CHANGED I RILC : RIL_SOCKET_1 UNSOLICITED: UNSOL_RESPONSE_RADIO_STATE_CHANGED length:0 D RILJ : [3915]< RADIO_POWER [SUB0] D RILJ : [UNSL]< UNSOL_RESPONSE_RADIO_STATE_CHANGED radioStateChanged: RADIO_ON [SUB0] D RILJ : [3927]> RIL_REQUEST_VOICE_RADIO_TECH [SUB0] E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH E RILD : NET-MGR: EVENT_VOICE_RADIO_TECH_DONE D RILJ : [3927]< RIL_REQUEST_VOICE_RADIO_TECH {3} [SUB0] D RILJ : [3933]> RADIO_POWER on = false [SUB0] D RILJ : [3935]> RADIO_POWER on = false [SUB0] D RILJ : [3937]> RADIO_POWER on = false [SUB0] D RILJ : [3939]> RADIO_POWER on = false [SUB0] D RILJ : [3941]> RADIO_POWER on = false [SUB0] D RILJ : [3933]< RADIO_POWER error 2 [SUB0] D RILJ : [3935]< RADIO_POWER error 2 [SUB0] 手作業で機内モードのON/OFFを繰り返しているだが、なぜか、RADIO_POWER on = trueは出ずに、RADIO_POWER on = false だけになっている。つまり機内モード=ONだけを送り付けている形になっている。また、UNSOL_RESPONSE_RADIO_STATE_CHANGED も返ってきていない。 試しに、device/samsung/smdk4412-qcom-common/include/telephony/ril.hをhardware/ril/include/telephony/ril.hに上書きコピーしたところ hardware/ril/reference-ril/reference-ril.cがコンパイルエラー。 smdk4412-qcom-commonのril.hを参照していなかったこと。 ril.hは、2つの構造体でsamsungとqcomで違いが出ている/** Used by RIL_REQUEST_DIAL */typedef struct {.... RIL_UUS_Info * uusInfo; /* NULL or Pointer to User-User Signaling Information */- int reserved; /* qcom's ril library Dial structure has extra 4 bytes */ } RIL_Dial; typedef struct {.... RIL_PinState pin2;+ int foo1; /* Samsung */+ int foo2; /* Samsung */+ int foo3; /* Samsung */+ int foo4; /* Samsung */+ int foo5; /* Samsung */ } RIL_AppStatus; 結局、gps.h, ril.h もROM側のソースに上書きコピーし、reference-ril.cを修正することになった。reference-ril.cは、この構造体にそって、foo1からfoo5の箇所に0,0,0,0,0を加えてコンパイルする。