Bug Labs: 技巧与应用
您可能在 Mike Diehl 发表于 2008 年 8 月号的 Linux Journal 杂志上的文章中读到过开源模块化设备公司 Bug Labs(参见“资源”部分)。我们又回来了,想告诉您更多信息!在本文中,我将向您介绍关于 BUG 的一些基本信息,包括我们的最新消息,然后提供一些关于您可以使用 BUG 做什么的想法。
BUG 是一个用于构建设备的可模块化开源系统。四个模块可以卡入 BUGbase,它带有一个 ARM 1136 MX31 嵌入式处理器。BUG 运行 2.6.27 版本的 Linux 内核和一个从 Poky Linux 定制的发行版,Poky Linux 衍生自 OpenEmbedded 发行版。OpenEmbedded 是一个专门用于嵌入式系统的发行版。它可以交叉编译 JVM 和其他语言运行时环境。此外,还可以使用 BitBake 程序为 BUG 编译数千个其他软件包(应用程序、库等等)。
在 BUG,开源不仅意味着源代码,还意味着灵活性和选择权。正如 Mike Diehl 在他之前的文章中写道,很容易ssh进入 BUG。登录后,您将进入 BusyBox shell,从那里,您可以进入文件系统,安装和运行软件,killall以及更多(尽管我们不推荐最后一个)。
我们希望用户能够选择他们喜欢的语言、他们偏爱的界面以及实现他们目标的模块。目前出售的模块有 BUGview(全彩色触摸屏 LCD)、BUGmotion(运动传感器/加速度计)、BUGlocate(GPS)、BUGsound(音频)和 BUGvonHippel(我们的分线板,带有串行、通用 I/O、I2C、SPI、DAC、ADC 等)。BUGvonHippel 以麻省理工学院的 Eric von Hippel 博士的名字命名,以表彰他在开源运动中的贡献以及他的著作 Democratizing Innovation。
在接下来的几个月里,将推出 BUGwifi(也包括蓝牙)、BUGbee(802.15.4 协议)和 BUG3g GSM (3G),随后是 BUGprojector (pico) 模块。我们当前模块的更多规格信息可以在我们的网站上找到(参见“资源”部分)。
为了连接所有这些模块并与内核通信,我们在我们自己的 BMI(Bug 模块接口)包装器中导出了 I2C、SPI、UART、I2S、摄像头和显示接口,以使设备尽可能灵活。然后,您可以将任何模块放入任何插槽(是的,它们是热插拔的),以自下而上的方式创建您自己的开源小工具或原型平台。
BUG 在您可以用来编码的语言方面也很灵活。我们支持 BUG 上的 Java、C、Python 和 Ruby,但您可以用任何您想要的语言编写,所以当您让 brainfork 工作时请告诉我们。
虽然我们鼓励使用其他语言,但您也应该准备好挖掘软件包或编写一些库。我们的一位开发人员最近在我们的社区博客(参见“资源”部分)上撰写了一篇关于在 BUG 上构建 C/C++ 程序的教程。此示例使用名为 BitBake 的 Python 程序,以及名为 recipe 的构建描述文件,来生成用于特定计算机架构的可执行程序和其他工件。Recipe 是关于程序如何构建的元数据,并为所有软件包的部署提供了一种一致的方式。最后,这允许 BitBake 程序创建包含整个操作系统的镜像。
在 BUG 上安装新软件包时,您可以使用 ipkg 程序从 BUG 的 shell 安装。Ipkg 类似于其他 Linux 发行版中的 yum 或 apt-get,并提供了一种在 BUG 上安装新软件的简单方法。我们在我们的网站上维护了一个 BUG 程序仓库(参见“资源”部分)。
您还可以用 BUG 做什么?从技术上讲,您可以用 BUG 做任何您想做的事情;它是一台完全可编程的嵌入式计算机。我们意识到这有点含糊。由于 BUG 是开源的,想象一下将任何手持设备转变成您自己的在 Linux 上运行的开源版本,让您比其闭源同类产品有更多的选择。
另一个用途是无需焊接或经历无数制造难题即可创建硬件的能力。您可以使用 BUG 作为原型系统来创建和重新创建您的问题的解决方案。当然,您也可以创建一个在您当地的百思买或无线电小屋买不到的新设备。
我们的应用页面(参见“资源”部分)包括我们的社区和 Bug Labs 团队上传的 Java 应用。浏览当前的应用是了解可以用 BUG 做什么的最好方法。虽然这些应用中的许多都是概念验证,但这些示例展示了 BUG 的一些可能性。最后,BUG 拥有一个不断增长的用户社区,他们在硬件和软件方面都定义了新的 BUG 功能。一些社区成员甚至使用我们在资源和文档 wiki(参见“资源”部分)上找到的原理图和 CAD 文件创建了自己的模块。
每个模块都有一个 Hello World 应用程序以及许多概念验证应用程序。这些对于了解每个模块的功能非常有用。例如,BUGmotion 可以存储从三个不同轴(X、Y 和 Z)获取的数据,并检测各种可编程范围内的运动。只需将此模块与 BUGbase 结合使用,您就可以对 BUG 进行编程,并在飞行前将其扔到您的行李中,以绘制每个轴在颠簸时的数据。请记住,在没有交流电源的情况下,可充电电池的续航时间目前为三到四个小时。
例如,如果您想直接在您的 BUG 上查看终端,BUGview 非常有用,尽管键盘很难在没有小手指的情况下打字,因此我们建议通过 BUGwifi 使用蓝牙键盘,或通过 BUGvonHipple 使用 USB 键盘。
您还可以对 BUGview 进行编程,使其充当一个可以向其他模块发送数据并在按钮被按下时更改颜色作为反馈的大按钮。
BUGlocate 可用于收集有关您的 BUG 所在位置的数据,或放在您的汽车中以监控您青少年的驾驶模式(尽管这对我们来说似乎有点老大哥)。
BUGsound 可以播放保存在 SD 卡上的文件。与加速度计结合使用,它可以根据握持位置发出不同的噪音。在我们的应用页面上搜索 Phunky 应用以了解更多详情。
BUGwifi 开辟了许多选择,从通过蓝牙连接不同的设备到在检测到运动时向您的 Twitter 帐户发送消息。
BUG3g GSM 也将拓宽数据传输能力的视野。数据可以从您的手机或其他设备发送或接收。想象一下您的医生在 BUG 上给您开处方,数据立即发送到您的病历文件和您的药剂师——当然要加密!
许多有趣的应用都来自网络功能。BUG 自带 Web 服务器,并允许您通过访问相应的 Web 服务来查询每个模块的数据。例如,您可以将您的 BUG 连接到您的网络,在您的浏览器中输入 http://10.10.10.10/service/picture(BUG 的默认 IP 地址),并查看使用 BUGcam2MP 拍摄的 JPEG 格式图片。BUG 使用 RESTful Web 服务和 HTTP 操作来操作它提供的资源。以这种方式提供数据非常重要,因为应用程序越来越依赖于不同设备之间的通信。
除了使用现有的 Web 服务之外,您还可以使用 Java Servlet 实现您自己的 Web 服务或 Web 前端。例如,我们最近制作了一个 BUGbot——带有轮子的 BUG。我们创建了一个从 BUGbot 提供的网页,可以控制设备的方向和速度。然后我们使用 BUGbot 在办公室周围行驶并拍摄照片。BUGbot 很容易制作。我们将电机屏蔽罩连接到 BUGvonHipple 模块,将其连接到一些轮子上,在轮子上放一个三脚架,在三脚架上放一个 BUG。连接上 Wi-Fi 模块 (BUGwifi) 后,这个 BUGbot 还可以将捕获的图像上传到 Flickr 或 Twitter。
许多熟悉的库已被移植到 BUG,从而实现了您在任何 Linux 机器上都期望的功能类型。例如,流行的开源计算机视觉库 OpenCV 在 BUG 上运行。OpenCV 允许应用程序收集和分析来自图像和视频流的数据。借助 OpenCV,您可以将 BUG 用于物理计算应用程序的斑点检测和跟踪。OpenCV 还使 BUG 能够为安全应用程序进行人脸、人物和运动检测。
我们在 BUG 的系统管理员在他的 BUG 上运行了一个 SIP 电话,并在我们的社区博客上写了关于 IPv6 和 BUG 的可能性的文章:IPv6 允许主机到主机的通信。主机到主机可以意味着 BUG 到 BUG、PC 到 BUG、BUG 到 PC、BUG 到(其他设备)、(其他设备)到 BUG、BUG 到(某些 Web 服务),当然还有(某些 Web 服务)到 BUG。可能更多。BUG SIP 电话由一个 BUG 和 BUGvonHippel 模块组成,耳机通过 BUGvonHippel 上的 USB 端口连接。要拥有 BUG SIP 电话,您需要一个 SIP 软件客户端、一个 SIP 提供商和开源 Asterisk PBX。在网络带宽充足的情况下,质量清晰,几乎没有延迟。
当我们在讨论数据通信时,R-OSGi 是由 Jan Rellermeyer 和 Michael Duller 创建的,它代表 Remote OSGi。此应用程序允许服务器通过远程访问透明地连接。Bundle 能够像本地服务一样在网络中移动。此应用程序不仅对 BUG 很重要,对 Java 社区也很重要。Bug Labs 的一位开发人员使用 R-OSGi 创建了一个摄像头应用程序,该应用程序可以动态绑定到本地网络上的任何摄像头。R-OSGi 允许以通用方式发生这种情况,以便任何应用程序的依赖项都可以由另一个支持 R-OSGi 的设备透明地提供。
音乐服务器是一个使用 BUGwifi 和 BUGsound 的应用程序。音乐文件存储在 BUG 的 miniSD 卡上,可以通过 IP 地址访问。您可以将您的手机或另一台计算机指向 BUG 的 IP 地址,并从房间的另一端甚至可能(正确配置后)从大陆的另一端选择要播放的歌曲。phoneME 中不存在集成的音频/MP3 支持,因此它使用 madplay,一个命令行 MP3 播放器。歌曲可以直接通过连接到扬声器或耳机的音频模块播放——音频模块包含线路输入、线路输出、麦克风和耳机插孔。
社区成员创建的另一个有用的应用程序是 GPSAlarmClock。此应用程序被编程为在到达目的地而不是在特定时间发出声音。这使用了 PositionHelper 类和 OSGi 服务来帮助提高其准确性。如果您有很长的火车通勤或公路旅行(前提是您不开车),GPSAlarmClock 会很有帮助。
Chris Wade,一位活跃的社区成员,也称为 cmw,将 Quake 移植到了他的 BUG 上。他使用 QuakeSDL 将其拼凑在一起。完整的说明在他的网站上提供(参见“资源”部分),但这就像下载二进制文件并解压缩它,然后执行它一样简单。他最近为 QEMU 添加了 mx31 支持,这允许我们在完全虚拟化的环境中运行 BUG。不幸的是,QuakeSDL 不支持操纵杆,因此 Wade 亲自接手,通过破解 Guitar Hero 中的吉他作为 Quake 的操纵杆运行。有传言称 Ms PacMan 接下来会到来。
Bug 一直在向开源社区学习很多东西,因此我们了解回馈该社区的重要性。我们通过几种方式回馈。我们积极参与 OpenEmbedded 社区,我们的艺术总监甚至为 OpenEmbedded 项目创建了新外观。我们的软件主管是 Eclipse 的贡献者,我们的许多工程师都参与了 Eclipse 社区。我们公开地公开和讨论我们所有的代码(都在我们的 svn 存储库中可用)、项目和技巧,希望其他人能偶然发现他们问题的答案。我们开源了我们所做的所有驱动程序工作,为 Concierge OSGi 项目贡献代码,并为许多开源项目提交缺陷报告。我们还回馈了各种 Linux 项目社区,例如 Linux 无线社区 Libertas。我们可以在 Jalimo 上找到我们的许多工程师发布和回复关于 ARM 上 FOSS Java 的讨论,主题涉及带有 Tarrent 的 OpenJDK 和 phoneME JVM。
Bug Labs 回馈的另一种方式是通过我们的 Test Kitchen。这是一个小型电子实验室,位于我们在纽约的办公室,周一至周五中午 12 点至晚上 7 点向公众开放。欢迎大家携带自己的项目(无论是否涉及 BUG),使用实验室中的各种微控制器,或者只是来玩 BUG。我们也鼓励像 Make:NYC 和其他类似团体使用 Test Kitchen 举办活动。为黑客和修补匠提供开放空间的目的是促进协作和创造力,分享想法并相互学习。我们要求您在计划来访时通过发送电子邮件至 alicia@buglabs.net 预约时间。
如果您对 BUG 有任何进一步的疑问,我们每天都在 Freenode 上的 #buglabs IRC 频道上。我们的开发团队随时准备提供帮助,我们的社区成员也可能会加入并提供他们的建议。经常回来查看我们;更新定期发生。
资源
“BUG:基于 Linux 的硬件混搭”,作者:Mike Diehl,LJ,2008 年 8 月:www.linuxjournal.com/article/10125
Bug Labs: buglabs.net
BUG 社区: community.buglabs.net
BUGrepository: repo.buglabs.net
BUG Wiki: buglabs.net/wiki
社区应用: buglabs.net/applications
BUG Base 上的 Quake: bug.cmw.me
Bug Labs 团队成员 Alicia Gibb 是一名研究员和快速原型设计师。作为 Bug Lab 的 Gadget Wrangler,她管理 Test Kitchen,以探索模块化技术组件提供的创新。她最近上了一门 UNIX 课程,其中男女比例为 2:6。倒退。重读。女孩力量!