browncat.org
  Top 
     >Palm Gadgetry 
     自宅サーバを立ち上げよう! 
     Linuxのページ 
     blog@browncat.org 
     wiki@browncat.org 
 Palm Gadgetry
     Top/日記 
       過去の覚え書き 
 HowTo
     FreeBSD+PalmIII 
     pilot-mailの使い方 
     with rta50i 
     Network HotSync with Unix 
     CLIE NR70とLinux 
 Development
     gccでpalmware開発を 
     localizerの作り方 
     pilrc情報 
>    Palmware開発ツールメモ 
       私家版pilot-template 
     Prc-tools情報 
     TRGpro Memo 
 Other
     Favorite Palmware 
     PalmOS3.3で気になること 
 Software
     My Palmwareの倉庫 
       MailViewer 
       PoplDA 
       TinyDAs 
       Dhrystone 
       DAManager 
       LockApp 
       Syncit 
 Social Bookmarks
 逆Links
  派楽天地 (中国語) 
  VAIO, Palm, Linux, 連珠... 
  AB+ (ABPlus.com) 
  Hoshi's Palm OS Page 
  わ〜ぱほりっく 
  Palmfan 
  Upup Palm Load! 
  (順不同.ご一報下されば追加します) 
 Contact
  このサイトの作者にMail! 
 Search

Palmware開発ツールメモ

散文的に使用しているツール、注意点、参考リンクなどを書きます。
  1. FreeBSD/LinuxでPalmのアプリケーション開発を始めるのに必要なものは?
  2. prcファイルからリソースファイルを作成するには?
  3. あれば便利なツールなどは?
  4. チャレンジャーなもの(multilink) (prc-tools 2.0では不要)
  5. 32Kの壁 (crt0置き換え) (prc-tools 2.0では不要)
  • 2001/2/23 pilrceditを追加
  • 2000/11/15 私家版pilot-templateへのリンク作成
  • 2000/9/4 誤字修正など
  • 2000/7/13 prc-tools2.0でobsoleteな内容に注釈など追加
  • 2000/4/17 portsにprc-tools2.0が入ったので記述修正
  • 2000/1/22 prc-toolsがportsからの削除を受け記述修正
  • 2000/1/13 日本語の修正を少々
  • 1999/12/13 32Kの壁の間違いを訂正
  • 1999/11/5 誤字修正など
  • 1999/10/21 prc-tools,pilot-templateの説明追加。multi-linkを別扱いにした
  • 1999/10/16 作成

FreeBSD/Linuxで開発を始めるのに必要なものは?

pilot-link
ファイルのインストール/バックアップやアプリケーション対応の同期ソフトとそれらための通信ライブラリなどです。 ないとお話にならないのでインストールして下さい。 FreeBSD+PalmIIIでもフォローします。
pilot-linkはFreeBSDのportsコレクションからインストール出来ます。当然Linuxなrpmもあります。
prc-tools 0.5.0
gccなどの開発ツールとprc作成ツールなど。 具体的には gcc-2.7.2.2, binutils, gdbとそれらのPalmOS対応パッチです。 かなり古い環境なので次に説明する2.0を使用した方が良いでしょう。

FreeBSD 3.2R以前の場合
FreeBSDのportsコレクションからインストールしましょう。
FreeBSD 3.3R以降の場合
portsにはありません。インストール方法を prc-toolsでご紹介します。ご自分でコンパイルして下さい
と思っていたらいつの間にかprc-tools2.0が復活しています。portsに "prc-tools", "prc-tools-binutils", "prc-tools-gcc", "palmos-sdk"が入っています。これで以前のように(試してませんが)一発インストール可能ですね。
RedHat系Linuxの場合
0.5.0のrpmバッケージがあります。
Win32
0.5.0のバイナリパッケージがあります。
その他
ソースから頑張ってインストールして下さい(^^)

prc-tools 2.0
gccなどの開発ツールとprc作成ツールなど。最新版でマルチセグメント対応してます。 具体的には gccが2.95.2, binutils, gdbなどもバージョンアップしています。 なにより大きいのはPalm,Inc.がサポートしていることです。
浮動小数点まわりにバグがあるようで、フィックスが出ています。

