BUG:基于 Linux 的硬件混搭

作者:Mike Diehl

工字梁积木、林肯积木、埃里克特玩具套装、乐高——我想我小时候几乎拥有所有类型的积木玩具。现在我已经长大了,我仍然喜欢玩玩具,仍然喜欢搭建东西并将它们连接在一起。只是现在,我的玩具更加精密复杂,其中一些甚至很实用。我认为软件开发对我极具吸引力,很大程度上是因为我可以使用我的创造力,利用一些软件构建模块来构建以前不存在的应用程序。我认为大多数程序员和 Linux 用户都能体会到这种吸引力。

然而,许多我希望在软件中实现的真正巧妙的功能通常不受硬件支持。例如,我家的恒温器不会与我的群件通信,以了解我何时回家并希望房屋被加热或冷却。我的数码相机不会与我的 GPS 通信,以将位置信息嵌入到我拍摄的照片中,而且我无法使用我的 PDA 为我的照片添加标签。为了能够构建这样的功能,我们需要硬件足够开放,以便我们能够对其进行破解,并且功能足够强大,以便我们能够用它做一些有意义的事情。最后,我们需要硬件具有内置的各种功能。我有一个这样的设备;它被称为 Bug Labs 的 BUG,它是我在一段时间内见过的最酷的东西。

BUG 是一台嵌入式 Linux 机器,最多可接受四个外部模块,这些模块提供各种功能。例如,我收到的 BUG 有一个彩色触摸屏模块、一个 GPS 模块、一个 2 兆像素数码相机模块和一个带有运动传感器的加速计。所有这些模块都插入到基本单元中。一旦插入到基本单元中,模块就会通过内核设备和 Java API 公开其功能。其想法是,您编写一个程序,将这些功能组合成有用或仅仅是有趣的应用程序。Bug Labs 的 CEO Peter Semmelhack 将其描述为硬件混搭。

当我收到我的评测单元时,我在 FedEx 的停车场打开了包装,简直不敢相信我所看到的。基本单元只有 5 英寸宽、2.5 英寸深,厚度不到半英寸。单元顶部有两个模块端口,底部有两个端口。安装所有四个模块后,整个单元可以放在您的手掌中,大小与大型数码相机差不多。网站表明,相机模块可以以每秒十帧的速度输出静止帧或 MPEG 视频。该单元配备 LCD 状态显示屏、四个软件可定义按钮、两个菜单按钮、一个 USBtoGo 端口和一个压电扬声器——所有这些以及一个三脚架安装座!

该单元还配备了一个已安装的 512MB MMCmicro 存储卡。我痛苦地发现,BUG 将其根文件系统存储在此处。我决定看看里面有什么,所以我将存储卡放入我的 PDA 中,当然,PDA 重新格式化了该卡,并相当漂亮地搞砸了我的 BUG。幸运的是,我能够从 Bug Labs 网站下载一个新的镜像,并在几分钟内重新启动并运行。根镜像仅占用可用 512MB 中的约 30MB,因此应该有足够的空间用于用户程序、图片和数据。

该单元明显缺少任何类型的标签。没有任何按钮被标记,模块也没有,尽管模块确实带有 Braille 标记。这并没有使该单元难以使用,但它确实使其外观整洁。它还为底盘改装打开了可能性,这加强了 BUG 将用户置于控制之中的理念。

我向我的妻子和我认识的每个其他书呆子展示了我的评测单元,每次的反应都相同。起初他们不知道那是什么。在我解释了它是什么以及它可以做什么之后,他们简直不敢相信。通常,他们离开时会说:“这真是太酷了!” 确实如此。

正如我之前提到的,BUG 通过 Java API 公开其所有功能。我不得不承认我不是 Java 的忠实粉丝,但我理解 Java 是一种很多人已经掌握的语言,几乎任何人都可以学习。Java 也是一个开放标准,值得庆幸的是,正如我将在本文后面讨论的那样,Bug Labs 完全致力于开放标准。

连接和配置后,BUG 可以与 Eclipse IDE 无缝集成。按照一些简单的说明操作后,我能够让 Eclipse 识别我的 BUG 和所有已安装的模块。然后,Eclipse 向我展示了一个编程和硬件集成环境,即使是我也可以使用,而我不是 Java 程序员。Bug Labs 支持站点提供了许多免费的源代码示例。我能够在几分钟内下载并安装一个计算器应用程序以及一个数码相机应用程序。示例代码编写良好,API 似乎很直观。Bug Labs 网站上有大量关于 API 的文档。我以前从未有充分的理由变得精通 Java——直到现在。像我这样的书呆子可以用这个设备获得很多乐趣。

