2011年12月17日土曜日

GPSログ問題の補足

某経由で問い合わせが何件かあったので、問題の詳細をここに書いとく。

IdeaPad A1 ビルド番号A107W0_A234_001_010_2375_ROWで発生する問題。
(US版A107W0_A234_001_010_2375_USでも同様に発生する。おそらく、2375版固有の問題)

■問題点の詳細

GPS機能を有効にすると、GPSメッセージを処理するサービスが動き出す。
このとき、このサービスは
/system/etc/gps/glconfig.xml
によって初期化され動作する。
問題は、このglconfig.xml の中の設定属性の中に
cLogEnabled="true"
という指定がある。
これは、サービスの動作ログを取得保存するためのスイッチで、ログは、
acLogDirectory="/data/gps/log"
要素にて指定されている場所に作成される。
当該ファームでは cLogEnabled が true になっているので、ログを取得する設定になっている。
つまり、GPSを動作させると、/data/gps/log ディレクトリ以下に、GPSログが書き込まれていく。

ログの内容は具体的にどのようなものかと言うと、
09:53:12.210 NVRAM directory [/data/gps/] created (0:Unknown error: 0)!
09:53:12.210 OpenFifo: Created new fifo [/cache/glgpsctrl].
09:53:12.210 OpenFifo: Opened "/cache/glgpsctrl"
09:53:12.210 GpsHalInit: SuplLog Path :
09:53:12.210 GpsHalInit: SuplLog Disable
09:53:12.211 SUPL: Certificate Path :
09:53:12.211 SUPL: TLS enable = 1
09:53:12.299 SUPL: Certificate Path :

09:55:59.690 &******* GL_NMEA[0][$PGLOR,0,HLA,******.**,L,,Al,,A,,H,,,M,0,Ac,0,Gr,0,S,,,Sx,,,T,0,Tr,,Mn,0*3B
09:55:59.690 &******* GL_NMEA[0][$PGLOR,0,PPS,******,******.***,,,,,*1F
09:55:59.690 &******* GL_NMEA[0][$GPGSV,3,1,10,01,**,***,,11,**,***,,28,**,***,,32,44,114,*7F
09:55:59.690 &******* GL_NMEA[0][$GPGSV,3,2,10,20,**,***,,08,31,***,,19,30,***,,17,17,***,*7B
09:55:59.690 &******* GL_NMEA[0][$GPGSV,3,3,10,07,17,***,,03,04,***,*7E
09:55:59.690 &******* GL_NMEA[0][$GPGSA,A,1,,,,,,,,,,,,,***.0,**.0,**.0*35
09:55:59.690 &******* GL_NMEA[0][$GNGSA,A,1,,,,,,,,,,,,,***.0,**.0,**.0*2B
09:55:59.690 &******* GL_NMEA[0][$QZGSA,A,1,,,,,,,,,,,,,***.0,**.0,**.0*29
09:55:59.690 &******* GL_NMEA[0][$GPRMC,******.**,V,,,,,,,******,,,N*74
NMEAメッセージはGPSチップから送られるたびに書き込まれるので、GPS動作時毎秒1Kbyte弱のログが書き込まれる計算になる。

問題は、
このログが /data/ 領域に書き込まれていくということ。
/data はアプリをインストールするのに使用される領域でもある。
Androidで言うところの内部ストレージに当たる部分で、アプリがインストールされるたびに消費される。
このログが有効であると言うことは、アプリをインストールするための領域がGPSを使用するたびにどんどん消費され、狭くなってしまうと言うこと。
しまいには、いつの間にかアプリがインストールできなくなってしまったり、動作に支障をきたすことになる。

しかも、たちが悪いことに、
/data/gps/log ディレクトリはroot権限で作成されるため、普通に削除ができない。
ずっと残ったままなのである。

■問題の解決方法

手動で解決するにはroot化が必須となる。

●ログを取らない設定にする
  • shellよりsu、/system をrwリマウント。
  • /system/etc/gps/glconfig.xml のcLogEnabledを"false"に書き換え
  • /system をroリマウント。
●/data/gps/logを削除する
  • shellよりsu、/data/gps/log を rm
patch-del_gpslog_signed.zipは上記と同等の処理を実行しているにすぎない。
中華版新ファームではログを取らない設定に戻されているので、今後のバージョンアップで修正される可能性が高い。
しかし、すでに作成された /data/gps/log が削除されるのか疑問である。


以上。

0 件のコメント:

コメントを投稿