Fuchsia 编译过程

Fuchsia是Google最新开发的操作系统,这款操作系统并非基于当下任一个已有的操作系统内核开发,而是自开发的微内核Zircon。相比很多人已经看过了Google开放的截图,它的界面基于Material Design,设计页面及其简练易懂,其源码也是任何人均可以下载并且编译运行。

接下来我记录了一次Fuchsia的编译过程。

操作系统Ubuntu 16.04 首先需要下载所有需要的依赖包和应用程序

sudo apt-get install texinfo libglib2.0-dev liblz4-tool autoconf libtool libsdl-dev build-essential golang git curl unzip

然后在此过程中缺少什么程序或者命令,都可以通过apt install命令安装;

接下来要下载Fuchsia安装用的jiri工具:

> curl -s "https://fuchsia.googlesource.com/scripts/+/master/bootstrap?format=TEXT" | base64 --decode | bash -s <layer>
> ```

请注意<layer>,这个layer有四个层可以选:

Zircon:   这是操作系统的最底层内核层,用于访问硬件、对硬件抽象访问,以及提供低级应用程序接口。比如说它包含内核、设备管理器第三方设备驱动,以及低级系统库,例如libc和launchpad,zircon定义了Fuchsia IDL(FIDL),作为在系统中进程间的通讯协议,其后端是C以及C++。而其他语言的后端会在其他层上加入。

Garnet:  这一层提供了设备级别的的软件安装、管理、远程系统通讯和部署等。比如,Garnet包含网络、媒体服务、图形服务以及包管理器和更新系统。

Peridot: 这一层提供了耦合性的、可定制的、多设备用户体验的模块、结构层、实体、用户代理层和一些其他的组件。比如他包含设备、用户、结构层维护者以及上下文引擎等。

 Topaz:这一层包含了所有层。他包含所有类型的软件,模块、用户代理程序、外壳程序以及程序。比如这些模块有日历、邮件、终端,shell包含基本shell和用户shell,用户代理程序包含邮件、聊天内容提供者,以及一些运行程序例如Web,Dart和Flutter程序。

我们一般选:Topaz,来编译所有层。

一般为了方便,我们把`jiri_root/bin` 目录到\$PATH中。

如果不想乱搞你的环境变量,你只是想要jiri能在你所在的当前工作目录,那么可以复制到你的PATH中。一般来说,**你必须要让jiri所在的目录有写权限**。如果不这么做,jiri自身文件无法保持自动更新。

```shell
cp .jiri_root/bin/jiri ~/bin

我们还会用到fx命令。要使用fx命令,你可以创建一个软链接到~/bin目录中:

ln -s `pwd`/scripts/fx ~/bin

准备工作如果已经做好,那么我们现在可以开始设置一下编译选项:

fx set x64

然后开始下载源码开始编译:

fx full-build

这个编译过程会输出debug-x64版本的编译产物,得有10多G那么大。编译产物会保存在out/debug-x64目录中。

其他的可选项:

默认我们会得到x86的debug版编译产物,我们可以选择其他的类型的产物。

比如:

> fx set x64                 # x64 debug 版本的构建
> fx set arm64               # arm64 debug 版本的构建
> fx set x64 --release       # x64 release 版本的构建
> ```



> 加速构建的可选项:
>
> ccache可以从上一次的构建产物缓存加速构建。默认情况下如果设置了``CCACHE_DIR`` 环境变量,并且指向的目录是存在的合法目录,那么就会启用ccache。
>
> 要修改默认的行为,就在`fx set`命令执行时传入参数开关。
>
> ```
> --ccache     # 强制使用ccache,即便goma可用
> --no-ccache  # 关闭ccache
> --no-goma    # 关闭goma
> ```



构建过程中如果出现问题,并且在重新执行`fx full-build`也不能继续编译过程的话,建议执行

```shell
fx clean-build
jiri update -gc

删除所有上一次构建,并且更新最新的源代码,保持代码是没有问题的。然后执行

fx full-build

当我们编译完成后,我们就可以执行

fx run

来运行虚拟机来启动Fuchsia操作系统。

有几个参数可以控制启动QEMU选项:

可以通过fx run -h看所有的选项。

如果还有其他的问题,可以到

https://fuchsia.googlesource.com/docs/+/master/getting_started.md

上寻找。