Bug Labs 甚至提供了一个可从 Eclipse 内部访问的虚拟 BUG 环境。虚拟环境允许您将模块插入到模拟的 BUG 中,并在虚拟设备上直接运行基于 Java 的应用程序。虚拟 BUG 的行为几乎与真实的 BUG 完全相同。显然,例如,GPS 模块提供虚假数据,但它仍然可用于软件开发和测试。您甚至不必拥有 BUG 即可为其开发软件。

由于我不是 Java 程序员,而且我不使用 Eclipse,所以我对与其他 BUG 交互的其他方式非常感兴趣。将其连接到我的网络一点也不难。该设备的基本单元没有以太网或 Wi-Fi 功能;它通过 USB 连接到网络。这意味着我必须升级我的工作站上的内核以启用 USB 网络连接,USB 网络连接以 usb0 的形式呈现,并且就像任何其他网络设备一样工作。请注意,与大多数 USB 设备一样,usb0 设备在 BUG 连接并完成启动之前不可用。

一旦 BUG 启动,它就会运行 TWM 窗口管理器。将我的工作站配置为与其通信非常简单,尽管 Bug Lab 的网站上的文档使其比必要的更复杂。该网站表明您需要安装 ifplugd,我认为这是一个很棒的程序,但在此情况下不需要。您所要做的就是使用正确的 IP 地址和网络掩码配置 usb0 设备。我所做的是

ifconfig usb0 10.10.10.1 netmask 255.255.255.0

BUG 的 IP 地址为 10.10.10.10,并期望在 10.10.10.1 找到其默认网关。我的工作站必须配置为转发网络流量

echo 1 > /proc/sys/net/ipv4/ip_forward

之后,我能够 ssh 进入该设备

ssh root@10.10.10.10

使用 root 作为默认密码,并将其更改为更安全的密码。您还应该在 BUG 上配置 /etc/resolv.conf,以便 DNS 正常工作。

登录后,您将看到一个 BusyBox 提示符。您应该随意查看一下。您看到的许多内容对您来说都很熟悉。当您开始与应用程序管理器交互时,乐趣就开始了

telnet localhost 8090 

输入帮助给出了您可以发送到应用程序管理器的命令列表。为了让您不再悬念,我将告诉您可以借助 install 命令从 Internet 下载应用程序。例如

install http://www.buglabs.net/application/download/43

这会安装 BasicCalculator 应用程序,该应用程序可从 Bug Labs 网站获得。通过使用 bundles 命令,您可以确定已分配给此应用程序的 ID。在我的例子中,该应用程序被赋予了 ID 30。然后,您可以使用以下命令启动该应用程序

start 30

在提示符下发出此命令后不久,您将在触摸屏上看到一个四功能计算器——假设您已安装触摸屏模块。我发现用手指与触摸屏交互并不是非常准确。一旦我从我的 PDA 之一中找到一支手写笔,我就能够轻松地使用 BUG 触摸屏。

Bug Labs 网站上提供了几个应用程序。它们往往编写良好,并且可以作为很好的示例程序来学习。Bug Labs 网站上提供了示例代码,用于练习每个可用的模块以及 BUG 附带的 Java 抽象窗口工具包 (AWT)。

Bug Labs 在其产品的开放性方面有着非凡的眼光。借用 CEO 的一个术语,Bug Labs 拥抱“激进的开放性”。这项政策反映在使用 Linux 作为其系统的核心、Java 作为主要开发语言以及系统和编程 API 的完整文档中。但是,它不止于此。Bug Labs 甚至记录了其模块插入的连接器的引脚排列。我被告知,如果有人想开始为 BUG 生产第三方模块,Bug Labs 将支持这项工作。这项政策以及设备的灵活性和复杂性,使 BUG 成为黑客梦想成真的设备。

每个产品都有其缺点,BUG 也不例外。没有任何按钮和连接器被标记的事实使得该设备不够直观。我实际上不得不查看随附的文档。凭借如此小的外形尺寸,这款设备非常适合用于移动应用程序。因此,尽管 USB 网络连接可以完成工作,但 BUG 确实需要以太网或 Wi-Fi 功能。我被告知很快就会推出以太网模块。

