再構築、もろもろ


カーネルの再構築に言うほどの問題はなかった。 気をよくして qtopia の rebuild に入ってみれば ── Debian 環境では果てしなく泥沼だった。理由は 3 つ。

Qtopia for i386 with Sharp Qt

Debian の Qt を適当につっこんで qtopia を rebuild すれば QTDIR がないとのたまいし。${QTDIR}/ に include やら lib やら bin やら Qt 関連ファイルが ぜんぶそろってるはずと qtopia の Makefile は主張するが Debian では /usr/include/qt, /usr/lib, /usr/bin にばらばらに置かれていて QTDIR に何を指定していいかわからない (後述)。

では本来はどーなってるのかと宝箱から SDK 拾って deb に変換してインストール、 /opt/Qtopia/ に入った。 これなら確かに QTDIR=/opt/Qtopia/ すればいけそうだ。 ためしに i386 向けにセルフ構築。

% cd /home/src/zaurus/Qt
% zcat qtopia-free-1.5.0.tar.gz | tar -x
% cd qtopia-free-1.5.0
% QTDIR=/opt/Qtopia QPEDIR=/home/src/zaurus/Qt/qtopia-free-1.5.0 ./configure
% QTDIR=/opt/Qtopia QPEDIR=/home/src/zaurus/Qt/qtopia-free-1.5.0 make  |& tee ../make.log

すると、library/backend/ 下の yacc vcc.y のところで落ちる。 なんとこのファイルだけファイルの行末が CR LF 型なので CR を剥ぎ取るほか、 vcclex が未宣言といって怒られるので、vcc.tab.c の先頭のほうに

   static int vcclex();
を加えた。あとは何ということもない。 qtopia-free-1.6.0-snapshot も同様に出来た。
ただ、 1.5.0 も 1.6.0 も Qt/Embedded 3.0.x には対応していない雰囲気。 Makefile には qte3 の記述があるのに。 なるほどそれで SL-A300 が出たのが Qt 3.0.3 の登場以後なのに Qt 2.3.2 積んでんのね。

Qtopia for i386 with Debian Qt

Debian のバイナリを使うにも QTDIR 作るのがやはり早道と /usr/local/qt 作ってここから symlink をあちこちに張ってるうちに /usr/share/qt なる存在に気付いた。/usr/share/doc/libqt2/README.Debian によれば、ここが Debian での QTDIR とのこと。

この QTDIR=/usr/share/qt でうまくいけば問題ないのだが、これがよく止まる。 直した点は以下のとおり:

build がおわったあとで libqt-dev を入れて (libqt-emb-dev は追い出される)、

% qvfb -depth 16 -width 240 -height 320 &
% cd /home/src/zaurus/Qt/qtopia-free-1.5.0/bin
% QTDIR=/usr/share/qt QPEDIR=/home/src/zaurus/Qt/qtopia-free-1.5.0 ./qpe  -qws -display QVFb:0

すると qtopia on qvfb が起動した。
メニューとか既に日本語なんだけど、そういうもん? qtopia 自身が locale 持ってるとは思えないから、kde-i18n-ja か何かを参照してんのかしらん。
と思ったら、qtopia に ja な locale が入っていた。おみそれしました ...

Qt/Embedded for arm

Debian の Qt で qtopia の build が通れば Qt for i386 自身の rebuild test は必要ない。 定義によって dpkg-buildpackage 一発でおしまいである。すっとばして arm 用のクロスのテストへ。

こっちのケースでは PATH に /opt/Embedix/tools/bin/ を入れておいた。 なんか意志不徹底かも。

% export PATH=/opt/Embedix/tools/bin/:${PATH}
% export QTDIR=/home/src/zaurus/Qt/qt-embedded-2.3.2
% ./configure -xplatform linux-sharp-g++
ちなみに platform 指定の "linux-sharp-g++" はおそらく SL5000 系 (フレームバッファが landscape ... なんだよね?) で、 そのままでは SL-A300 (フレームバッファが portrait) では動くまい。 実際の configuration は linux-ipaq-g++ とのちゃんぽんになるだろう。 中見たらいろんなデバイス叩きまくってて、はたして (フレームバッファ以外は) SL5000 と同じなんかぁ ... と思うような部分もあるんだけど。

