現在iPAQ用のディストリビューションとして、以下のものがあります。
もっとも広く使われているディストリビューション。WindowsCEを消して、FlashRAM上にインストールする。最新バージョンは0.6です。
Familiarを拡張した形のディストリビューション。FlashRAMには入りきらないので、MicroDriveかNFSが必要になる。
CFからブートできる日本のディストリビューション。9/9からオープンソースになりました。
「Melon バージョン 2
より、オープンソースソフトウェアとしてのみ
公開することといたしました。 これに伴い弊社による製品販売、
及び今後の開発、本サイトの更新は終了させていただきます。」
HandHelds.orgのFTPサイトからクロスコンパイル環境がダウンロードできる。また、emdebian (The Embedded Debian Project) の "Cross Development Environments" から RPMやdebパッケージ になっているものを入手できる。
実際にコンパイルするときは、環境変数を設定する必要がある。
| setenv AR /skiff/local/bin/arm-linux-ar setenv AS /skiff/local/bin/arm-linux-as setenv CC /skiff/local/bin/arm-linux-gcc setenv CXX /skiff/local/bin/arm-linux-c++ setenv CPLUS /skiff/local/bin/arm-linux-g++ setenv GXX /skiff/local/bin/arm-linux-g++ setenv LD /skiff/local/bin/arm-linux-ld setenv NM /skiff/local/bin/arm-linux-nm setenv RANLIB /skiff/local/bin/arm-linux-ranlib setenv STRIP /skiff/local/bin/arm-linux-strip setenv CFLAGS -fpermissive setenv OSTYPE linux setenv MACHTYPE armv4l setenv PLATFORM_TYPE linux_armv4l setenv HOSTTYPE armv4l-linux set path = ($path /skiff/local/bin) |
CFLAGSに-fpermissive
オプションを入れているのは、C++プログラムをコンパイルするときANSI完全準拠だとip_opts構造体問題にひっかかるため。
ip_opts構造体は、同じ名前のメンバー変数を持っている。ANSI Cでは問題ないが、C++だと駄目。
カーネルのtarballは、HandHelds.orgからCVSを使ってとってきましょう。
コンパイルは、上のクロスコンパイル環境を使います。
% cp arch/arm/def-config/h3600 .config
/boot/
以下に適当な名前でコピーして,bootldrで
> set kernel_filname=/boot/filename
と指定します.
コンパイルしたカーネルは、Familiarディストリビューションの時と同じく、FlashRAMに書き込みます。
ただ、Familiar0.4のインストールで設定するカーネル領域のサイズで512kBは小さすぎるので、768kBに設定しなおしましょう。rootも焼き直しです。
iPAQのサウンドドライバは二種類ある。
旧:sa1100-uda1341.c
新:bitsy-uda1341.c、sa1100-audio.c
新しい方がヨサゲだが、8-bitサウンドを使おうとするとKernel Panicする。古い方なら一回だけ大丈夫なので、直接 .configファイルを編集して、
CONFIG_SOUND_UDA1341=m
を追加する。使うたびにrmmod&insmod必須。
iPAQで、Polycom社のViewstationや、Microsoft社のNetMeetingとビデオ会議をすることができます。
openh323.orgから、ohphone、h323、とpwlibライブラリのソースコードをダウンロードします。
この三つをクロスコンパイル環境でコンパイルすれば、ohphoneを使ってビデオ会議ができます。
私がコンパイルしたバイナリを置いておきます。
ohphone - 実行バイナリ
libh323 - ライブラリ
libpt - ライブラリ
LD_LIBRARY_PATHに入っている場所にlibh323とlibptをいれて、ohphoneを起動すれば動きます。詳しい使い方はohphoneのヘルプを見てください。
使う際は8-bitサウンドの項も見てください。

