IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux | Open source  >

Sugar、XO 膝上型电脑和 OLPC

针对 Sugar 进行虚拟化、使用和开发

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

M. Tim Jones (mtj@mtjones.com), 顾问工程师, Emulex

2007 年 7 月 12 日

One Laptop per Child (OLPC) 是一个组织,旨在利用相关软件技术开发低成本的膝上型电脑 (USD100) 以便向全世界的儿童普及计算机教育。由于针对的是儿童,所以它必须提供新颖的用户界面和应用程序以便孩子们可以把玩各种工具来尽情体验和学习。OLPC 的操作系统是 Linux ® 内核的一个端口,并带一种称为 Sugar 的独特界面。在本文中,您将学习有关 Sugar 人机界面的内容,了解如何在标准的 PC 上利用 QEMU 对 OLPC 膝上型电脑进行虚拟化,遍历 Sugar 和 OLPC 的各种功能。

OLPC 简介

OLPC 这个创意源自 Massachusetts Institute of Technology Media Lab,其目标是帮助教育全世界的贫困儿童。 如您所见,这种膝上型电脑的设计清楚地表明了这一点。OLPC 由 Nicholas Negroponte 创建。由于 OLPC 使用 GNU/Linux 作为其核心操作系统,所以它涉及到遍布全世界的大量开源开发人员。在 2007 年 2 月,该项目向启动国家部署了第二个测试机器。图 1 是由 Mike McGregor 拍摄的(在 Creative Commons License 下使用,http://creativecommons.org/licenses/by/2.5/)第二台测试机器的原型。


图 1. OLPC XO 膝上型电脑
图 1. OLPC XO 膝上型电脑

XO 膝上型电脑的硬件

考虑到 100 美元的定价以及 XO 膝上型电脑将会用在差别极大的各种环境中这一事实,膝上型电脑的物理设计显得异常重要。尤其是,它必须既要耐用又要节能。

膝上型电脑还必须抗湿,包括一个橡胶隔膜的键盘和触摸板。它必须抗静电,这也是为什么不能存在旋转介质的原因。它使用闪存进行海量存储(1024MB NAND 闪存)。

由于 AMD Geode LX 处理器具有集成(图形处理器)特性和低耗电要求(433MHz 时典型耗电为 1.3W),所以被选作处理器。另外,还需要很多重要的外围设备,比如 7.5 寸双模薄膜晶体管 (TFT) 显示器、640x480 分辨率视频摄像头、模拟设备立体声卡,甚至 802.11b/g 兼容的 Marvel 无线 Ethernet 芯片集。无线设备使不同膝上型电脑间的网状网络连接成为可能,可用来进行信息共享和协作。

最后,全封闭的电池组可提供 16.5 到 22 瓦小时的连续操作(取决于电池技术)。由于电池是可消耗资源,所以电源管理至关重要。要求至少支持 2,000 个充/放电周期。XO 膝上型电脑也可以使用其他电源,比如太阳能板和汽车电池。

XO 膝上型电脑的软件

XO 膝上型电脑最为有趣之处是其操作系统和图形环境。OLPC 的创意结合了 Red Hat 软件来开发这些组件。Linux 2.6 内核和 GNU 软件构成了操作系统,图形界面则称为 Sugar。它是一种简化的图形界面,专为儿童设计,而小屏幕则由 XO 膝上型电脑提供。

应用程序开发也极具创新性。应用程序或 XO 膝上型电脑上所使用的活动 是一些使用 GTK+ 的 Python 程序。我稍后就会讨论 XO 膝上型电脑中的 Sugar 和 Python 编程。

基本设计

设计者认真地考虑了 XO 膝上型电脑所面向的用户,最终定义了 11 个关键的设计原则。他们将用户锁定为儿童(而非泛泛的大众),并针对其学习之用(而非耗电的视频游戏)。核心的设计原则包括简单性、可用性和可靠性。而可恢复性则是另一个十分有意义的设计原则,它不仅仅是指所做工作的备份,更是为孩子们提供了一种回落到已知系统状态的直观方式。这让孩子们可以跨域对 XO 膝上型电脑的理解的界限尽情体验。关于核心设计原则的更多信息,请参看 参看资料 一节。

如您所见,XO 膝上型电脑的设计从物理设计到用户界面都具有开创性。

虚拟 XO 膝上型电脑

获得一台 XO 膝上型电脑的可能性很小(除非您能一次订购百万台之多),但您可以使用 QEMU PC 仿真器来模拟体验 XO 膝上型电脑。QEMU 是一种开源仿真器,可以仿真整个 PC (包括处理器、显示器、网络、磁盘等等)。借助 QEMU,您可以在另一个操作系统上(比如 GNU/Linux、Microsoft® Windows® 或 Mac OS® X)引导 OLPC XO 映像。

第一步是针对具体的主机下载 QEMU 包(参见 参看资料 一节获得 QEMU 下载信息)。下载和安装了 QEMU 之后,下一步是下载 OLPC XO 映像。您可以从 Red Hat 获取最新映像(有关链接,请参见 参看资料 一节)。

在主机操作系统上安装好 QEMU 和 OLPC XO 映像后,用如下命令引导 OLPC 膝上型电脑:

# ./qemu -L . -hda olpc.img -M pc
            

其中,-L . 选项为 BIOS、 VGA BIOS 和 keymaps 指定目录。-hda 选项指定要引导的映像。该映像不仅包括 Linux 内核映像和引导文件系统,而且还包括用来启动 Linux 的引导区。而 -M pc 选项则指定要仿真的机器(在本例中,就是标准的 PC)。

运行此命令后会出现一个显示引导进程的窗口。首先看到的是加载程序屏幕(在本例中,就是 GRUB,如图 2 所示)。


图 2. OLPC 映像的 GNU GRUB 引导屏幕
图 2. OLPC 映像的 GNU GRUB 引导屏幕

选择 OLPC for qemu stdout target。典型的 Linux 内核引导进程继而出现,如图 3 所示。


图 3. OLPC 映像的 Linux 内核引导消息
图 3. OLPC 映像的 Linux 内核引导消息

伴随内核消息的发出,引导进程的时间也会显示。 就仿真而言,速度看起来还是很快的。当这个进程完成后,就会获得 Sugar 用户界面。





回页首


Sugar 一瞥

Sugar 是 XO 膝上型电脑提供的新的一款用户界面。由于屏幕极小,所以选择采用的是框架而非传统的窗口风格的界面。先来看看 Sugar 桌面(图 4),它会在 OLPC 膝上型电脑引导后出现。在此图中,有 5 个部分对 Sugar 来说非常重要。除了框架的内部之外,框架的每一个边都在界面的组织中代表特定的含义。


图 4. 显示 Home 模式的 Sugar 桌面
图 4. 显示 Home 模式的 Sugar 桌面

框架的内部称为 Current 视图。这或者是 Home 模式(如图 4 所示)或者是当前的活动。注意已经有很多活动被开启了。

框架的顶部被定义为 Place,包括诸多图标,这些图标对于产品膝上型电脑很重要,但此处并没有用到。在左上侧的这 4 个图标是缩放按钮,允许用户将桌面在 Activity、Home、Group 和 Neighborhood 视图间转换。任何活动的程序在这里也可用(目前这里没有活动的程序)。

框架的左侧被定义为 Object,是现代操作系统内的剪贴板的对等物。

框架的右侧被称为 People,包含其他由用户当前操作的 laptop。

而框架的底部则被称为 Action。可以将其看作是活动的启动器。注意 图 4 中显示了很多活动。 可以通过单击它们开启这些活动。例如,如果开启 Sugar Web 浏览器(基于 Mozilla),它就会显示在图 5 中。Action 部分还包括来自其他用户的所有通知和邀请。例如,如果另一个 XO 膝上型电脑用户想要在一项活动上协作,就会在这里出现邀请。


图 5. 用 Sugar 浏览 Web
图 5. 用 Sugar 浏览 Web

注意,如果想要启用 XO 膝上型电脑的联网功能,将需要进行几个额外的步骤。我将在下一节对此作详细介绍。可以参看随 QEMN 发行版打包提供的 QEMU 文档。其中一种方法是在主机操作系统上运行 VPN 解决方案(比如 OpenVPN)。更多细节,请参看 参看资料 一节。





回页首


用 Sugar 进行开发

现在 XO 膝上型电脑映像已经引导完毕,您完全可以从开发的角度在 Sugar 中进行导航了。当焦点在 QEMU 上时,它就会拥有鼠标和键盘,而且所有事件也都会指向它。如果需要从 Sugar 导航回主机,使用 Ctrl-Alt 组合键。要导航回 Sugar,只需在 QEMU 仿真器窗口的任何位置单击。其他的几个键顺序在表 1 中列出。


表 1. Sugar 中的控制键顺序
顺序动作
Ctrl-Alt导航回主机操作系统
Ctrl-Alt-F1XO Linux 登录
Ctrl-Alt-F3返回 Sugar 桌面
Alt-0显示开发人员控制台

开发人员控制台实际上是 4 个由 tab 控制的窗口集。图 6 显示了被导航到终端窗口的控制台。这是一个常规的 Linux 终端,所以像 vi 这样的命令可以用在这里以进行代码开发。


图 6. 开发人员控制台和终端窗口
图 6. 开发人员控制台和终端窗口

终端窗口是一个简单的 bash shell。注意,在这里您可以启用网络功能,如清单 1 所示。


清单 1. 在终端窗口中启用 Internet Protocol (IP) 网络
                
[olpc@xo-12-34-56 /]$ su -
-bash-3.1# ifup eth0

Determining IP information for eth0... done.
-bash-3.1# ifconfig
eth0      Link encap:Ethernet  HWaddr 34.59.00.12.34.56
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500 Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1350 (1.3KiB)   TX bytes:7866 (7.6KiB)
          Interrupt:11 Base address:0xc100

lo        Link encap:Local Loopback
          inet addr:127.0.0.1 Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16346  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)