从基本单元上移除各种模块有时有点令人不安。闩锁机构将模块牢固地固定到位,并且通常很难卸载它们。起初,甚至不清楚如何进行卸载。现在已经多次移除和更换模块后,我已经习惯了必须比预期更用力地按压,并且单元的底盘比看起来更坚固的事实。话虽如此,我仍然没有鼓起勇气在设备运行时更换模块,尽管我被告知它们是热插拔的。

Bug Labs 网站正在测试他们计划在 2008 年第二季度发布的一些模块。QWERTY 键盘将是一个受欢迎的补充。虽然 BUG 有一个内置扬声器,但质量相当差,因此带有 I/O 插孔的扬声器模块会很好。这些承诺的模块似乎都没有达到与已有的模块相同的水平。很难与带有外部天线连接的 GPS 模块或运动传感器模块竞争,但他们正在尝试。我收到了 Bug Labs 的联系人发来的一封电子邮件,表明他们的新模块研发清单上大约有 80 个新模块。他们清单上的一些模块包括电视调谐器、伺服接口、游戏控制器、条形码扫描仪、3G 调制解调器和盖革计数器!

我在 Bug Labs 的联系人继续描述他们正在开发的一个模块,该模块将为 BUG 打开一个全新的定制世界。他们即将发布一个模块,该模块将公开 BUG 的所有硬件信号,并以类似于面包板或分线盒的方式呈现它。有了这样的模块,将 BUG 与 PIC 微控制器或外部继电器组或 Roomba 连接起来似乎相当容易——但我跑题了。

回想起我之前对现有电子设备不足之处的抱怨,我们真的可以用 BUG 做什么?我有一些完全可行的建议,我希望这些建议能激起您对为 BUG 开发程序的兴趣。

青少年的父母可能会有兴趣使用 BUG 来跟踪他们孩子的驾驶习惯。凭借内置 GPS、加速度计和近 512Mb 的内存,跟踪孩子去哪里以及他们开多快并不困难。这样的设备可以安装在后备箱中,并且如果孩子决定移除该设备并将其藏在图书馆(他告诉父母他将在那里),该设备可以感知到它正在被移动,使用运动检测器模块,并开始拍摄事件——当场抓获!

但是,这对我来说有点太像“老大哥”了。我可以看到给一群童子军在露营时使用 BUG。该设备可以预先编程各种目标的 GPS 坐标。会告诉孩子们使用 GPS 定位目标并拍摄照片。BUG 可以验证孩子们是否已到达正确的位置,并存储每个目标的注释照片。加速度计模块可用于测量男孩们在徒步登上山口和进入山谷时的最小、平均和最大速度。这可以演变成不同群体之间的计时赛。

我可以继续说下去,但我认为您已经明白了。这些设备目前都没有上市。当然,您可以使用 GPS 和数码相机,并获得上述大部分相同的功能,但 BUG 的部分吸引力在于,所有这些功能都组合在一个单元中,并在用户可编程的软件控制下。安装适当的模块后,您可以编程 BUG 来执行您希望它执行的任何操作。然后,通过安装不同的模块并运行不同的应用程序,同一个单元可以提供完全不同的功能——这是您真正只受想象力约束的少数情况之一。

我没有足够的空间来充分探索 BUG。我已经花了几个小时浏览 Bug Labs 网站。我没有写关于嵌入式 Web 服务器和相关的 Web 服务 API。我没有写关于底层 Linux 系统。我没有写关于可从网站免费获得的 SDK 的详细信息。我没有写关于系统如何托管名为 OSGi 的面向服务的 Java 运行时组件来简化软件开发。对于如此小的设备,学习曲线却出奇地陡峭。最初吸引我使用 Linux 的是,我可以学习使用 Linux 快速完成简单的任务,而且我可以研究 Linux 多年而永远不会学完所有内容。我认为 BUG 将提供非常相似的体验。

资源

Bug Labs 网站:www.buglabs.net

BUG SDK 下载站点:buglabs.net/sdk

BUG Wiki:bugcommunity.com/wiki

BUG 文档:bugcommunity.com/forums

入门指南:buglabs.net/products

Mike Diehl 在新墨西哥州阿尔伯克基市的 Sandia 国家实验室为 Orion International 工作,担任 Linux 服务器管理员。Mike 与他的妻子和三个小男孩(包括一个新生儿)住在一起,可以通过电子邮件 mdiehl@diehlnet.com 联系。

加载 Disqus 评论