Fuchsia 试玩——源码获取、构建、运行

源码获取

Pink + Purple == Fuchsia (a new Operating System)

Fuchsia 是谷歌新推出的一款OS。其内核为 Zircon
因为众所周知的原因,需要翻出去才能下载源码,怎么翻这里就不详述了。
Fuchsia 的源代码有多个 git 仓库,使用 Jiri 进行管理,因此下载 Fuchsia 的源代码也需要安装 Jiri。
Fuchsia 仓库地址是 https://fuchsia.googlesource.com,相应的文档也在这里,也可参考 https://fuchsia.dev/。

下载、构建、运行

下载

Debian 类的 Linux
sudo apt-get install build-essential curl git python unzip

The bootstrap procedure requires that you have Go 1.6 or newer and Git installed and on your PATH.
This script will bootstrap a development environment for by first creating directories fuchsia.

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

详情请参阅
按照提示将 $FUCHSIA_DIR/.jiri_root/bin 添加到环境变量里。

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

构建

fx set core.x64 --with //bundles:kitchen_sink
fx build

构建选项命令格式如下,这个命令指定了构建的选项并且在 out/xxx 里生成构建系统本身。

fx set [product].[board] --with //bundles:[name]

product 指产品配置,我们可以通过 fx list-products 来查看所有的产品配置列表。

介绍最基本三个:

  • bringup,最小的系统功能集,没有网络支持等,我猜可能仅是个能运行起来的内核和驱动程序等
  • core,安装了基本程序的最小功能集,例如网络能力等,比 bringup 高级一点
  • workstation,通用开发环境的基础,包含了例如 UI、媒体和我们想折腾的一些东西

board 指芯片架构,我们同样可以通过 fx list-boards 来查看支持的板子、芯片架构。

name 指额外的模块,比如测试程序等,文档提到三个选择,分别是 toolstests 以及 kitchen_sink

它们的含义分别是:

  • tools,包含了大量的开发人员工具,例如 shell 组件,ls、vim、cat、curl 等
  • tests,包含所有的测试程序,这个选项编译完成后占用空间较大
  • kitchen_sink,包含所有其他构建目标,编译完成后占用空间超级大

编译输出目录默认为 out/default,也可以指定。
这里贴上完整的编译命令,fx --dir out/aarch64 set core.arm64 --with //bundles:tests

之后运行 fx build 就可以编译 Fuchsia 系统了,目前编译完成后大小 70G+

运行

构建完成后在 buildtools/qemu 中就已经有了 qemu
fx run 就可以让 fuchsia 跑起来了。
fx run -h 可以查看支持的命令。

  • exit qemu,ctrl + a then x
  • ctrl+a ? or ctrl+a h prints all supported commands. 这里指 qemu 本身支持的命令。

关闭 fuchsia 系统也很简单,运行 dm shutdown 即可。

进一步探索

使能网络功能

官方文档中告诉我们,需要设置本地 DHCP 服务器和 NAT 为 Fuchsia 配置 IPv4 接口和路由,因此我们启动 Fuchsia 时用一个配置 DHCP 的脚本启动。退出之前的系统,重新启动一个带网络功能的 fuchsia。
fx run -N -u scripts/start-dhcp-server.sh

启动 fuchsia 的开发更新服务器,用来上传一些应用程序和文件到 fuchsia 上。这里另起一个 shell,进入 $FUCHSIA_DIR 运行fx serve -v。启动成功后,我们再打开一个 shell 终端,运行 fx shell,哒哒,现在我们通过登录到 Fuchsia 中了~

接下来我们可以测试一下内置的一些程序,比如 fortune, cowsay Hi!

实际运行发现如果不打开 fx serve -v 会报错。

Cannot create child process: -1 (ZX_ERR_INTERNAL): failed to resolve fuchsia-pkg://fuchsia.com/fortune#bin/fortune

运行 fx serve -v 开启开发更新服务后就能运行了。fortune 会返回一句名人名言,很有意思。在这里插入图片描述
cowsay Hi! 是一头牛说 Hi。

 ______
| Hi!  |
 ------
     \  ^__^
      \ (oo)\_____
        (__)\     )\/\
           ||----w |
           ||     ||

更新 package

Almost everything that exists on a Fuchsia system is stored in a Fuchsia package.

可以运行其他程序么?当然是可以的。fx list-packages 查看构建的包。
如果代码有更改,我们可以使用如下命令编译该代码并推送到 Fuchsia 上。

fx build-push hello_world_cpp_tests

然后在 fuchsia 的 shell 上运行即可,run hello_world_cpp_tests

比如我们修改 garnet/bin/rolldice/src/main.rs 的代码,增加一句输出。
运行 fx build-push rolldice,然后再次运行 rolldice 则可以得到如下的输出,第一句话就是增加的语句了,可见代码已更新到 packages。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章