回页首


创建和安装活动

基本熟悉了 Sugar 以及如何打开开发人员控制台之后,就可以编写简单的活动(Sugar 应用程序)并安装该活动让其在 Sugar 桌面上可用了。首先,需要从开发人员控制台终端窗口引导并导航到活动目录,如清单 2 所示。


清单 2. 移动到开发目录
                
[olpc@xo-12-34-56 /]$ su -
-bash-3.1# cd /usr/share/activities
-bash-3.1#

如果在此目录中运行 ls 命令,就会看到一系列目录,其中包含用于 Sugar 应用程序的 Python 源代码。因为活动也要放到这里,所以需要创建两个目录,如清单 3 所示。


清单 3. 设置活动开发目录
                
-bash-3.1# mkdir TestActivity.activity
-bash-3.1# cd TestActivity.activity
-bash-3.1# mkdir activity
-bash-3.1# cp ../Web.activity/setup.py .
            

作为设置的一部分,需要一个标准文件,称为 setup.py。可以从现有的活动中复制该文件,如上所示。接下来,需要创建 4 个文件,用来实现和描述活动。第一个是活动的源文件,它是一个 Python 脚本,称为 TestActivity.py,如 清单 4 所示。该文件位于 TestActivity.activity 目录。这个 Python 活动创建两个方法,第一个是 click,它是一个回调函数,在按钮被单击时调用。__init__ 函数则在 bundle 被开启时调用。此函数使用 GTK 创建一个按钮并将其添加到当前视图。