FreeBSD portsの場合
prc-toolsが2.0で復活しています。portsに "prc-tools", "prc-tools-binutils", "prc-tools-gcc", "palmos-sdk"が入っています。これで以前のように(試してませんが)一発インストール可能ですね。
RedHat系Linuxの場合
Palm Incのdevzoneから2.0のrpmパッケージがダウンロードできます。
Win32
Palm Incのdevzoneから2.0のパッケージがダウンロードできます。
その他
ソースから頑張ってインストールして下さい(^^)

  • gcc
  • gas
  • ld
  • gdb -- シリアル経由でリモートデバッグ出来ます。
  • その他 binutilsのツールなど
  • pilrc v1.5 -- pilrcの古いバージョンも含まれています。
  • txt2pbitm -- エディタなどで書かれたテキスト形式のビットマップを リソースのビットマップの形式(=pbitm)に変換するツールです
あとは以下のツールが必須でしょう
pilrc

pilrcとはリソースファイルを作成するためのコンパイラです。 テキストで書かれたソースファイルをpilotで必要なリソースの形式に変換してくれます。 pilrcはprc-toolsにも含まれていますがかなり古いバージョンがインストールされます。 まず最新版に入れ換えましょう。 pilrc情報も読んでみて下さい。 日本語に対する不具合のパッチを公開しています。(現在の版(2.5b4以降)にはこのパッチは取り込まれています) インストールの手間は展開->コンパイル程度です。
なをGUIでリソースの出来栄えを確認できるツールpilrcuiというのがついてきますが, これを入れるにはgtkが必要です。 開発にどうしても必要なわけではないので, うまくインストールできなければpilrcuiは入れなくても問題ないと思います。

pilot-template

pilot-templateとはPilotプログラムのテンプレートを作成してくれる perlスクリプトです。 引数にアプリ名などを渡して実行するとなんにもしないプログラムとリソース、アイコンなどを作成してくれます。
バークレイ大学のISAACグループのページ Pilot stuff from the ISAAC Groupで GPLに従って配布されています。
とても便利なのですがほんのちょっとだけ不満があります。 CALLBACK_PROLOGUE,EPILOGUEに';(セミコロン)'をつけてくれないのです。 Emacsでindent-regionなどとやるとインデントが崩れてしまいます。 私はpilot-templateの中のcallback.hとEventHandlerの辺りをいじって使っています。
prc-tools2.0に対応していないので、書き換えが必要です。

このスクリプトはprc-tools0.5.0用なのでprc-tools2.0で使うには修正が必要です。 私家版pilot-templateのページを御覧下さい。


prcファイルからリソースファイルを作成するには?

Prc2pilrc
prcファイルをpilrcのリソースファイルに変換するツール。要Java
Presdec
prcファイルをpilrcのリソースファイルに変換するツール。要Java
これらは PalmCentral 辺りで 探せば見つかると思います。

あれば便利なツールなどは?

pbitmtopbm, pbmtopbitm

pbitm形式のビットマップデータとpbm形式とのデータの相互変換ツール そのままではエラーが出たのでUnofficialなportsパッケージを作成してみました。 pbitmtopbm.tgzをダウンロードして下さい。始めてのports作成なのでうまくいってなかったらお慰みです。

par

tarののりでpdb,prcファイルを覗き見ることができるツールです。 レコード単位にデータベースをばらしてバイナリファイルにしてくれます。 バグったプログラムが作った変なデータファイルなんかチェックするのにいいでしょう。

pilrcedit

pilrc形式のリソースをビジュアルに編集できるツール。部品を配置して画面のデザイン作成が出来ます。 Java環境下で動作します。日本語は使えないようです。 いままでもWindows用ではありましたが、これはJavaなのでマルチプラットホームで動作します。 Kondara Linux+JDK1.2.2で動作確認しました。


チャレンジャーなもの

以下の内容はprc-tools 2.0では不要です
MultiLink
par同作者のツール。prc-tools 0.5.0のgccでプログラムを作成する場合コードの大きさに制限があり32Kバイトまでしか使えないのです。頑張っても64K程度までです。これはあほな68000CPUの相対ジャンプオフセットが符合つき16bitでしか表現できないという制限からくるものです。(だいたい今どき,なんぼなんでも68000はないやろとか思いますね。せめて68020...^^)
本来、PalmOSはコードリソースをマルチセグメントにしてこの制限を 乗り越えるように設計されていますが, 現在のgccはそれをサポートしていません。 multilinkはこれを行なうものです。 開発の初心者さんなどには全くお勧めしません。積極的に避けた方がいいでしょう。チャレンジャー専用です。(などといいつつ私も試してません ^^;;)

32Kの壁

