分类:
2008-10-15 13:50:22
在移动和应用程序方面,Linux 受到当之无愧的欢迎,这是因为它能够根据小型设备有效运行所需的资源开销按比例进行缩减。Nokia N800 利用了这项功效,并提供了大量多用途的功能供开发人员利用。但是在本期和下两期 Linux 的魅力 中,目的不是讨论功能,而是通过可运行示例(使用照相机功能来创建 Webcam)的方式,展示如何开始构建应用程序。
Nokia N800 是相当成熟的产品。它的前身 Nokia 770 就远远超前于早期基于 Linux 的客户端设备,N800 则明确针对客户端需求开发。开发时的艰难早已成为过去,现在,对该设备使用最普通配置的情况下,就可以添加或删除 stylus(最近推出的 Nokia N810 将在将来的文章中讨论)。
N800 并非提供单个 “RS-MMC” 插槽,而是提供两个针对常规 SD 卡的插槽。架子是内置的。最为引人注目的是,可用内存、闪存和处理器速度都增加了。附带的东西甚至包含一个安装好的屏幕保护膜(有一件关于屏幕保护膜的经历很令人惊奇 — 我曾经在手机的屏幕保护膜下面逮到一只猫 — 所以我非常推崇屏幕保护膜)。阅读下面关于 N800 的一些更重要的 技术规格和物理参数。
大多数功能都得到了扩展,尽管并非尽善尽美;例如,WiFi 代码尚不支持信任的 root 证书权威认证,尽管存在一个针对它的空白下拉菜单。这在将来的版本中可能会得到更新。
我发现 770 最令人印象深刻的事情之一是其基于 scratchbox 的构建环境。让我们研究一下构建环境实际如何工作。
N800 有一个内置的照像机。通过弹出将其打开时,N800 就会启动一个视频友好的聊天程序。这很简洁,但不是我想要的。我想要一个简单的老式 Webcam。N800 似乎是 Webcam 的理想平台:它是小型的、便携式、联网的平台,并且(不要忘了)它有一架照相机。因此让我们讨论实质问题并开始编写代码。
设置工作
我使用一个终端程序设置系统并获得 root 访问权限。您实际上不必如此;这是因为我喜欢随意探索。我从 maemo Wiki 的应用程序编目页(请参阅 参考资料 中的链接)了一个终端程序。该程序实际上是针对 770 设计的,但是它不依赖于内核修改之类的细节,因此用起来很不错。
获得 root 访问权限略有难度:必须将设备设成 “R&D” 模式,这是使用 flasher 实用程序实现的,可以从 maemo 站点该程序。Flasher 实用程序需要 x86 Linux 主机,而这也是运行 scratchbox 的首选环境。如果没有 x86 Linux box,可以以牺牲一顿早餐为代价获得一台足够强大的 x86 机器(而 Linux 可免费)。我的主机平台是 Kubuntu,但是似乎没有关系;我也使用 SuSE 实现过,我认为 maemo 网站上的人喜欢简单的 Debian。
Maemo 安装说明就足够了。必须先安装 scratchbox。使用提供的安装程序即可,尽管它的默认行为(即删除已经下载的所有文件以再次下载)不可理喻(也可以手动安装,但是我认为不必如此)。
安装 Scratchbox 需要 root 访问权限,但是安装完之后使用 scratchbox 时不必拥有 root 访问权限。如果您使用提供的 maemo scratchbox 安装程序,则只需作为 root 用户使用您的用户名运行 /scratchbox/sbin/sbox_ctl start
和 /scratchbox/sbin/sbox_adduser
。注销并再次登录,以便新的组成员(组 sbox)生效,如此即可。
然后再也不需要 root 访问权限。实际上,maemo SDK 安装程序(我使用的是 maemo-sdk-install_3.1.sh;新近的 3.2 更新是从 SDK 内部更新的)将不会作为 root 用户运行,只需拥有 scratchbox 访问的常规用户即可。系统管理员的负担减轻了。
实际上,我发现拥有在不必要的情况下不需要 root 权限的安装程序非常方便。在运行 maemo 安装程序之前,不必实际设置目标;请忽略警告您先运行 sb-menu 的消息(如果转移注意力,可能会在安装程序继续运行时错过它们)。特别感谢 Freenode 的 #maemo 频道的朋友,他们让我确信该错误消息是无害的。
如果您以前从未使用过 scratchbox,则需要简要的介绍。历史上,交叉编译带来了许多挑战。最著名的是难以在目标环境中运行程序以及类似程序,而且如果它与主机环境不同,配置起来相当麻烦。
Scratchbox 以尽可能直接的方式解决了这个问题:在使用 CPU 仿真的本地环境中运行本地二进制文件。假设我的主机 CPU 速度大约是目标 CPU 速度的 8 倍,那么这是相当好的解决方案;节省开发时间能带来令人难以置信的好处。这是典型的技术进步例子:可以简单地忽略曾经难以克服的障碍。
Scratchbox 允许您拥有多个构建环境,您可以在其中搭配使用目标和主机二进制文件。如果在 x86 处理器上使用 ARM scratchbox,ARM 二进制文件就能神奇地进行工作,而 “cc” 创建 二进制文件。这相当酷。Nokia 可能通过该设备和其他类似的设备为其开发提供基金。
顺便提一下,如果过了一会儿您只收到晦涩的消息 “Scratchbox is not properly set up!”,那么可能需要启动它。请作为 root 用户,运行 /scratchbox/sbin/sbox_ctl start
,应该就能工作。
如果在尝试停止系统之前,没有运行 sbox_ctl stop
,则系统可能不会利落地关闭。如果您像我一样出于安装 scratchbox 和尝试安装 SDK 之类的不相干的原因重新引导系统,并且从未将系统设置为引导时运行 scratchbox,那么这可能是您意想不到的。
另一个常见的意外情况是 apt-get 在 scratchbox 中运行失败,不能解析 repository.maemo.org。要改正这个问题,请编辑 /scratchbox/etc/nsswitch.conf 并确保 “hosts:” 行中为 “dns”,而不是 “mdns”(注意这不同于 scratchbox 环境中的 nsswitch.conf)。
熟悉的情形:实现 “hello, world!” 程序
第一步总是实现 “hello, world!” 程序。这不难,但是开始之前,必须选择一个目标。目标是一组相对于特定设备(N800)的设置和工具。对于典型的 scratchbox 环境,必须创建一个目标。Maemo 设置实际上创建了一对目标,顺理成章地命名为 SDK_X86 和 SDK_EL。可以使用 sb-conf
命令在两者之间切换;例如,sb-conf select SDK_EL
将选择 目标。
[1]