构建和安装Firefox OS火狐操作系统需要消耗大量的时间,网络带宽,和计算机硬件配置。不幸的是,编译过程中很容易发生错误。本文档大致描述了构建过程及步骤来帮助用户们了解概况。每个步骤的详细信息会在相应的链接页面中给出。
注意: 在Firefox OS火狐操作系统的构建过程中会多次引用到“B2G”或“Boot2Gecko”这个词。 “Boot2Gecko”是Firefox OS项目的始称。
构建的目标:四个“映像”文件
构建过程的总体目的是构建四个可以复制到Firefox OS设备的文件。
boot.img | (启动映像)包含Linux内核和一个主文件系统映像,后者提供一套精简可用的Unix工具。 |
system.img | (系统映像)包含Firefox OS火狐操作系统的核心,包括了Gonk的一部分,Gecko的接口以及B2G的可执行文件。 |
userdata.img | (用户数据映像)包含Gecko的概要界面和设备上的Gaia风格的web应用程序。 |
recovery.img | (还原映像)包含一个Linux内核和一个主文件系统映像,后者附带一个能够让用户修复错误安装的简单工具。 |
一旦创建了这四个映像文件,就可以将它们转移到设备里了。
Firefox OS 火狐操作系统是建立在Android开源项目(AOSP)的基础之上的。AOSP 的工具—— adb
和 fastboot
(快速启动工具)提供了强大的方式来访问和操作设备。很显然,比如,命令行指令 adb reboot-bootloadr
能够使得被控设备重启并停留在bootloader(引导程序)的前期,此时再通过命令行指令 fastboot flash $partition $image 可以把映像文件复制到设备
中。
启动映像
启动映像(boot.img
)是由 Linux 内核和一个包含了核心软件和初始化脚本的根分区组成。后者将被复制到设备内存中以便设备的调用,因此被称为“虚拟内存盘”(或者是RAM盘,译者注)。启动映像将被复制到设备的“boot”分区,而在设备的文件系统运行时,可以通过工具在根目录下访问RAM盘的内容,比如使用 adb shell访问
。
启动映像还将在根目录的 default.prop
文件中建立超级用户(root user)的权限。
启动映像是可以进行修改的——通过检查该文件,再把文件拆分为内核部分和虚拟内存盘映像,提取、修改原先的虚拟内存盘映像中的内容并重新组合为一个能运行的 boot.img 文件。看看这个例子: Alcatel One Touch Fire Hacking (Mini) Guide (无中文)。
在被刷入设备之前,可以通过“旁加载”的方法来测试启动映像;启动设备,并停留在bootloadr引导加载程序阶段,然后使用命令fastboot boot /some/path/to/boot.img从启动映像中加载启动并进行测试,这样就不需要安装这个启动映像来进行测试了。
系统映像
系统映像 (system.img
) 提供了 Firefox OS 火狐操作系统的核心:
- Gonk: 操作系统的底层组件。
- Gecko: 火狐浏览器的 HTML 显示和 JavaScript 引擎的端口。
- B2G: 操作系统的核心进程。
请参阅 the Firefox OS platform 指南以获得更多关于平台体系结构的详细信息。
系统映像将会被复制到设备的
分区上,并在设备运行时存取到文件系统上的 system(
)系统
/system/
目录中。
注意: 系统映像也同样提供了设备所需要的二进制文件,最常见的就是手机无线电模块的 RIL (无线电接口层)。
用户数据映像
用户数据映像(userdata.img
) 提供了设备运行时加载的Gaia应用。
用户数据映像将被复制到设备的 userdata
分区上,并在设备运行时存取到文件系统上的 /data/
目录中。很显然,在 /data/b2g/ 目录中
包含了用户设备的 Mozilla Gecko 配置。而 /data/local/webapps/ 目录里包含了真实的给用户使用的网络
应用程序
。
还原映像
还原映像 (recovery.img
) 含有一个一模一样的内核和一个与当前启动映像类似的虚拟内存盘。可是还原映像使用了一个不同的初始化脚本,当用户使用设备上的硬件按钮时,这个脚本将触发一系列还原命令。
还原映像将被复制到设备的 recovery
分区上,这是个文件系统在正常启动时不会被挂载的分区。
构建的步骤:准备、配置、构建、安装
Firefox OS 的整个编译安装过程分为四个步骤:
准备 | 获取所有编译过程中用到的工具和程序,比如说合适的编译器和库文件。 |
配置 | 下载源代码,并创建.configure 文件,这个文件用于定义与编译相关的环境变量 ,包括定义路径和变量。 |
构建 | 构建用户的 Gecko 配置文件和设备的 Gaia 网络应用程序。 |
安装 | 在设备上安装文件 |
准备
最初的准备必须做好,以确保在编译时能够备齐所需的全部软件,比如编译器和编译工具。
这个步骤可以手动操作或者使用脚本自动执行。详细请参考 Firefox OS build prerequisites (未翻译)页面。
注意: 在 Unix 系统或者 类 Unix 系统的机子上,所需的软件可以把它们的程序名作为指令参数使用 unix 的命令行的 which
命令
来查找得知。
配置
真正编译始于获取 Firefox OS (或者 B2G)的副本,可以通过在Git上克隆(clone)B2G项目完成。构建配置的过程既包括获取所有构建所需的源代码副本的过程;也包括创建 .config 文件的过程。
这需要运行一个 config.sh
脚本。详细请参考 Preparing for your first B2G build (未翻译)页面。
配置脚本需要指定构建设备的类型参数,构建名字是指与CPU的架构相关的代号(code names)而不是特定的设备,并且暂时无法指定某个构建过程与具体某个物理设备相对应。可用的代号列表见这里(未翻译)。
在配置过程中还会用到AOSP项目的repo工具,用于下载或更新构建过程中所需代码的副本。不同版本的副本会保存在.repo/projects目录下。配置过程将下载大量数据,这需要花费很长的时间。
构建
构建这一步骤将编译所有源文件,并生成映像文件。
这需要运行 build.sh脚本。详细请参考
Building Firefox OS 页面。
默认情况下,工具会对所有代码进行尝试构建,从AOSP项目工具到Linux内核,再到Gaia层的网络应用程序。因为这个构建过程是一个整体过程,所以有时当编译失败后,会不知道失败在哪一步。
当然为了避免上述情况的发生,也可以只构建整个代码某一特定的部分。比如,Gecko系统部分只在调用有 gecko
参数的构建脚本时才被构建。同样对于Gaia部分也是如此。后面的章节将解释如何在分开编译完成后再安装这些部分到设备上去。
同样也可以构建本章在第一部分所提到的几个映像文件。比如说,可以通过命令 ./build.sh out/platform/$target/system.img,构建系统映
像system.img,这里 $target
参数要和配置过程中保持一致。
安装
通过运行脚本 flash.sh将最新编译的代码安装到设备上。
独立分开构建的部分可以通过在脚本中添加相应参数进行安装。比如,可以通过指令./flash.sh gaia
.只安装Gaia部分的网络应用程序。