在Raspberry Pi上使用Java SE Embedded
译者前言:
很久以来我都很期待Java能在嵌入式领域有所作为,之前的JavaME实在令我大失所望,不但被严重“阉割”,而且在硬件方面也没什么厂商支持。所以Java除了在图形界面设计(被人诟病的Swing)方面存在遗憾之外,在嵌入式领域也几乎被人遗忘。我不得不继续捧着Qt(一个跨平台的C++图形库)在嵌入式开发中漫无边际的狂奔。我不是对Qt存在偏见,我也非常的喜欢Qt,但是我更喜欢Java,它让我真心的陶醉其中。
终于让我期待已久的时刻到来了,在2012年的JavaOne大会上,Oracle展示了基于嵌入式Java SE开发的一个“玩具”——机械手臂。以此推出了2款嵌入式新产品:Java SE Embedded和Java ME Embedded。除此之外还有一款Java SE Embedded升级版——Java SE Embedded Suite。这个套件将Java SE Embedded,Glassfish,WebService等都集成在一起,用于更高性能的嵌入式设备。非常令人振奋的消息,顿时让我热血再次沸腾。毫不犹豫的到ICKey.cn(“树莓派”开发板的指定代理商)上化了500多元买了一套开发板回来(我KAO,35美元的廉价版到了中国竟变成了500多,我KAO),准备第一时间尝试一下嵌入式Java的乐趣。据外国媒体报道,英国一大学教授,用一块“树莓派”B型版加上一个砖头大小的信号发射器居然搞了一个功能完备的电信基站。可见这块开发板的强大,已经超出了原本发明它的初衷(原本只是为了教育小朋友学习编程的“玩具”)。
在Oracle的官方网站上看到了这篇Blog ,觉得对于嵌入式Java的入门非常的有帮助,特此翻译一下,方便其他的同学学习和参考。由于本人E文烂,凭借词霸和Google翻译,所以有错误之处还请谅解,翻译的主要目还是为了传播推广嵌入式Java技术。本次我自己的实验是开发一个家庭网络多媒体中心,类似机顶盒。顺便验证一下号称为嵌入式设备而生的OSGi是否真的有其存在的价值,后续我也会将自己的实验过程写成文章与大家分享。OK,前言到此结束,进入正文。译文开始:
在不到一个小时之内,如何获取Linux并在“树莓派”上运行Java SE Embedded呢?
这是一块比信用卡还小,并且和一本Java编程书籍相同价格的东西。
这就是“树莓派(Raspberry Pi)”微型电脑,它可以为headless(所谓Headless是指不需要显示,键盘,鼠标等设备)嵌入式应用程序提供全功能的Java SE运行时支持。这篇文章可以让你了解在“树莓派”上使用Java编程的相关主题,它们包括:注意:文章中提到的一些内容会存在潜在的变化,尤其是你在电脑主机(台式机或是笔记本)上的操作可能和你在“树莓派”上执行的操作会有所不同。请运用你的知识和偏好(一些主题可能会在“可选的Linux优化和调整”章节中提到)来创建一条符合自己需要的工作流程。
一. “树莓派”开发板:
“树莓派”是一块将700MHz ARMv6 CPU和图形处理器(GPU)整合在独立芯片中的小巧(和信用卡大小一般)而低功耗(只需要5V电源就能启动)的开发板。GPU和CPU共享256MB内存(总内存为512MB)。另外还可以连接一些外围设备,比如USB,以太网,HDMI,音频,SD卡,RCA视频和GPIO(译者注:目前还没有WIFI模块,但是板子上有2个USB接口,可以连接USB的无线网卡。近期还会有摄像头模块上市)。图一展示了一块“树莓派”B型的开发板并且插入了一张SD卡用于扩展。SD卡扮演着特殊的角色:“树莓派”的启动依赖SD卡。本文介绍的大部分内容就是为了指导您如何在一张可引导的SD卡上创建和修改文件。

