红联Linux门户
Linux帮助

在掌上电脑HPiPAQ上运行Linux

发布时间:2006-04-24 01:20:45来源:红联作者:爱零整整
  在 iPAQ 上安装 Linux™ 对于赋予成熟的硬件以新的活力或者使已有的工具变得更好,可能是一种很好的方式,尤其当您是桌面 Linux 的拥趸者时更是如此。在这个过程中您可以充分利用已有的知识,还可以享受到熟悉(双关语,Familiar)而且免费的开放源代码软件的益处。在本文中,学习如何用 Linux 来武装您的 HP-Compaq iPAQ PDA。
  
  iPAQ 是 Hewlett Packard 生产的一类 PDA 的品牌(较老的型号品牌是 Compaq)。最初的型号是于 1999 年发布的 3600,其拥有一个 206-Mhz 的 StrongArm 处理器、32 MB ROM 和 32 MB RAM,运行 PocketPC 2000 操作系统。从那时起,已经推出了具有多种不同选择的很多型号。当前最新的型号具备内置的 Bluetooth、Wi-Fi 和 SDIO 能力,运行 PocketPC 2003 操作系统。所有这些设备足够强大,可以流畅地运行 Linux。本文论述了为什么您可能选择这样做并研究了一些可能的选择。
  
  为什么运行 Linux 而不是 Pocket PC?

  开始进入在 iPAQ 上安装并使用 Linux 的细节之前,需要考虑的一个显而易见的问题是,为什么从 PocketPC 200x 转而使用 Linux?
  
  不再以已经被滥用的(多少次,我在寻找你,Slashdot 读者)“因为您可以”这一理由作为答复,其实有很多正当的理由,包括:
  
  个人感觉:很多人只是觉得作为用户或开发者使用 Linux 环境更舒服。
  持续的升级/支持:Linux 正不断地得到改进,安全缺陷正得到修复。然而,其原来的软件可能已经完全得不到支持,在很多情况下不能升级到最新的版本。即使操作系统/应用程序可以被升级,但这也不可能是免费的。
  自由:出于意识形态的观点,或者因为希望得到很多其他益处(比如自己修复缺陷的能力和更强大的用户社区,等等),很多人更喜欢使用开放源代码软件。
  实际能力:运行 Linux,使得很多在使用 PocketPC 时难以达到、代价高昂或者不可能达到的事情成为可能。
  应用程序:通过运行一个标准的 Linux 发行版本,您可以轻松地移植很多应用程序(某些根本不需要做任何改动,很多只需要很少改动)。
  操作系统功能性:此操作系统具备远程 X(Remote X)和原始的套接字。
  
  选择硬件

  一旦决定下来想要在 iPAQ 上尝试 Linux,您首先需要选择要使用的 iPAQ 硬件。通常,更老的硬件会得到更好的支持(因为开发者有更多的时间进行与之相关的工作)。可靠的选择是 H3100、H3600、H3700、H3800、H3900、H5100、H5400 和 H5500。随时都在添加对较新的设备的支持,所以,如果您的 iPAQ 是较新的,也不是完全没有希望 ---- 您可以选择参与开发版本(即便仅仅是为了测试软件,如果您没有开发经验),或者保持观望,直到您的硬件得到官方支持。同时,如果不想等待,您随时可以找一个二手的旧机器来用。为了进行测试,我使用的是一个扔在办公室里的相当古老的 H3650 型号。
  
  下载发行版本

  好,既然您已经挑选出了一些硬件,那么接下来就是要确定去哪里获得 Linux 以及如何将它安装到设备上。
  
  假设您不打算改造您自己的系统(这是完全可行的,也是极其耗时),那么将 Linux 安装到您的设备的最简单办法就是获得一个支持这些设备的可用的特殊发行版本。最流行的发行版本之一(这也是我已经决定要使用的)是由 Familiar Project(参见 参考资料 中 Web 站点的链接)所提供的,以下简称为“Familiar”。
  
  与大部分桌面 Linux 发行版本类似,Familiar 由两个独立的组件构成:
  
  内核和基本系统。
  GUI/桌面环境。
  
  可以下载三种截然不同风格的 Familiar(第四种风格只面向开发者,它没有 GUI,但也是可用的)。这些风格每一个都有相同的内核和基本系统,但是有不同的 GUI。在桌面 Linux 领域中可以与此类比的是,安装一个发行版本,比如 Red Hat 或者 Mandrake,并选择一个桌面环境,比如 KDE 或者 GNOME。确实,一旦开始查看选项,您就可以更深入地体会到不同桌面环境之间的类似之处。
  
  这三种风格是:
  
  GPE(GPE 掌上电脑环境,即 GPE Palmtop Environment),基于 GTK,最类似于桌面领域中的 GNOME。
  OPIE(开放掌上电脑集成环境,即 Open Palmtop Integrated Environment),基于 Qtopia,最类似于桌面领域中的 KDE。
  pypaq,基于 Python 和 GTK。
  
  前两者,即 GPE 和 OPIE,比 pypaq 应用更为广泛。如果您没有充足的理由在选择了一个之后再选择另一个,那么就只要选一个(安装所需时间并不长,所以,如果您不喜欢所做的选择,随时可以重新开始另一个风格)。
  
  选择了要下载的适当文件后(我想要的是 GPE),就可以安装了。
  
  安装 Linux

  要获得详细的安装说明,请查阅 Familiar Web 站点的版本注解。下面的说明将使您对此过程有所了解,但是,如以前在 Linux 领域中一样,这些步骤可能会完全改变。
  
  安装的第一个步骤是安装一个新的引导加载器(bootloader)。与通常的桌面系统中的 LILO 或 GRUB 类似,这是当 iPAQ 启动并允许您加载 Linux 时运行的初始程序。
  
  引导加载器安装包含两个文件:WindowsCE 可执行文件(BootBlaster.exe)和引导加载器本身。要安装引导加载器,您首先需要将这些文件传输到 iPAQ 上。有很多方法可以完成此任务,比如通过 ActiveSync、通过存储卡(CF/SD/MMC,如果您的手持设备支持)或者通过网络连接(如果已经配置)。
  
  当设备上有了引导加载器程序和引导加载器文件后,只需要运行 .exe,并遵循屏幕上的说明来备份现有的引导加载器和操作系统(以防万一您什么时候希望返回到现在的配置)。需要注意两点:
  
  如果您通过一个串行链接备份现在的操作系统,请耐心:在我的机器上这需要大约 15 分钟。
  引导加载器安装程序好像要求引导加载器文件位于 My Documents 文件夹中(或者一个子文件夹)。
  
  既然已经安装了引导加载器,如果您重新启动设备,您应该会看到一个与常见的不同的屏幕 ---- 那就是新的引导加载器的。
  
  下一步是安装操作系统本身,它发布为一个单一的 jffs2(journaling flash file system 版本 2)存档文件。取决于您所使用的硬件,有三个独立的如何继续进行的选项:
  
  如果您有一个 CompactFlash 盒(Jacket)和一个 CompactFlash 存储卡(此过程不支持 SD/MMC 卡),那么最简单的方法就是,使用 WinCE 或另一台机器将三个文件(jffs2 文件、reflash.ctl 和 md5sums)拷贝到 CF 卡的根并将卡放入盒中(显然,也将 iPAQ 放入盒中)。现在,只需要按下 record 按钮(在左边)来重设设备,然后您应该会看到卡上的一个映像列表(通常只有一个)。通过 joypad 选择映像,然后直接安装 ---- 这需要几分钟。
  
  如果没有 CF 盒/卡,那么您需要使用串行线缆/支架(cradle)。不幸的是,不能使用 USB 线缆/支架,所以如果您的设备只附带了其中之一,那么您将需要购买一个(到处都可以找到,而且相当便宜)。另外,最好查阅随设备提供的安装说明,以获得详细说明,不过,基本的方法是,将 iPAQ 连接到一个主机计算机,然后通过串行线将 jffs2 文件传输到 iPAQ 上(使用 ymodem 协议)。一旦文件到了设备上之后,就可以使用 boot 命令来快速存储(flash)该文件,该命令将与前面一样快速存储设备。
  
  注意,传输可能得需要一段时间(我用了 20 多分钟)。
  
  如果您有一个 CF 盒,那么有可能在一个 CF 内存卡上安装 Linux,而不用重新快速存储内部设备,这样就可以使 PocketPC 相对不会被改动。我之所以说是“相对”,原因在于 PocketPC 存储用户数据的方式(在 DRAM 中),当 Linux 引导时,它将抹去所有的用户数据(因为 Linux 使用所有可用的 DRAM)。这仍是一种实用的方法,因为它支持了一种基本形式的双引导(虽然在切换到 Linux 或者切换出 Linux 时需要进行额外的备份/还原)。不幸的是,关于此方法的资料很少;它也没有得到 Familiar 发行版本的直接支持,因为它要求用户创建一个定制的 initrd 文件系统。对那些对此方法感兴趣的人来说,有一个为名为 Intimate 的大容量(160 Mb 以上)CF 卡量身定制的专用发行版本(Familiar 的一个分支)。不幸的是,好像这个发行版本的开发工作已经停止了:最后一次发布是在 2001 年 11 月, Web 页上最新的一条新闻的日期是 2003 年 6 月。
  
  不管您决定使用哪种方法,快速存储过程现在已经完成 ---- 恭喜!如果一切顺利,您现在应该已经拥有了一个基于 Linux 的 PDA。
  
  连接起来

  现在您的 PDA 本身已经是一个功能完整、完全可用的系统。取决于您要使用的 GUI 组件(GPE、OPIE 等等),一般来说确切可用的应用程序将是不同的。不过,基本层次上的功能是相同的:每个发行版本都包括一个 Web 浏览器、日记、地址簿、电子邮件客户机等等 ---- 所有都是您期望 PDA 要具备的。
  
  除非您打算在完全非连接模式下使用 PDA,不然首先应该做的就是建立起某些连接。最基本层次的连接是与主机 PC 的简单的 串行/USB 同步,以获得最大限度的灵活性。另外,根据您的硬件的不同,确切的步骤也将不同 ---- 其范围很大,可以是完全无线访问(如果您有得到支持的(内置的/CF/PCMCIA)Wi-Fi 卡),LAN 访问(也需要一个得到支持的卡),基于 Bluetooth 的 TCP/IP,使用得到支持的调制解调器进行拨号上网,以及通过主机 PC 在 USB 或者串行线缆之上进行 TCP/IP 的隧道传输。
  
  由于缺乏硬件,我只能使用连接到一台 Linux 桌面机的 PPP 来设置串行线缆上的 TCP/IP,以及设置 Linux 机器来执行 NAT 并在 iPAQ 与 LAN 之间转发数据包。这相当简单,在 handhelds.org 有说明(参见 参考资料 中的链接)。另外,此系统的优势之一是,由于 iPAQ 是一个真正的 Linux 机器,所以,如果您有使用普通桌面 Linux 机器进行此类设置的经验,那些技巧可以直接应用于手持设备的设置中。
  
  有了完全的 TCP/IP 网络连接,您就可以利用 Familiar 的一个强大特性:它的简单的程序包管理系统。Familiar 的程序包管理系统名为 ipkd(表示 Itsy Package),它基于 Debian,类似于 Debian 的 dpkg 系统。只需要使用一组简单的命令,您就可以安装大量的预编译的程序包。
  
  例如,我们假定您想要在您的 iPAQ 上运行一个 Web 服务器。是的,我知道这可能听起来是要做一件奇怪的事情,不过这在很多环境中可能是实用的。例如,您可以到一个客户那里,通过直接在将要实际部署的同一个 Web 服务器上(比如 Apache)演示您为他们开发的 Web 站点。
  
  通过下面的命令来使用 ipkg 安装 Apache:
  
  ipkg install apache
  
  ipkg 会为您处理所有的依赖性,自动下载和安装的不仅是 Web 服务器,还包括它正确执行功能所需要的任何程序包。
  
  在安装时我喜欢使用 -V 2 选项来获得更多详细消息。
  
  您可以使用 remove 命令删除程序包:
  
  ipkg remove apache
  
  不过,remove 命令不会删除所依赖的那些程序包,所以您可能需要使用另外的 ipkg remove 命令来删除您再也不需要的程序包。
  
  类似地,您可以通过下面的命令来使您的软件始终是最新的(包括安全修订):
  
  ipkg update
  ipkg upgrade
  
  为它进行开发

  既然现在您明白了如何为您的新操作系统获得并安装现有的软件,那么您可能对以下方面感兴趣:存在哪些选项可以运行您定制的软件或者仅仅是现有的开发者还没有进行移植的现有操作系统软件。
  
  很显然,首先您需要的是一个编译器以及相关工具链(汇编程序、链接器等等)。这里有两个需要考虑的主要选项:
  
  自托管的(self-hosted)编译器:在这种情况下,编译器在设备本身上安装并运行。这是一个完全可行的设置;实际上, gcc 可以通过 ipkg 获得。不过,对大部分人来说,是不必这样的,除非您真正需要在移动状态下进行开发(我们得承认,使用有限的输入设备进行开发会相当痛苦)。编译会比交叉编译设置慢很多(除非您的桌面机 实在 慢),而且编译器、头文件、程序库等将占用大量的磁盘空间。所以,对大部分用户来说,更合适的设置是:
  
  交叉编译设置:在这种情况下,编译器和工具链安装在一个单独的桌面机上 ---- 通常是基于 Linux 的,不过也可能有别的选项,包括 Windows(通过 Cygwin)、Mac OS X 等等。编译器在进行开发的机器上运行,但是配置为一个交叉编译器;这样,生成可执行程序将不在桌面机上运行,而是输出可以运行于手持设备的 ARM 二进制文件。大部分人使用的编译器是 gcc,如果您以前从来没有这样设置过,设置起来可能令人望而生畏(尤其是将其设置为一个交叉编译器)。幸运的是,在网上有足够多的帮助。简单讲,您可以安装并使用一个预制的(pre-made)交叉编译器(参见 参考资料 中的链接),或者,如果您需要构建您自己的(比如,如果您需要一个更新的版本),那么有可以使用的脚本(比如 crosstool;参见 参考资料),只需要回答一些简单的问题,它就可以帮助您构建一个交叉编译的 gcc。
  
  重新安装 PocketPC

  如果出于某些原因您认为 iPAQ 上的 Linux 不适合您,那么重新安装 PocketPC 也是一件简单的事情。过程与先前的使用串行线安装 Linux 完全相同,只是这一次传输的不是 Linux jffs2 文件,而是传输并安装我们先前保存的 PocketPC 映像。文档没有详细说明 CF 方法是否可以用于还原;我估计它可以,但是我没有可用的 CF 盒来测试这一推测。
  
  至于引导加载器,您可以保留先前安装到设备上的新的安装加载器(它可以非常好地引导 PocketPC),或者,如果您愿意,可以重新安装最初的引导加载器。由于快速存储引导加载器是最具潜在危险的步骤(对您的 iPAQ 来说),我建议您保留新的引导加载器,除非您有特别的理由不这样做。
  
  结束语

  不是每个人都应该在 iPAQ 上安装 Linux:到处都还有需要解决的问题。例如,在撰写本文的过程中,我发现有几次我的设备会启用屏幕锁,但是触摸屏不会正常工作,所以我就不能解锁。我发现,要解决此问题,只能通过串口登录到机器,然后杀死锁程序,或者强行重新引导机器。如果您是在半路上,或者正在进行某项工作,那么这两种方法都不是令人满意的解决方案。
  
  另外,大部分较新的具有非常吸引人的特性(比如内置的 Wi-Fi)的设备当前都没有得到支持,尽管随着开发者开始从事新机器相关的工作,这种情形只会日益得到改善。
  
  最后,如果可以实现双引导程序(尤其是随着规格不断改进,有了更多空间来存储两个操作系统),iPAQ 上的 Linux 会获得更广泛的接受。这将使人们更倾向于开始在他们的 iPAQ 上体验 Linux 并使用一两个应用程序 ---- 即便是有某些他们离不开的“最佳应用程序(keller apps)”,Linux 中(还)没有与之相当的程序。 毫无疑问(至少我这样认为),如果不能实现双引导,桌面上的 Linux 将不会像现在这样流行。
文章评论

共有 3 条评论

  1. 834869349 于 2014-03-20 15:14:32发表:

    学学学啊

  2. 八点十三 于 2014-03-20 14:41:29发表:

    顶顶更健康

  3. jyo200 于 2006-07-18 19:15:22发表:

    让LINUX在机子上共享