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
来查看所有的产品配置列表。
介绍最基本三个:
board
指芯片架构,我们同样可以通过 fx list-boards
来查看支持的板子、芯片架构。
name
指额外的模块,比如测试程序等,文档提到三个选择,分别是 tools
、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
可以查看支持的命令。
关闭 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 |
|| ||
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。