トラブル解析

昨日のZaurus SL-C3100のトラブル(id:Hie:20060113)について,わかったことに限って報告します.

マイクロドライブが勝手に停止する

わかりました.BluetoothのCFアダプタ以前の問題でした.直接の要因はこれでしたが.
PCMCIAマネージャ(cardmgr)が原因のようです.つまり,Bluetoothアダプタ(CFBT02I)が挿入されると,PCMCIAのマネージャがリスタートされるのですが,このとき,cardctl ejectと同様の操作が実行,insertされません.つまり,PCMCIAマネージャが勝手にマイクロドライブを停止させていることになります.うへあー.ぶっちゃけた話,/etc/rc.d/init.d/pcmcia restartしただけで止まります.ぶ.

ちなみに,私はPCMCIA周りのことは全然知らないので,解決法はわかりませんでした.素朴な解決として,/etc/rc.d/init.d/pcmciaに insert と mount の命令を書いてみましたが,/etc/rc.d/init.d/pcmcia restartのときは対応できましたが,CFなBluetoothカードをさしたときには対応できませんでした.たぶん別のところでPCMCIAマネージャが動いている??

ZaurusパッケージさんのところからいただいてきたBlueZ動かず

はい,動きませんでした.rfcomm0がね.それ以外はちゃんと動作しましたよ.とりあえず確認したのはBluetoothマウスだけですが.
GPSも,実のところ,/dev/rfcomm0にはちゃんとNMEAなデータが流れているようなのですが*1,qpeGPSを起動するとデータが突然止まり,BlueZはハングアップ./etc/rc.d/init.d/bluetooth stopをしてもエラーをはきます*2.また,hcitool scanしても,クエリに対して応答がないというエラーが流れました.
ちなみに,qpeGPS以外は大丈夫でした.モバイルマップNaviから直接/dev/rfcomm0を叩いてみると,ちゃんと動作してることが確認できましたしね.

ZaurusパッケージさんのBlueZを入れた後

今まで動いていた(id:Hie:20051229で紹介した)BlueZを入れ直しても動作しなくなりました.qpeGPSでロードした瞬間ハングアップします.なんでじゃあー.

しかし,私はそんなこともあるかな,とおもって,BlueZを入れる前のROMデータをNANDバックアップしておいたのでした.

結論

結論として,何も解決しておりません.
何か知ってる方,教えてください(ぐはー

全面的に俺が悪かった

すみません,私が間違っていました.

ZaurusパッケージさんのBlueZで問題ありませんでした.
何を間違っていたのかというと,私はqpeGPSパッチを当てたバイナリである,qpegpsとgpsdを利用していますが(参考),公開されているパッチの当たったqpegpsとgpsdのバージョンは0.9.2.3.1でした.私は何故か,本体バージョン0.9.2.2を使っていました.どうやら,qpegpsとgpsdのダウンロードリンク周辺に0.9.2.2の話題があったため,勘違いしてインストールしてしまったようです.
というわけで,

  • SL-C3100
  • Bluetooth GPS Receiver BT-338
  • qpeGPS 0.9.2.3.1 + patched qpegps and gpsd
  • bluez-libs_2.23
  • bluez-utils_2.23

という組み合わせで,GPSを利用できましたとさ.

ちなみに,

マイクロドライブが止まってしまうことについての対策は何も考えてません…どうしよ.
=> 対策できました.(06/06/03)

またまた追記

やっぱり,なんだかBlueZが安定しません.よく止まる.
rfcommに関してはqpeGPSのほうに問題がありそう.
結局,qpeGPS 0.9.2.3 に 0.9.2.3.1のパッチを当てたgpsdとqpegpsを使っています.バージョンが違うけれど,なぜか一番安定してます.なんででしょ.

やっぱり追記

qpeGPSを起動する前に,gpsdを起動しておけばよいらしいですね.
つまり,

# gpsd -p /dev/rfcomm0 -s 38400

してからqpeGPSを起動すればあっさりとBT-338とコネクトできました.

まぁ,そのうち,どういうケースだとどういうエラーがでるのかまとめたいと思います.時間があればですけれど.

マイクロドライブが停止してしまう件について(06/06/03追記)

原因は,resume-bluezにあります.
サスペンド状態から復帰するとき,/etc/apm.d/resume/以下のbluetooth関連の設定を読みますが,このとき,cardctlを使ってPCMCIAをリロードしています.ところが,どのPCMCIAスロットかを指定していませんので,間違えてマイクロドライブを停止しようとするのです.しかも,どういったことか,マイクロドライブが停止するだけで復帰すらしてこない*3
したがって,/etc/apm.d/bluetooth*4のリロード部分を

cardctl eject 2
cardctl insert 2

とすれば解決です.2とはSL-C3100のCFスロットを指しています.
また,これにより,resume出来ていなかったBluetoothアダプタがちゃんと,サスペンド後に復活するようになりました.

…なんで今まで気づかなかったんだろう??

なお,このお話,SL-C3000SL-C3200でも同様と思います.

*1:cat /dev/rfcomm0で確認できました.

*2:どんなエラーだったかは忘れた.

*3:おそらく,cardctl ejectで停止させて,すぐにinsertしているのだが,マイクロドライブの反応が間に合っていない?

*4:suspend/ と resume/以下にシンボリックリンクを張っています.