这部分的内容:
- 前言
- 什么是Scratchbox?
- Scratchbox的组成
- 安装的前提条件
- 自动安装Scratchbox
- 自动安装Maemo SDK
前言
这部分主要介绍安装开发环境以及其先决条件。
Maemo SDK
含有开发应用的库和工具。这个
SDK
必须安装在一个称作
Scratchbox
的开发环境中,这样才能使用。
我们首先开始安装
Scratchbox,
之后在
Scratchbox
里面安装
Maemo SDK
。
安装
Scratchbox
和
SDK
有手动和自动之分,手动就是执行
Nokia
公司写好的一个脚本,自动把原本需要手动一个个安装的过程集合在一块了,这种方式成功率比较高,毕竟是验证过多次了。我们这里也采用这种自动安装的方式,确保环境搭建完成后,能用。
什么是
Scratchbox
呢?
之前你可能已经看到了
Internet Tablet
上面跑的应用程序了,也许你会问:如何写自己的程序。如果你之前使用过不同的
GNU
工具,也许你想知道这些工具和库在开发过程中是如何工作的?
在
Scratchbox
里面
,
有个非常特殊的东西:
sandbox(
沙盒
),
就是这个东西提供一些必要的工具,同时把你的开发同外面真实的
Linux
系统隔离开来。
Scratchbox
的另外一个用处是:交叉编译,你可以在
Scratchbox
里面编译出能直接运行在
target
设备上的二进制文件。
Scratchbox
这个名字来源于
: “Linux from scratch” + “chroot jail”,
投入监狱(一个盒子内)。这可以告诉我们一些信息:当我们工作于
Scratchbox
里面时,你所运行的程序是在一个改变了根目录的环境下运行的。在
Linux
系统中,改变一个进程所能看见的路径是可以做到的。
Scratchbox
正是利用了这一点,在启动时,就把它的根目录切换到其他目录了,而不再指向它的真实根目录了。这也是隔离技术所使用的部分伎俩。正因为此,这个新的环境就叫做沙盒了,你在这个隔离的盒子里玩些危险的东西也不会对真实的环境造成危害。隔离技术还使用了另外一个技术:转移
(通过使用
LD_PRELOAD,
由
LD_PRELOAD
指定的共享库优于其他共享库加载
)
Scratchbox
由哪些特性呢?
- 它是sandbox的具体实现软件包,sandbox的主要目的就是为了隔离
- 含有容易使用的交叉编译工具
- 支持多个开发者使用同一个开发环境
- 支持为每个开发人员单独配置
- 能运行原本运行在硬件上的目标程序,通过一个机制:sbrsh实现
- 能过在host上运行非本地的二进制代码,通过使用Qemu
在上面这些主要的
features
中,能利用来开发程序的包已经安装在
Scratchbox
环境中了,
Scratchbox
同时也集成了
Debian
包管理,因此,你可以在
Scratchbox
里面为不同的目标发布软件包(类似于
windows
的
.msi
文件,
Fedora
的
.rpm
文件)。通过使用标准的
Debian
包管理工具,你可以通过
internet
直接安装你需要的一些开发包。
Internet Tablet
产品也使用了类似的包管理,这就意味着使用
Scratchbox
编译的包可以直接安装到实际的设备中。
Scratchbox
组件:
在开始安装
Scratchbox
之前,我们先了解一些
Scratchbox
中使用的一些术语,并且从现在开始,我们把
Scratchbox
简称为
sbox.
- core package:核心包,这个包中含有实现sbox的核心工具
- libs package:库文件包,这个包含有core包运行所需要的库文件
- devkit:开发工具包,含所有sbox所需要的附加工具,我们主要关心4个devkits. 后面会再介绍。
- toolchain:工具链,像编译器,连接器等等。
- target:目标,这里指我们当前使用的工具链和配置。一个目标使用特定的工具链,并且具有一个文件系统。你可以有不同的目标,甚至于这些目标使用相同的工具链。这就很方便于测试不同的目标。注意:sbox目标并不能等同于实际的物理设备。
- rootstrap: rootstrap是目标根文件系统,用于满足基本的开发。Rootstraps通常特定开发目标所需要的基本文件,不过有时候它的作用仅仅是引导。对于Maemo来讲,当然也有rootstrap, 我们把叫做“Maemo SDK”。
安装的前提条件:
在安装之前,你可以先看看安装指令,大致有个概念就行。
另外还有个需要检查:
binfmt,
这个可以支持在
sbox
中运行一些指令。
Step 1:
检查
binfmt,
如果没有加载,手动加载
root@test-desktop:/home/workspace# lsmod | grep binfmt
root@test-desktop:/home/workspace#
root@test-desktop:/home/workspace# modprobe binfmt_misc
root@test-desktop:/home/workspace# lsmod | grep binfmt
binfmt_misc 12936 0
root@test-desktop:/home/workspace#
Step 2:
安装一个
X Server
第二步就是安装一个
X Server,
它可以俄当作一个
X client
连接到你的实际系统中,这是非常必要的,对于运行你的程序。
X Server
目前有
3
个选择:
- Using Xephyr, a Kdrive based X server/client that can emulate 16-color depth for its clients even if it's acting as a client to an 24-bit depth real X server. It also implements modern X protocol extensions. This material will only cover Xephyr.
- Using Xnest, which is an older version of the subject. Requires your real X server to be at the same depth that it is simulating to its clients.
- Using Xvnc which is an X server that can be connected to using a VNC client. Using Xvnc is not covered here, but its use should be very close to using Xnest.
命令:
root@test-desktop:/home/workspace# apt-get install xserver-xephyr
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
xserver-xephyr
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1587kB of archives.
After unpacking 3977kB of additional disk space will be used.
Get:1 http://security.ubuntu.com gutsy-security/main xserver-xephyr 2:1.3.0.0.dfsg-12ubuntu8.3 [1587kB]
Fetched 1587kB in 56s (27.9kB/s)
Selecting previously deselected package xserver-xephyr.
(Reading database ... 88958 files and directories currently installed.)
Unpacking xserver-xephyr (from .../xserver-xephyr_2%3a1.3.0.0.dfsg-12ubuntu8.3_i386.deb) ...
Setting up xserver-xephyr (2:1.3.0.0.dfsg-12ubuntu8.3) ...
root@test-desktop:/home/workspace#
验证一下:
root@test-desktop:/home/workspace# dpkg -l | grep xephyr
ii xserver-xephyr 2:1.3.0.0.dfsg-12ubuntu8.3 Next Generation Nested X Server
root@test-desktop:/home/workspace#
Step3:
自动安装
Scratchbox:
安装
Scratchbox
一个比较好的方法是使用自动安装脚本,首先从其网站下载脚本:
http://tablets-dev.nokia.com/4.0/maemo-scratchbox-install_4.0.sh
root@test-desktop:/home/workspace/maemo_sdk# sh ./maemo-scratchbox-install_4.0.sh -u test
-u
选项是指定
scratchbox
安装给谁用,我前面配置的用户名是
test
。
这个下载的时间比较长,耐心等待:
可能有几个小时!太长了,
Step 4:
自动安装
Maemo SDK
:
root@test-desktop:/home/workspace# sh maemo-sdk-install_4.0.sh
![](http://maemo.org/maemo_training_material/maemo4.x/html/maemo_Getting_Started/images/captures/auto-maemo-package-selection.png)
[
选择第
3
个安装,比较全
. ]
安装完成后,就有两个
targets:
- CHINOOK_X86: 适用于开发软件和测试
- CHINOOK_ARMEL: 适用于为目标版编译ARM image文件.