しょうがねぇ、タッチパネルデバイス真面目に読むか ... という前に タッチパネルを叩いてる /home/QtPalmtop/bin/qpe を qtopia-free のものに置き換えるテスト。 qpe の中でフックするためにはソースがないと困る。
そのまんまリプレースして動けばラクなことこのうえないが、 libqte-ja 突っ込んでハング(?)するらしいマシンが そんな可愛げのある動作をするはずがない。
タッチパネル、キーボード、サウンドは libqte, libqpe が非互換である可能性がある。
# ng /home/QtPalmtop/qpe.sh # ps x | grep qpe 6764 ? S 0:00 /bin/sh ./qpe.sh 6767 ? SN 0:36 qpe 6791 pts/2 S 0:00 grep qpe # kill -TERM 6767... でちゃんと新 qpe が立ち上がる。
qtopia-free まんまの qpe を立ち上げると当然のようにコケる。 そして qpe.sh は何度も何度も qpe を立ち上げようとして、最後には init が qpe.sh を動かすことを諦めて止まる。
この状態でも、高速起動モードになっている qtopia アプリケーションや リモートログイン中で使ってる ssh などは普通に生きている。あくまで qpe.sh, qpe が死んでるだけ。
したがって qpe.sh を書き直して本来の qpe が立ち上がる状態にしてから kill -1 1 すると 本来の qpe が立ち上がって正常復帰する。 この間、べつにリセットしたりなんだりするようなことはない。安心して何度もテストできる ... と思うし、実際リセットするはめになったことはないが、 常にちゃんと復帰できることを保証するものではない、もちろん :-)
# cd taskbar # rm *.o # makeでもういちど bin/qpe が作り直される。
さて、qpe を動かした時のエラーはというと:
だそうだ。... すまん、実は数字以外は正確にはおぼてないが、数字だけ合ってればよかろ。 10, 214 が何だと /dev の下を覗くと /dev/sharp_kbdctl だそーだ。modprobe: Can't locate module char-major-10-214
/dev/sharp_kbdctl を叩いてるのは libqte.
qtopia-free の qpe の内部にも /dev/sharp_kbdctl を叩いてる部分があるが、
... こっちをコメントアウトしても何も変わらんかった。
qpe が期待するものと libqte の実装が違うってことなら、qt-embedded の
src/kernel/qkeyboard_qws.o (/dev/sharp_kbdctl を叩いてるやつ)
を貰って来て static link してしまえってことで static link してみた。
can't locale なんとかいうエラーは出なくなった。
エラー出なきゃいいんかい、という突っ込みは不許可。 エラー出るようでは話にならんという段階。
その qpe, qpe.sh が止まってる最中に 覚えたばっかの技を使って、リモートから qpe を strace にかける:
# unset LOGNAME # strace qpeこれで strace のメッセージがリモートで読める。 すると alermserver のなんとかっつーシンボル(すまん、忘れた) が解決できねーとか Global::languageList() が解決できねーなどとのたまう。
... languageList まで手が入ってるって fep 関連か? このあたりは qtopia free の language がそのまま動いてただけに意外。
というわけで qkeyboard_qws.o 以外に alarmserver.o, global.o も qt-embedded から持って来て qpe に static link するとエラーなしに走った。
... 正常に起動した。終わり。
ペンその他は本来の libqte を叩いてるので正常に動く。あくまで qpe だけが置き換えられている。
もちろん alarmserver や language 周りはまた別。実際 suspend/resume でちゃんと復帰できない。