Palm Pilot 开发工具

作者:Eddie Harari

使用 Linux 和 GNU 工具的伟大之处之一是我们可以构建一个用于跨平台开发的环境。使用 Linux 进行跨平台开发的完美例子是用于 Linux 的 Palm Pilot 开发工具。在本文中,我将解释您应该使用的工具和方法,以便从您的 Linux 机器上为这台小巧但非常智能的机器编程。

背景

Palm Pilot 是一款非常智能的掌上电脑,基于 Motorola 68000 Dragon Ball CPU。市面上有几种型号:PalmIII、PalmIIIx、PalmV 和 PalmVII。(较旧的机器是 Palm-1000、Palm-5000、Palm-personal 和 Palm-professional)。所有新型号都使用 PalmOS-3.x 作为其操作系统。这些机器的基本功能是相同的。新型号之间的主要区别在于 RAM 大小、屏幕类型、电池和机器的形状。有关 Palm 设备的详细信息,请访问 http://www.palm.com/

文件系统

Palm Pilot 操作系统使用 RAM 来存储和组织其“文件”。RAM 上的每个文件实际上都是一个 Palm Pilot 数据库。每个数据库都有一个标头,指示数据库的类型和 creatorID。类型可以是任何内容:它是程序员可以分配给其应用程序或数据的 4 字节值。appl 类型实际上是一个应用程序。如果我们为应用程序分配不同的数据库类型,当我们按下 Palm Pilot 上的应用程序按钮时,我们将看不到它。creatorID 是另一个 4 字节值;PalmOS 使用此值来标识数据库(类似于文件的名称)。类型和 creatorID 的组合是唯一的,因此如果我们想将我们的应用程序提供给其他人,我们需要申请 creatorID。数据库可以存储资源,例如位图、可执行代码、表单等等。例如,应用程序存储其用户界面对象及其代码。

语言

要为 Palm Pilot 编程,我们首先选择一种编程语言。许多工具和编译器可以在我们的 Linux 桌面上运行,以对我们的 Palm Pilot 进行编程。在这里,我们使用 gcc ANSI C 交叉编译器来演示一个简单的程序。Palm 免费提供其 SDK(软件开发工具包)和文档,并且可以从 http://www.palm.com/ 下载。一本有用的书是 Motorola 的 MC68328 Dragon Ball 手册(有关更多信息,请参阅 Palm 网站)。

工具

我们需要安装的最重要的工具是 gcc 交叉编译器。关于此编译器的好消息是,当您阅读本文时,它应该已获得 Palm 本身的支持。您应该能够在 http://www.palm.com/devzone/ 网站的某个位置找到 gcc、binutils、gdb 和 prc-tools。目前还没有任何版本的 gcc 开箱即用地支持 palmOS;有一些补丁需要安装。这些补丁随 prc-tools 包一起提供,其中包含将所有资源组合到 prc(PalmPilot 资源数据库)文件所需的工具。我建议使用 gcc-2.95.2 版本,而不是早期的 2.7.2 版本,因为它修复了许多问题。binutils-2.9.1 也应该打补丁,gdb-4.18 也是如此,如果您想能够调试您的应用程序。很有可能在本文印刷时,这组软件将包含在一个大的压缩 tar 文件中。交叉编译器的安装说明非常简单,可以在 J. Marshall 的网页 http://homepages.enterprise.net/jmarshall/palmos/ 上找到。(此页面即将移至 Palm 官方站点,位于 devzone 部分下的某个位置。)

构建 GUI

Palm Pilot 应用程序使用 FORMS 与用户交互。这些表单包含位图、按钮、表格、复选框和许多其他用户界面对象。Wes Cherry 编写了一个用于为 Palm Pilot 构建这些表单的强大工具,称为 pilrc。当前版本 (2.4) 可以从 http://www.scumby.com/scumbysoft/pilot/pilrc/ 下载。它以源代码形式提供,并具有非常好的 HTML 文档。列表 1 是一个简单的 pilrc 文件示例,它构建了一个简单的表单、警报、菜单和帮助字符串。(请注意,ID 为 10 的位图是直接作为资源创建的;除了 ID 之外,此文件中没有对其的引用。)

列表 1

命令

pilrc /usr/local/example/hw.rcp

将在此文件中构建两个 UI 对象:表单和字符串。这些对象中的每一个都将在单独的文件中。稍后我们将使用 prc-tools 包附带的 build-prc 命令将这些文件与实际代码组合成 prc 文件(应用程序数据库)。为了在不实际编写应用程序的情况下查看表单,我们可以使用 pilrcui 工具。此工具与 pilrc 包捆绑在一起。有关 UI 对象和 pilrc 使用的更多信息,您应该查看 Palm 官方文档和 pilrc HTML 文档。

实际编程

事件

PalmOS 保留一个由系统处理的事件队列。这些事件被发送到当前应用程序,以便执行代码来处理每个事件。当按下 UI 按钮、Palm 笔触摸屏幕 (penDownEvent) 或发生其他操作时,会触发事件。应用程序应将其不处理的任何事件转移到系统。当事件被处理后,PalmOS 从队列中获取下一个事件并将其传递给应用程序。应用程序也可以将事件放入队列中。许多 PalmPilot 函数会导致各种事件被放入事件队列中。Palm Pilot 的官方文档中列出了所有事件及其作用。

