SDL on Zaurus (SL-5500) 初期

初期の試行錯誤の記録です。
Since: Dec. 14, 2002
Last updated: Dec. 14, 2002
[メインサイト] [ミラーサイト]

SL-5500 のセットアップ

なお、SL-5500 のセットアップについてはLinux Zaurus SL-5000D/SL-5500にまとまっている情報を参考にしました。

購入機器

購入機器 説明
SL-5500 Linux を搭載した Zaurus
LPC-CF-CLT CF の LAN アダプタ
HPC-SD128MY SD カード 128MB (Ext2 format)
SanDisk MemoryCard CF カード 512MB (VFAT format)

セットアップ

  1. Windows 2000 の環境に USB ドライバをインストールし、Zaurus と繋いで terminal, file manager, OpenSSH 等を入れます。
  2. 起動時に / を押して run level 選択画面を出し、a を押して Linux console が出るようにします。
  3. root で入り /etc/passwd を編集し、root のホームを書き込み可能なように /home/root にします。
  4. OpenSSH のインストール。ここで、最初実体のない SD card をインストール先に指定してはまりました。
  5. 初日は LAN アダプタがなかったので、How to set up an Ethernet over USB connection between the Sharp Zaurus SL-5000D and a Linux machine.を参考に、Linux 母艦へ USB-to-HOST でネットワーク接続してリモートログインしていたのですが、こちらの環境ではすぐに接続が切れるので、やってられません。しかも接続が切れると Zaurus をリブートしないと復旧しません。 USB ドライバに、uhci-alt ではなくuchi を使うことで解決しました。
    ifconfig usb0 192.168.129.200 netmask 255.255.255.255 up
    route add -host 192.168.129.201 usb0
    
  6. やってられないので、メルコの LPC-CF-CLT 購入しました。事前に動作確認ができなかったのですが、動作確認情報のある Planex の 10T よりずっとコンパクトで携帯に便利なのでチャレンジ。しかし、購入した後差してみるも認識しません。cardctl ident で manufucture ID を見て、以下のように設定したら認識されました。
    $ /sbin/cardctl ident
    Socket 0:
      product info: "BUFFALO", "LPC-CF-CLT", "R01"
      manfid: 0x026f, 0x0307
      function: 6 (network)
    Socket 1:
      no product info available
    
    /etc/pcmcia/config: に追加
    card "Buffalo LPC-CF-CLT Fast Ethernet"
      manfid 0x026f, 0x0307
      bind "pcnet_cs"
    
    /etc/pcmcia/network.opts: に追加
    *,*,*,##:##:##:##:##:##)
        INFO="LPC-CF-CLT"
        BOOTP=n
        DHCP=n
        start_fn () { /bin/mount /mnt/card; }
        stop_fn () { return; }
        IPADDR="##.##.##.##"
        NETMASK="##.##.##.##"
        GATEWAY="##.##.##.##"
        IF_PORT=
        DHCP_HOSTNAME=
        NETWORK=
        DOMAIN=
        SEARCH=
        MOUNTS=
        MTU=
        NO_CHECK=
        NO_FUSER=
        DNS_1="##.##.##.##"
        DNS_2=
        DNS_3=
        ;;
           
    
  7. また、便宜的に母艦のディレクトリを Zaurus から NFS mount し、SD card 代りに使います。
  8. ssh で入れるようにし、セットアップは終了。

SDLの導入

libSDL_1.2-0.2_arm.ipkがここにありますが、SDL と SDL_mixer のみでかつ最新かどうかも分からないし、どうせ自分で移植するつもりだったので、とりあえず無視します。

まず、移植して動きそうかの目処をつけます。
cat ### > /dev/fb0 で、frame buffer が使えることを確認。次に、サンプルプログラムを cross compile し、pthread が使えることを確認。
これで、少なくとも音以外はうまくいきそうな目処がつきました。で、SDL の cross compile を開始します。
なお、作業は母艦上の NFS export されている場所で行いました。

> setenv CC arm-linux-gcc
> setenv CXX arm-linux-g++

SDL-1.2.4

以下は、May. 20, 2002 の記録です。この時点では、SDL-1.2 で Qtopia 環境はサポートしていませんでした。

FB console で動かす場合

> cd SDL-1.2
> configure --host=i686-linux --target=strongarm-linux --prefix=/sdcard 
    --disable-video-dga --disable-arts --disable-esd --disable-alsa 
    --disable-video-x11 --disable-nasm --disable-joystick
> make
> su
> make install

で、SDL の適当なサンプルプログラムをリモートから Zaurus 上で実行。

# ./test
Couldn't initialize SDL: No available video device

