龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 操作系统 > LINUX系统 >

如何用 Linux 开发 Palm 程序

时间:2011-03-20 22:37来源:未知 作者:admin 点击:
分享到:
Palm 是么是 Palm 大家一定知道.现在越来越多的人投入到 Palm 程序开发的行列中来.今天,就让我们自己也来体会一下如和在 Linux 上开发 Palm 的程序吧. 为什么是 Linux 原因很简单,因为 Linu

  Palm

  是么是 Palm 大家一定知道.现在越来越多的人投入到 Palm 程序开发的行列中来.今天,就让我们自己也来体会一下如和在 Linux 上开发 Palm 的程序吧.

  为什么是 Linux

  原因很简单,因为 Linux 是免费的.因为 Linux 下的很多工具也都是免费的. 同时, Linux 本身就是一个最好的程序开发平台.

  在 Linux 中写 Palm 程序,除了需要一个可以正常工作的 Linux 环境以外,我们还需要以下的东西:

  1. 我们需要 Palm OS 的 SDK 来开发 Palm 的程序. Palm 的 SDK 可以在 Palm 的网站中免费下载: http://www.palmos.com/dev/

  2. Palm Emulator - Palm 的仿真器,用来仿真 Palm 执行我们 写出的 Palm 程序. Palm Emulator 也可以子爱 Palm 的网 站中免费下载: http://www.palmos.com/dev/

  3. RPC-Tools 如果想在 Linux 中开发 Palm 的程序. 就需要用到 RPC-Tools 了. RPC-Tools 实际上是通过对 the GNU Compiler Collection, Assembler, linker, 跟 symbolic debugger 做 一些必要的修改,好让我们可以在 Linux 上面用 C/C++ 来开发 Palm 的程序. RPC-Tools 可以在 http://prc-tools.sourceforge.net/ 中免费下载.

  4. gcc-2.95.3 我们需要打造出一个 cross compiler, 按照 RPC-Tools 的建议,这里我们选择了下载 gcc-2.95.3: http://www.gnu.org/software/gcc/gcc-2.95/

  5. GDB - 用来建立 cross debuger (除错), 同样的,按照 RPC-Tools 中的建议,我们选择 gdb-5.0 : ftp://sources.redhat.com/pub/gdb/old-releases/gdb-5.0.tar.bz2

  6. Binutils - 我们所需要的一些工具,包含了: ld, as, ar, nm, objcopy, objdump, ranlib, size, strings, strip, c++filt, addr2line 和 nlmconv 这里我们选择 binutils-2.9.1 ftp://ftp.gnu.org/gnu/binutils/binutils-2.9.1.tar.gz

  7. make-3.77 - 我们选择 make-3.77 ftp://ftp.gnu.org/pub/gnu/make/make-3.77.tar.gz

  8. PilRC - PilRC 是 Palm 的 resource compiler. 也就是说把 m68k 的可执行程序代码编译成 palm 的 .prc 文件. PilRC 可以 在下面的连结中免费取得: http://www.ardiri.com/index.php?redir=palm&cat=pilrc&subcat=download

  这里用于测试的系统是 RedHat 7.3

  安装 Palm SDK

  首先 tar vxfz sdk50.tar.gz 这时侯会出现一个 palmos-sdk 的 rpm 文件. 用 rpm -ivh 给安装上去就好. SDK 会被安装在 /opt/palmdev/sdk-5 中. 我们现在需要做一个 symbolic link, 把 sdk-5 link 到 sdk 上面去.

  cd /opt/palmdev

  ln -s sdk-5 sdk

  现在我们已经安装好了 Palm SDK 了. 接下来就该安装开发所需要的环境了.

  安装 PRC-Tools 以及 cross compile 所需要的工具

  收先我们建立一个新的目录

  mkdir /tmp/prc

  然后把 prc-tools-2.0.92.tar.gz binutils-2.9.1.tar.bz2 gcc-2.95.3.tar.bz2 gdb-5.0.tar.bz2 make-3.77.tar.gz 都 copy 过去.

  cp prc-tools-2.0.92.tar.gz /tmp/prc

  cp binutils-2.9.1.tar.bz2 /tmp/prc

  cp gcc-2.95.3.tar.bz2 /tmp/prc

  cp gdb-5.0.tar.bz2 /tmp/prc

  cp make-3.77.tar.gz /tmp/prc

  然后 cd 到 /tmp/prc 目录下. 执行解压缩的动作:

  收先把所有 .gz 的解压缩

  

  for i in *.gz; do tar vxfz $i; done

  

  接下来是一些用 bzip2 压缩的 .bz2 文件

  

  for i in *.bz2; do tar vxfj $i; done

  

  prc-tools 为以上的这些程序,有做一些改动,所以我们需要把上面的程序代码 patch 一下:

  cat prc-tools-2.0.92/*.palmos.diff | patch -p0

  现在我们进入 prc-tools-2.0.92 的目录,首先我们需要做的是把 binutils-2.91, gdb-5.0, gcc-2.95.3 跟 make-3.77 这几个目录用 symbolic link 分别 link 到 prc-tools-2.0.92 这个目录中.

  cd prc-tools-2.0.92

  ln -s ../binutils-2.9.1 binutils

  ln -s ../gcc-2.95.3 gcc

  ln -s ../gdb-5.0 gdb

  ln -s ../make-3.77 make

  为了保持我们程序源码目录的整洁与完整性,所以我们在编译的时侯, 单另建立一个目录 build:

  cd ..

  mkdir build

  现在我们只要跑 prc-tools-2.0.92 中的那个 configure 就好了

  ../prc-tools-2.0.92/configure --target=m68k-palmos --enable-languages=c,c++

  这里面我们分别传给 configure 两个参数, 一个是告诉我们的 target 为 m68k-palmos 另一个是 enable C/C++ 这两种语言. prc-tools 中的这只 configure script 会帮我们把 binutils, gcc, gdb, make 这四个程序所需要的 Makefile 也同时帮我们建立好. 现在在我们的 build 目录中,就有了以下这些东西:

  binutils config.log crt gcc include libm Makefile

  config.cache config.status doc gdb libc make tools

  

  

  现在我们只要用 make all-install 就好了. (如果您不是用 root 帐号, 不要忘记 su 成 root)

  make all-install

  因为需要 compile 的时间满长的.如果您的系统中有超过一颗的 CPU 记得在 make 后面加上 -j number 的选项,其中 number 的 value 就是您 CPU 的数量加一. 例如您有两颗 CPU 就可以用 make -j3 all-install, 如果有三颗就用 make -j4 all-install. 如果您的机器又很大的 RAM (好几 GB)然后也有个十几颗的 CPU, 那么也可以用 make -j all-install 来编译.如果 -j 后面没有跟任何数字,那么 make 就不会对 jobs 做任何的限制. 详细的情况请自行 man make 看一下.

  在我们编译的过程中,还有己个小小的问题需要解决一下(至少这个问题存在于 RedHat 版本的系统中)首先遇到的问题是, 在 gdb 的编译中有一个错误:

  In file included from /usr/include/curses.h:111,

   from ../../../prc-tools-2.0.92/gdb/gdb/utils.c:28:

  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h:39: conflicting types for `false'

  ../bfd/bfd.h:101: previous declaration of `false'

  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h:41: conflicting types for `true'

  ../bfd/bfd.h:101: previous declaration of `true'

  

  我们这里看到在 gdb/gdb.utils.c 中的第 28 行有 include curses.h 这个文件.而 curses.h 中的第 111 行又 include 了 stdbool.h, stdbool.h 中定义了 false, 而 bfd/bfd.h 中同时也定义了 false, 这样两个 false 就冲突了.所以造成编译失败.这里用最简单也是最偷懒的作法,打开

  /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h

  把:

  typedef enum

   {

   false = 0,

   true = 1

   } _Bool;

  

  这己行给暂时 mark 起来

  

  /*

  typedef enum

   {

   false = 0,

   true = 1

   } _Bool;

  */

  

  然后再重新

  

  make all-install

  

  现在我们会遇到第二个问题:

  

  gcc -DEXEC_PREFIX=\"/usr/local\" -I. -I../../prc-tools-2.0.92/tools/../binutils/include -I../binutils/bfd -g -O2 -o def.yy.o -c def.yy.c

  ../../prc-tools-2.0.92/tools/def.l:35:19: utils.h: 没有此一档案或目录

  ../../prc-tools-2.0.92/tools/def.l:37:23: pfdheader.h: 没有此一档案或目录

  

  

  找不到 utils.h 跟 pfdheader.h 这个很容易解决,把 prc-tools-2.0.92/tools 下面这两个文件复制到 build/tools 下面就好了,这里我们把全部的东西都给复制过去, 不然等会还会继续说找不到 utils.h 的文件

  cp ../prc-tools-2.0.92/tools/* tools/

  

  然后继续 make all-install

  

  接下来又会有一个错误中断编译:

  

  gcc -DEXEC_PREFIX=\"/usr/local\" -I. -I../../prc-tools-2.0.92/tools/../binutils/include -I../binutils/bfd -g -O2 -o def.yy.o -c def.yy.c

  ../../prc-tools-2.0.92/tools/def.l:39: conflicting types for `dup'

  /usr/include/unistd.h:441: previous declaration of `dup'

  

  这里是说,在 def.l 中第 39 行定义的 dup 已经在 /usr/include/unistd.h 中的第 441 行定义过了.所以产生了冲突.

  

  还是用最简单的方法来解决:

  首先要做的是

  

  vim tools/def.yy.c

  把第十二行的 #include 改成 #include "unistd.h" 这样编译 def.yy.c 的时侯,就不会去找 /usr/include/unistd.h 这个文件,而是找 tools 下面的 unistd.h

  接下来

  

  cp /usr/include/unistd.h tools/

  

  把 unistd.h 复制到 tools 下面,再把 unistd.h 改动一下

  

  最后

  

  vim tools/unistd.h

  

  把第 441 行的 extern int dup (int __fd) __THROW;

  给 mark 起来

  // extern int dup (int __fd) __THROW;

  存盘后重新 make all-install 就再没有问题了. 这时侯,在您的 /usr/local/bin 下面就已经有了我们做 cross compile 所需要的全部工具了.

  PS. 不要忘记把了把 /usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdbool.h 改回原貌喔.

  安装 pilrc

  现在到了最后一步,安装 pilrc

  首先把 pilrc-2.9.tar.gz 复制到 /tmp 中

  cp pilrc-2.9.tar.gz /tmp

  

  然后解压缩:

  

精彩图集

赞助商链接