gif はともかくとして zlib, jpeg, png については Qt 内/外を選べる。 さてどれだろう ── ということで SL-A300 の ROM ん中を覗いて、 libjpeg 発見、png の名前を libqte の中に発見。たぶん -system-jpeg だけかな。 zlib は error コードのみで未サポート、たぶん。もっとも config に入ると せっかく人がいろいろ手で指定したのに

Choose a feature configuration:

  1. Minimal (630 kB)
  2. Small (960 kB)
  3. Medium (1.5 MB)
  4. Large (3 MB)
  5. Everything (5 MB)
  6. Your own local configuration (src/tools/qconfig-local.h)
などと訊いてきて、ぜんぶ自動かい。 ためしに 1 (← build に時間かからなさそう) で make してみたらコンパイルエラーで落っこちた。をいをい。

ところで、このメニューには "src/tools/qconfig-local.h" なるヤな名前がある。 まさかと思い近所を覗けば qconfig-*.h に付け外し可能な機能定義が山と並んでいた。 google で当たると 機能定義一覧 もあった。

Minimal 〜 Everything も 、ようするにこれらの取捨選択になってるだけで、 SL-A300 の本物の function って ... もしかしてしなくても 1 〜 5 のうち どれでもない(自前カスタマイズ)可能性があるのだな。

とりあえず qtopia のほうを読めば、それっぽいのがあったのでこちらから。

% patch -p0 < ../qtopia-free-1.5.0/qt/qte232-for-qpe150.patch
% cp ../qtopia-free-1.5.0/qt/qconfig-qpe.h src/tools/qconfig-local.h
% ./configure -xplatform linux-sharp-g++
% make
... で同じのが出来ればそれにこしたことはないが、(libqsfepj.so の対応部分をおくとしても) そんな訳はなかろうということで出来たファイルを本物と比較する。
% strings /home/src/zaurus/rootfs/root/usr/QtPalmtop.rom/lib/libqte.so.2.3.2 | sort > rom.list
% strip --strip-all lib/libqte.so.2.3.2
% strings lib/libqte.so.2.3.2 | sort > rebuild.list
% diff -u rom.list rebuild.list
つらつら眺めると多少出入りがある。最終的に qconfig-local.h
-#define QT_NO_CODECS
+// #define QT_NO_CODECS
し、config では
 ./configure -xplatform linux-sharp-g++ -no-qvfb -no-vnc -gif -system-jpeg
した。さらに
Choose pixel-depths to support:

   v. VGA-16 - also enables 8bpp
   4. 4bpp grayscale - also enables 8bpp
   8. 8bpp
  16. 16bpp
  24. 24bpp - also enables 32bpp
  32. 32bpp

Each depth adds around 100Kb on 80386.

Your choices (default 8,16):
と訊いてくるので、16,32 と答える。16 だけでいいはずだが、ROM の libqte.so.2.3.2 にはどーやら 32bpp のコードが入っている。なぜ入ってるかまでは分からないが、 gif 対応のところで 16bit bmp への非対応メッセージを新たに組み込んだところをみると、 32bit bmp がどこかで使われてるのかもしれない。 この他 qtooltip 周りと wordwrap 周りに手が入ってる様子だった (SL-A300 向け konqueror でワードラップが本家 Qt のケースと挙動が違うのは、 要するに libqte for SL-A300 のバグってことかい!)。 特に TOOLTIP 関連はどーなおしてもうまく一致せん。何をいじったんだろう。 ファイルサイズは各々↓な感じ:
% ls -l
-rwxrwxr-x    1 root     root      4126556 Jan  1  1970 libqte-rom.so.2.3.2
-rwxr-xr--    1 kensyu   users     4086712 Oct  6 19:21 libqte-rebuild.so.2.3.2
開発環境用としては
 ./configure -xplatform linux-sharp-g++ -gif -system-jpeg
するが ... ま、こっちは略。


[日記へ] [目次へ]