うげげ。

# chmod a+r /dev/fb0

# ./test
Couldn't initialize SDL: Unable to open a console terminal

Zaurus のコンソールからログインし。

# ./test
Couldn't initialize SDL: Unable to open mouse

SDL のソースを見て。

# export SDL_NOMOUSE=1

# ./test
Couldn't set 240x320x32 video mode: No video mode large enough for 240x320

げげげ、240x320 は駄目だが 320x240 はいけるじゃん。しかし、サンプルプログラムを試したら、fb が飛んで何も表示されなくなりました。
ssh は繋がるので生きてはいるが、何も映りません。

SDL_ListModes( NULL, 0 ) と SDL_GetVideoInfo() で zaurus の画面周りを調べると

表示領域 0 0 320 240
画像メモリ 150K pixel BitsPerPixel 16 BytesPerPixel 2 
RShift b GShift 5 BShift 0 AShift 0
AMask f800 GMask 7e0 BMask 1f AMask 0

というわけで、bpp を 16 にすれば飛ばなくなります。プログラム終了後も、プロンプトに戻ることができます。
しかし、一般ユーザで実行する場合 Zaurus を起動する度に root で chmod a+rw /dev/fb0 しなければいけないのはうっとおしいです。
というわけで、無事 SDL から画面表示はできるようになりました。標準では90度半時計回りした状態が画面の定位置で、従ってパネルの左下が原点になっています。結局、まったく移植に関する作業を行う必要がありませんでした。
ONScripter にわざわざ画面90度回転を実装した私の努力は……。

ONScripterの導入(SL-5500 編)

Makefile.ARMLinux を作って、make。

zaurus 用に特に修正したことは、screen_surface の bpp を強制的に 16 にすることくらいです。他は Linux の挙動に準拠。

で、起動。普通に起動されます。最初は、freetype 2.1.0 のせいで文字が全て・になっていたのですが、freetype 2.0.9 を使えば問題ありません。画面効果やカーソルアニメーションも問題無く実行されます。

ただし、SMPEG を利用した MP3 演奏は異様に遅く、CPU を占有する上音もぶつぶつで全然駄目です。Zaurus 付属の mpegplayer だと途切れず演奏されるのですが、特定 CPU にチューンされていない浮動小数点演算を多用する SMPEG には荷が重いようです。

(May 26. 2002) MP3 デコーダを SMPEG から MADに差し換えるオプションを追加しました。整数演算で計算するため、これによってまともな MP3 演奏を聞きながらゲームができます。

最後にコンソール用の mixer を導入。(Qtopia 環境の場合不要)

setmixer
Makefile: 修正
CC=arm-linux-gcc
CFLAGS= -O6 -fomit-frame-pointer -Wall -pipe

> make
> su
> make install

ゲーム「ひとかた」で試しましたが、MIDI は特に途切れること無く鳴ります。と思ったら、同時発音数が多い個所は途切れますね。

また、某数種類のゲームで動作確認しましたが、(文字が小さくて読みづらいとかはありますが)特に問題ありません。

Qtopia 環境で動作するための作業(SL-5500編)(Aug 15. 2002)

というか、SL-5500 自体をもう2ヶ月くらい放っており、日本語環境にすらしていなかったので、その辺から設定を始めます。

  1. ROM を 2.38 にアップデート。
    http://www.myzaurus.com/ROMupdate4.aspから OSPACK をダウンロードし、CF のルートに置きます。そして、手順通り、CF を zaurus に差し、c と d と full-reset を同時に押すと、LED が2つとも点き、ROM のアップデートが開始されます。数分待ち LED が2つとも消えると終了ですが、なぜか fsck まわり(?)の warning が大量に出て止まりません。無視してもう一度 full-reset を押して再起動すると、問題なく立ち上がりました。
  2. OpenSSH を入れる。
    これがないと始まりません。ちなみに、環境を始めから設定し直しています。
    Zaurus Software Index から、openssh-3.2.3p1-arm-linux-1.tar.gz をダウンロード。root で入れるように、/etc/ssh/sshd_config で PermitRootLogin yes とします。
  3. アックスから手書き入力の ための 布目 for Qtopia をインストールします。
    > cd /mnt/card
    > tar zxf nunome-Qtopia-zaurus.tar.gz
    > ./install-sd.sh
  4. キーボード入力用の Input Method (anthy, imkit-anthy) 等zaurus-jaの成果物 を色々入れます。
    anthy_0.0.3114b-1sd_arm.ipk
    imkit-anthy_0.3.4-1_arm.ipk
    libqte-ja_2.3.3-2sd_arm.ipk