PilotMain

程序的主过程称为 PilotMain。当 PalmOS 调用 PilotMain 时,它会向其传递一个命令。PilotMain 过程应该找出命令的内容。例如,该命令可以说明这是应用程序的正常启动 (sysAppLaunchCmdNormalLaunch),或者这是一个查找字符串的命令 (sysAppLaunchCmdfind)。PilotMain 应该在其代码中忽略或响应这些命令。地址簿是一个响应 sysAppLaunchCmdfind 的应用程序示例。每当我们按下查找按钮时,PalmOS 都会将此命令发送到所有应用程序。地址簿将接受此命令,它开始在其数据库中搜索我们输入的字符串。

EventLoop

为了处理所有事件,我们应该使用事件循环。事件循环只是获取一个事件,处理它,然后获取队列中的下一个事件。如果我们不想处理某个事件,我们可以将其发送到 PalmOS 事件处理程序,以便它为我们处理。

Pilot API

为了利用 PalmOS 的所有功能,我们提供了完善的 API 供您使用。您应该阅读 API 手册,了解 PalmOS 中存在哪些类型的事件、函数和对象类型。列表 2 是在 Palm Pilot 上编写“Hello World”的简单代码。

列表 2

构建应用程序

在 Palm 上运行应用程序的第一步是构建资源。如前所述,我们可以使用命令 pilrc 构建资源。

pilrc hw.rcp

为了将 ID 为 10 的位图添加到主表单,我使用了一个工具,该工具将 ppm 文件转换为 Tbmpxxx.bin 资源。我使用 xv 将 peng.gif(在 http://www.linux.org.il/ 找到)的格式转换为黑白 ppm 格式。然后我在 peng.ppm 文件上使用了 ppmtoTbmp,并将结果命名为 Tbmp000a.bin。文件名中的 000a 是 10 的 32 位十六进制值。我需要指定此值,因为这是我在主表单的 pilrc 资源文件中编写的位图 ID。此工具由 Ian Goldberg 编写,可以在 http://www.pilotgear.com/ 找到。

下一步是编译 C 代码。为此,我们使用 gcc m68-palmos-coff 交叉编译器,使用与普通 Linux gcc 相同的标志

m68k-palmos-gcc -O2 -o hello hello.c

此命令的结果是一个名为 hello 的 m68k COFF 对象文件。m68k COFF 对象文件应与刚使用 pilrc 程序创建的资源组合。为了完成此任务,我们首先使用 obj-res 实用程序将 COFF 文件拆分为代码和数据资源,然后使用 build-prc 实用程序组合资源。

m68k-palmos-obj-res hello
此命令会将 hello 文件拆分为三个资源文件:code0000.hello.grc、code0001.hello.grc 和 data0000.hello.grc。现在我们准备好构建 prc 数据库的最后一步。
build-prc hello.prc "hello" hwld *.grc *.bin
此命令构建一个 creatorID 为 hwld 且类型为 appl 的 prc 应用程序。
测试应用程序

在您的 Palm Pilot 上测试应用程序不是一个好主意。错误可能需要我们重置机器,并且程序无法使用普通工具进行调试。测试我们刚刚创建的“Hello World”应用程序的最佳方法是使用一个程序,该程序将在我们的桌面中模拟 Palm Pilot。POSE 是一个非常好的模拟器,可从 http://www.palm.com/ 获取,其中包含源代码。它可以使用特殊的调试 ROM,也可以从该站点获得。使用调试 ROM,我们可以获得有关我们应用程序的更多调试信息,这使得查找错误变得更加容易,并且我们可以将 gdb 连接到它,以便使用这个众所周知的调试工具进行调试。要安装 POSE,您将需要 FLTK X 工具包。所有说明都随 POSE tar 文件一起提供。

还有一个用于 X 的模拟器,称为 xcopilot。为了使用您自己的机器 RAM 或 ROM,您可以使用 pilot-link 包。pilot-link 包使您能够通过串行端口与 Palm Pilot 通信。此包中有一些很好的实用程序,可从 ftp://ryeham.ee.ryerson.ca/pub/PalmOS/ 获得。使用 pilot-link 实用程序,我们还可以将数据库从我们的桌面传输到 Palm Pilot,以及从 Palm Pilot 传输到桌面。

Palm Pilot Development Tools

图 1

图 1 是 POSE 在 Palm 上运行我们的 hello world 应用程序时的外观。

资源

Eddie Harari (eddie@sela.co.il) 在以色列 Sela Systems & Education 工作,担任高级经理,并参与一些安全项目。他从事计算机破解已有 13 年。

本文中提及的所有列表都可以通过匿名下载文件 ftp.linuxjournal.com/pub/lj/listings/issue73/3782.tgz 获取。

Palm Pilot Development Tools
加载 Disqus 评论