清单 4. 新活动的源代码
                
# Source for TestActivity.py
import logging
from sugar.activity import activity
import sys, os
import gtk

class TestActivity(activity.Activity):

	def click(self, widget, data=None):
		logging.info('Button clicked')

	def __init__(self, handle):
		activity.Activity.__init__(self, handle)

		self.button1 = gtk.Button('Button1')
		self.button1.connect("clicked", self.click, None)

		self.add(self,button1)
		self.button1.show()

接下来,创建清单文件,称为 MANIFEST,它只包含一行,即构成此活动的那个源文件 (TestActivity.py)。如果在目录 (TestActivity.activity) 中运行 ls 命令,将会看到清单 5 所示的输出结果。


清单 5. 查看开发目录的内容
                
-bash-3.1# ls
MANIFEST  TestActivity.py  activity  setup.py
-bash-3.1# cat MANIFEST
TestActivity.py
-bash-3.1# 

现在,深入到活动的子目录并添加图标和信息文件。图标文件定义活动所用的映像。它是一个 SVG 文件,如清单 6 所示 (activity-TestActivity.svg)。


清单 6. 活动图标文件的源代码
                
<xml version="1.0" encoding="UTF-8"?>
<DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
  <ENTITY fill_color "#FFFFFF">
  <ENTITY stroke_color "#000000">
]>
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
  <rect x="6" y="19" width="10" height="10" 
   style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
  <rect x="21" y="5" width="10" height="10" 
   style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
<svg>

最后,需要创建活动的信息文件 (activity.info)。此文件描述活动 bundle,如清单 7 所示。


清单 7. 活动信息文件 (activity.info)
                
[Activity]
name = TestActivity
service_name = com.test.TestActivity
class = TestActivity.TestActivity
activity-version = 1
icon = activity-TestActivity
show_launcher = yes

要查看文件放置,可在 TestActivity.activity 子目录运行 ls 命令。应该能够看到 TestActivity.activity 级的 3 个文件和一个目录以及活动子目录内的两个文件,如清单 8 所示。


清单 8. 进一步查看开发目录
                
-bash-3.1# ls
MANIFEST  TestActivity.py  activity  setup.py