(图一)“树莓派”B型开发板
你可以在“树莓派”上使用USB接口的键盘和鼠标并且还可以连接HDMI的显示器或电视机(可以达到1080P)。板子上的以太网提供了另外的可选项:通过SSH连接到其他网络中的主机并可与之通讯。在“可选的Linux优化和调整”章节中我们会讨论如何开启SSH登录。
二. 先决条件:
为了准备可以运行Java SE Embedded的“树莓派”B型开发板,你需要准备如下内容:
一个可以通过“树莓派”以太网口连接的有线网络。并且网络必须提供DHCP的动态IP地址获取服务。一台装有 Linux的电脑并和“树莓派”连接在同一网路中。你也可以在Windows或是MAC主机上执行相同的操作,不过这些内容不会在本文中进行讨论。你必须要有主机的root登录权限。此外你还需要如下内容:一个可以从网站下载文件的途径,例如WEB浏览器或是wget工具。
一个磁盘分区工具。这里我们使用的是 GParted,它是一款简单而又强大的磁盘分区工具。如果你还没有GParted,那么你可以通过在主机上执行如下操作来获取并安装它:
(图二)初始化的SD卡分区
这里有三个分区:
/dev/sdb1:启动分区。
/dev/sdb2:Linux根文件系统,已经使用了1.5G的空间。
/dev/sdb3:Linux的交换空间(swap area)。
大概有一半的SD卡空间未被分配。有一块很大的free空间跟在/dev/sdb3分区之后。为了将free空间追加到/dev/sdb2上(文件系统),我们将暂时的删除/dev/sdb3,然后扩展/dev/sdb2,最后再重新创建/dev/sdb3分区。
在分区列中,选择/dev/sdb3(linux-swap),右击鼠标并选择删除。虽然分区会被显示成已删除,但是GParted会将此操作放入队列中,稍后才会真正的执行它。
(图三)SD卡删除分区命令放入队列中
在分区列中,选择/dev/sdb2,这是一个Linux文件系统,右击鼠标,选择Resize/Move。会弹出一个对话框,拖拽右边的箭头直到“Free space following”为大约512左右(或是你想要为swap空间留出的空间大小)。你并不需要拖拽到512那么精确,因为这个精确的大小并不重要。(图四)512MB的SWAP空间
单击Resize/Move将其放入执行队列中,在弹出的“Movinga partition”警告对话框中点击OK。
现在我们已经调整了文件系统分区的大小,接下来我们将重建一个swap分区。选择512MB的未分配空间,右击鼠标并选择New。
在Create new Partition对话框中,选择“File system”下拉框中的“linux-swap”。
(图五)新建 Swap分区
点击Add。
在GParted主界面上,选择Edit -> Apply All操作。GParted将执行所有我们之前放入队列中的操作。在“Are you sure”对话框中点击Apply。重新分区是一个需要轻松运行几分钟的漫长操作,对话框中会显示进度。当它完成后点击Close。
(图六)新的分区映射
退出GParted并弹出SD卡,接着你就可以尝试你的第一次启动了。
第一次启动
注意:为了以下这些步骤,你必须已经有一些设备并将其连接到“树莓派”上:一个显示器,一个键盘,和一个可工作的以太网。
断开“树莓派”的电源,插入Linux SD卡到插槽中,然后再次连接电源。几秒钟之后,启动进程的消息将显示在显示器上。如果不是这样的话,那可能是SD卡的类型错误或是格式不正确。
如果在整个第一次启动中出现一般的错误消息,那是因为我们的一些服务还未被配置所致。第一次的启动也有可能因为等待端口映射的关闭而出现挂起。作为一个控制台消息指示,你可以让它继续运行也可以断开“树莓派”的电源并重新启动它。随后的启动会相对较快。
当你看到登录提示符之后,输入用户名和密码登录“树莓派”。在写这篇文章的时候,默认的用户名和密码分别是:“pi”和“raspberry”。
注意:不兼容的键盘会阻碍登录,例如,会产生重复的字符。如果你不能登录,请尝试使用另一个键盘。如果“pi”和“raspberry”不能工作,请咨询Linux发布的网站。
如下方法可以获取并写入“树莓派”的IP地址:(图七)第一个下载连接
在Java SE Embedded 7一栏,点击EABI, VFP,SoftFB ABI, Little Endian。会出现一个调查页面。
完成调查并点击提交,一个验证页面会出现。
检查验证页面的正确性(尤其是你的email地址),然后点击提交。过一段时间,一封JavaSE-Embedded-LinkNotify的电子邮件会出现在你的收件箱中。
点击电子邮件中的连接,会出现另外一个下载页面(一些细节可能会与本文中的内容有所不同)。
(图八)第二个下载连接
选择“Accept License Agreement”,然后点击“ARMv6/7 Linux - Headless”连接。
注意:在撰写本文时,ARMv7 Linux – Headful还没有在“树莓派”上进行测试。ARMv7Linux - Headless - Server Compiler不能运行在“树莓派”上,因为该软件需要ARMv7的芯片。
保存.gz文件到你的downloads目录。
通过网络并使用pi用户登录到“树莓派”,并为Java下载文件创建一个目录:(图九)时区用户界面
使用上下箭头键在区域和城市之间移动选择光标。使用左右箭头键来选择<Ok>或<Cancel>。按回车键来确认选择。
如下命令用来设置区域:(图十)亚克力的透明外壳,盖子上还有镂空的LOGO标志
(图十一)盖子是可以翻起来的,方便在板子跳线(GPIO)或清理灰尘什么的,设计非常人性化(壳子是要另外买的不是标配)
(图十二)果然就是一张银行卡的大小