2011-8-11 10:47:58

 

 

2011-8-11 10:47:58


Maemo软件开发工具包
在GNU/Linux桌面系统上,Maemo SDK使用Scratchbox这个开源交叉编译工具,创建了一个沙盒环境。

在大多数情况下,这个环境就象普通操作系统一样工作,只不过添加了一些开发工具。

这意味着Maemo软件的开发流程与普通桌面Linux程序十分相似。麻烦的嵌入式开发过程,例如交叉编译,都由Scratchbox自动进行。

硬件架构
Maemo SDK支持两种架构,X86和ARMEL,同时提供两种开发环境。在Fremantle中,X86环境是主要的开发环境,无须进行硬件模拟,从而拥有更好的支持与运行效率。

而ARMEL目标环境仅用于进行交叉编译,使程序可以手持设备上运行。

另外,需要注意的是,qemu(一个Linux下常用的虚拟机,被Scratchbox用作CPU指令译码器)无法在ARMEL目标环境下运行用户界面。

当你的程序在X86环境中顺利编译运行后,你可以在ARMEL环境下重新编译程序。编译与打包过程与在X86环境中完全相同,不过会慢一些,因为一些操作需要软件模拟执行。Scratchbox会进行

交叉编译,开发者无须考虑这些问题。

当程序在ARMEL环境中编译完成后,就可以在手持设备上直接运行了。由于SDK提供的模拟器并不完善,所以实际的测试必须在真实设备上进行。

[edit] Scratchbox
Scratchbox是一个特定的“沙盒”环境,提供了一个与真实的Linux系统(通常被称为host machine,宿主机)隔离的开发环境。

Scratchbox也简化了交叉编译:软件直接被编译成可以在目标设备上运行的二进制格式。

“Scratchbox”这个名字源于“Linux from scratch”和“chroot jail”。这也解释了它的实现和用法。

当你在Scratchbox环境下工作时,程序将在一个更改过的root环境(chroot)下运行。在Linux系统中,在进程中改变文件路径是可能的。Scratchbox利用了这一机制,在启动后将根目录(/

)转换到了实际根目录以外的路径下。

这是隔离技术的一个重要组成部分。因此,这个环境被称为“沙盒”,一个可以任意玩耍,无须担心影响真实系统环境的区域。

隔离技术的另一环节,就是库调用转发机制,利用LD_PRELOAD,编译器以及其他程序,都将使用沙盒环境下的函数库。


是重定位跟目录

函数劫持是很重要的技术

工具链(toolchains)提供了最基本的编译工具集合,每一个Scratchbox目标环境都必须指定一个工具链。工具链为目标环境创建,处理二进制文件。除了编译器(gcc)外,工具链还包括了

一个链接器(ld)以及其他二进制工具包(binutils),例如strip(去除文件中的调试信息),objdump(二进制文件分析器)和string(显示文件中的可打印字符)。

CPU译码器(CPU transparency methods)提供了在模拟器中运行目标架构程序的能力。Maeomo SDK官方支持的宿主机系统是x86架构的Linux系统,而实际设备的cpu却可能是arm架构的。CPU

译码器解决了在x86设备上运行arm程序的问题。用户可以在编译阶段,选择一个程序是为了宿主系统,还是目标系统(arm或是x86)编译。Maamo SDK包含的开发工具(devkit)中,一个名为

cputransp的工具包提供了这一功能,这个工具包提供了完整的配置,并且会被默认选中安装。

根文件系统包(rootstrap)包含了一个目标设备的根文件系统。Maemo SDK为每个目标环境(X86和ARMEL)各自提供了Scratchbox环境下的根文件系统包。需要提醒的是,两个目标环境的

home目录是共享的。而/tmp目录同时在宿主机和两个目标环境间共享。

大体上,Maemo SDK这样进行目标环境的配置。


目标和交叉链

 


 

你可能感兴趣的:(2011-8-11 10:47:58)