Dual PCMCIA Card Sleeveが使えるようになったのは、カーネル2.4.6からで、Familiar0.4では使えません。モジュールは、h3600_generic_sleeve、h3600-sleeve、sa1100_csの三つ。
/etc/init.d/pcmciaのスクリプトに、
| start) 中略 /sbin/insmod $PC/pcmcia_core.o $CORE_OPTS /sbin/insmod $PC/$PCIC.o $PCIC_OPTS /sbin/insmod h3600-sleeve /sbin/insmod h3600_generic_sleeve /sbin/insmod $PC/ds.o 中略 stop) 中略 /sbin/rmmod ds /sbin/rmmod h3600_generic_sleeve /sbin/rmmod h3600-sleeve /sbin/rmmod $PCIC /sbin/rmmod pcmcia_core |
を追加する。
wlan-ngパッケージをダウンロードして、
#ipkg install ファイル名
以上。
wlan-ngというプロジェクトのソースが必要です。Handheld.orgからもCVSで取ってこれるが、古くてコンパイルできない。本元から取ってくる必要あり。また、コンパイルするためにpcmcia-csも必要。
コンパイルしたカードはDual-sleeveだと動くけど、他のsleeveだと以下のメッセージが出て動かない場合がある。
| cardmgr[74]: initializing socket 0 cardmgr[74]: socket 0: CF WLI cardmgr[74]: executing: 'modprobe prism2_cs' init_module: prism2_cs.o: 0.1.10 Loaded init_module: dev_info is: prism2_cs prism2_cs: GetNextTuple: No more items prism2sta_config: NextTuple failure? It's probably a Vcc mismatch. prism2sta_event: prism2_cs: Initialization failed! cardmgr[74]: get dev info on socket 0 failed: Resource temporarily unavailable |
これはその他のsleeveが、各カードにかかる電圧を報告しないため[1]。そのため、CIS(Card Information Structure)が不完全になり、初期化ができない。
解決するには、別の方法でCIS情報を補完する必要がある。pcmcia-csパッケージに含まれているdebug-toolsの、dump_cisとpack_cisを使う。
まずDual-sleeveにカードを刺し、dump_cisでカードのCIS情報をとる。
Socket 0: |
強調した部分が問題で、ここの情報がうまく取れないため失敗する。
このファイルの必要な部分だけを取り出してカード名.cisを作る。
|
WLI-CF-S11G.cis
|
# The card doesn't need this for dual-sleeve, |
電圧は、cardctl statusなどで確認。pcmciaで利用するためには、まずこのファイルをpack_csで圧縮する。
# pack_cis -o カード名.dat カード名.cis
datファイルを/etc/pcmcia/cisにコピーして、/etc/pcmcia/configのカードのエントリでファイルを指定する。
|
WLI-CF-S11Gの場合
|
card "BUFFALO WLI-CF-S11G 11Mb/s WLAN Card" |
*これをすると逆にDual-sleeveで動かなくなります。根本的な解決方法は、pcmcia-csのソースをいじくることです。

CF-GPSはノートブックのLinuxなどでは設定の必要なく動きます。
iPAQで問題なのは、刺したときにデバイスファイルを作るMAKEDEVと、シリアルのコンフィギュレーションをするsetserialがないことです。
これはただのシェルスクリプトで、指定されたデバイス名でデバイスファイルを作成します。中身はmknodを呼び出しているだけです。ノートのLinuxに刺したときにできるノードと、同じものを作ります。
#mknod /dev/ttyS0 c 4 64
ソースをとってきて、クロスコンパイル環境で./configureとmakeをすればOKです。単純なプログラムなので、すんなりコンパイルが通ります。
これで、/dev/ttyS0をcatすると、NMEA-0183形式でデータが流れてきます。実際に使う時は、gpsdなどを通して利用するといいかもしれません。
iPAQのFlashRAM上で使われているファイルシステムはjffs2(Journaling Flash FileSystem 2)。mkfs.jffs2というツールで、このファイルシステムのイメージを作れる。MTDのCVSからとってくるか、ここからバイナリをとってくるか。
使い方:
# mkfs.jffs2 -r dir-to-image -o output-file.jffs2 -e 0x40000 -l -p
「-e 0x40000」と指定しているのは、iPAQでのflashRAMのブロックサイズは256kBのため。
Blackdownのサイトにruntimeあり。
Familiar v0.53からipkgでインストールできる。
特に問題なくインストールできる。
調査中…