activity:
activity-TestActivity.svg  activity.info

至此,文件均已准备完毕,现在可以构建活动 bundle 了。为此,需要使用由 setup.py 文件提供的 bundle builder。如下命令可以安装和共享活动的一个发布:

-bash-3.1# ./setup.py dev
-bash-3.1# ./setup.py dist
            

重启 Sugar 后,可以在当前 XO 膝上型电脑上使用此活动。要安装 .xo 文件(一个归档文件,类似于 Java Archive 或 JAR 文件),可使用如下命令:

-bash-3.1# sugar-install-bundle TestActivity-0.xo
            

要使用此活动,可回到 Sugar 桌面。要实现此目的,可以单击开发人员控制台右上角的 X 。当 Sugar 桌面可见时,单击 Action 框架(在桌面底部)的活动。图标出现,显示为两个呈对角线位置的小正方形。如果将鼠标光标悬停于此图标之上,会出现一个菜单栏,显示 TestActivity。单击此图标,会看到加载到框架的当前视图的活动(图标在 Home 框架显示)。片刻后,活动启动,整个框架变成了一个大的 GTK 按钮。单击此按钮闪现框架(表明按钮被按下)。现在可以转到开发人员控制台以查看 TestActivity 日志以及按钮单击所引发的消息。

要退出此活动,将鼠标放在框架的任何一角。这会使框架的周边再次可见。现在转到框架的顶部,将鼠标放到 TestActivity 图标上,会出现一个菜单栏。现在按下名为 Close 的项,活动即停止。这不是非常有趣,但您尽可以利用 Python 和 GTK 进行更加有趣的操作。





回页首


结束语

尽管 XO 膝上型电脑尚在紧锣密鼓的开发之中,但相应的操作系统和 Sugar 界面已经可用且相当稳定。OLPC 还有专门的 wiki 站点,内有大量文档和技术细节。wiki 页面是了解这个有趣项目以及如何参与这个项目的极佳地点。



参考资料

学习
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

  • OLPC 的主页提供了有关此项目的很多信息,包括其历史和目标以及目前状态等等。

  • 要了解有关 OLPC 硬件规范的更多信息,请查阅 wiki Hardware Specification。 它不仅提供了硬件设计的当前状态,而且还提供了已经应用到 XO 的各种创新。

  • 设计原则 的核心集是针对 XO 膝上型电脑和 Sugar 界面而设计的。本页给出了设计原则的细节以及如何应用这些原则。

  • 虽然还没完成,但用于 Sugar 活动的开发环境已经在开发之中。该环境名为 Develop,是一个针对 XO 膝上型电脑的 Python 集成开发环境 (IDE)(一个开发活动的活动)。

  • Sugar 的图形环境采用 GUI 工具箱 PyGTK 编写。

  • 要获得更多信息,请参见 Sugar 界面,这个 wiki 页提供了有关其设计和使用的大量介绍。

  • developerWorks Linux 专区 获得面向 Linux 开发人员的更多资源。

  • 随时关注 developerWorks 技术事件和网络广播

获得产品和技术
  • QEMU 是个开源的处理器仿真器,可仿真整个 PC,包括其外围设备,比如磁盘、显示器、网络等等。您必须首先下载和安装此包来仿真 XO 膝上型电脑。

  • 您可以从 Red Hat 站点 下载 OLPC XO 映像。该映像不仅包含 Linux 内核和根文件系统,而且还包含典型的供 GRUB 和 LILO 使用的引导区。

  • OpenVPN 允许仿真操作系统使用底层主机操作系统的联网硬件。

  • 针对 Sugar 的活动采用面向对象的脚本语言 Python 编写。

  • 订购免费的 SEK for Linux,包括两张 DVD,内含最新的 IBM for Linux 试用软件,包括 DB2®、 Lotus®、Rational®、Tivoli® 和 WebSphere®。

  • 使用 IBM 试用软件 构建您的下一个 Linux 开发项目,该软件可从 developerWorks 直接下载。


讨论


关于作者

M. Tim Jones

M. Tim Jones 是一名嵌入式软件工程师,他是 GNU/Linux Application ProgrammingAI Application Programming 以及 BSD Sockets Programming from a Multilanguage Perspective 等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式架构设计,再到网络协议的开发。Tim 是位于科罗拉多州 Longmont 的 Emulex Corp. 的一名顾问工程师。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


Linux 是 Linus Torvalds 在美国和/或其他国家的注册商标。 Microsoft 和 Windows 是 Microsoft Corporation 在美国和/或其他国家的注册商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款