以下の内容はprc-tools 2.0では不要です
crt0 (C RunTime)を変更する
codeサイズ32Kの壁を越える方法の一つを御紹介します。 問題の詳細については本ページでは触れません。関連する事項のみ説明します。 詳しくは SRAの ほしさんのページ gccの32kの壁、 英語ですが GCC programming tricks for the PalmPilot辺りを参考にして下さい。解決方法とともに解説されています。

では、このページで説明する方法で改善できる点を説明します。
32K問題の一つはコードの先頭にあるcrt0からコードの最後にあるアドレスを参照しており、そのためのオフセット値が符合付き16bitであるという点にあります。

crt0とはCのスタートアップコードのことでPilotMainが呼ばれる前に PalmOSから呼び出されます。 このcrt0の中でcodeの最後の方にあるbhook*,ehook*というアドレスを参照しているのですが、その際PC相対アドレッシングでアドレスを取得しています。 DragonBall(=68000)のPC相対アドレッシングは符合付16bitを32bitに拡張してPCと加算する演算なので、結果的にPC+32K先までしかアクセスできないことになります。

そこでcrt0をコード全体の真中あたりに配置し、先頭からそこにジャンプする方法が前述の参考ページで紹介されています。これですと うまく配置すれば全体で32K+32K=64Kまで使用することが出来ます

しかしながら以下のような欠点があります。

  1. 32Kよりは増えるが中間のアドレスをうまく配置しないと64Kまで使えない
  2. 場合により何段かの中間ルーチンをおく必要がある。
  3. 1,2の制限によりモジュール配置に制限が出来る

そこで、もう少し抜本的な対策としてcrt0からのアドレス参照を32bitで行なう方法を御紹介します。

この方法ですと、全てのアドレスにアクセスできるので上記のモジュール配置の悩みを一つ減らすことが出来ます。
また、直接パッチとは関係ありませんが16bitジャンプで届かないというエラーが出る時も、パッチで使用している方法と同様の方法を用いて マクロなどを用意すれば、決して美しくはありませんが問題は解決できるでしょう。

注意点
crt0をコンパイルし置き換える必要があるため面倒臭い。 また危険です。危険とは、crt0を利用するプログラム(=すなわちほとんどのアプリケーション)全てにリンクされますので、バグがあったり、入れ換え間違えたりすると、かなりひどい問題をおこしますので注意して置き換えて下さい。
また、当然ながら問題が全て解決されるわけではないので、コードが大きくなってくると(自分の作成した)関数間の呼び出しなどでエラーが出ると思います。

パッチの使い方

  1. 前記のページにあるようにpilot.ldの更新を行ないます。 PalmOSの1レコードの最大値は64Kまでなのでそれ以上には大きくできません。
  2. prc-tools-0.5.0を展開しlibglib.0.1.0ディレクトリをまるごとコピーします
  3. コピーしたlibglib.0.1.0に以下のpatchをあててmakeします
    本パッチはgccやINCLUDEのパスなんかも変更しますが、これは御利用の環境に合わせて変更して下さい。(FreeBSDな環境ではこのままでOKでしょう)
    ダウンロード: libglib.0.1.0-longjump-0.2.patch.txt
  4. /usr/local/pilot/m68k-palmos-coff/libの中のcrt0.o, gcrt0.o, scrt0.oをそれぞれ(必ずbackupをとって!)置き換えます。
  5. 又は、普段はそんなに大きなの作らないという方、入れ換えが嫌な方は、オブジェクトかソース (crt0, gcrt0など)を自分のプログラムのディレクトリにコピーし、リンカのオプションに-nostartfilesをつけて、必ずcrt0.o(gcrt0.o)を先頭にしてリンクして下さい。

置換えが終了すると、あとは普通にコンパイラを使用するだけです。Makefileに手を加えたり、別なファイルをリンクしたりする必要はありません。 pilot-templateなどで出来るMakefileそのままで使用できます。
また、patchコードの見ためはちょっとダサ目ですが効率的には問題ないと思います。20数バイト程度スタートアップコードが増えますが実質的に問題ないでしょう。

バグ/動作報告,ご意見などはyamap@browncat.orgまでお願いします。


ご意見ご要望などは yamap@browncat.org まで
このページは以下のソフトウェアを使用して作成しました:
Kondara/MNU Linux,FreeBSD,XEmacs,Mule,jed,w3m,Netscape Communicator,MetaHTML,apache,jweblint,efstat,Namazu...
Thank you for visiting this page
Modified: 00/09/04