Fuchsia的运行初体验

之前几篇文章简单介绍了下Fuchsia中出现的与以往不同的概念。为了能够更直观的了解Fuchsia,这次让我们编译并运行Fuchsia。

下载代码

国内镜像,ubuntu19.04环境下编译。
为了保持原汁原味,我们还是使用正常的梯子方式来从google获取代码。
Fuchsia使用jiri来管理代码,jiri类似repo,通过清单文件管理一系列的git代码仓库。jiri的运行依赖Go和Git,所以需要先准备编译环境:

1
sudo apt-get install build-essential curl git python unzip

第一次创建Fuchsia目录,使用如下命令:

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

该命令的前三分之二,主要是下载bootstrap脚本,下载后直接在bash运行,脚本内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/bash
# Copyright 2017 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -e

function usage {
cat <<END
usage: bootstrap

Bootstrap the Platform Source Tree.
END
}

if [[ $# -gt 0 ]]; then
usage
exit 1
fi

# The fetched script will
# - create "fuchsia" directory if it does not exist,
# - download "jiri" command to "fuchsia/.jiri_root/bin"
curl -s "https://fuchsia.googlesource.com/jiri/+/master/scripts/bootstrap_jiri?format=TEXT" | base64 --decode | bash -s fuchsia
cd fuchsia

.jiri_root/bin/jiri import -name=integration flower https://fuchsia.googlesource.com/integration
.jiri_root/bin/jiri update

echo "Done creating a Platform Source Tree at \"$(pwd)\"."
echo "Recommended: export PATH=\"$(pwd)/.jiri_root/bin:\$PATH\""

该脚本会在当前目录下创建Fuchsia目录,然后在./jiri_root/bin 目录下下载三个工具:jiri、cipd、fx。
然后使用jiri update同步仓库中的代码到本地。
所以如果中途因断网或其他原因导致update过程中断的话,可以重新执行jiri update命令继续完成。
使用如上脚本初始化完成后会在终端输出:

1
2
"Done creating a Platform Source Tree at \"$(pwd)\"."
"Recommended: export PATH=\"$(pwd)/.jiri_root/bin:\$PATH\""

所以接下来遵从建议,将.jiri_root/bin/加入到环境变量中,方便以后使用上述三工具。

特别注意:
在同步代码的过程中,有可能会报如下错误:

1
2
Some packages are skipped by cipd due to lack of access, you might want to run "cipd auth-login" and try again
ERROR: context deadline exceeded

解决办法:
1、打开如下链接

1
https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=446450136466-2hr92jrq8e6i4tnsa56b52vacp7t3936.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email

2、会得到一个授权码,如图

3、在命令行输入

1
2
$ cipd auth-login
Authorization code: [第二步获得的授权码]

4、进入Fuchsia源码目录输入 jiri update(预先设置好环境变量),重新更新代码。

编译代码

首先,选择要编译的目标。有几个查看相关的命令,列举如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
查看支持的平台
$fx list-board
arm64
as370
chromebook-x64
cleo
*
hikey960
kirin970
msm8998
msm8x53-som
mt8167s_ref
qemu-arm64
qemu-x64
toulouse
vim2
x64

查看可以的procuct
$fx list-products
bringup
core
router
speaker
terminal
workstation

查看可用的包
$fx list-packages
build-info
device_settings_manager
http
log_listener
log_listener_shell
network_time_service
......
太多了,列几个举个例子

此处使用set命令设置编译core.x64,然后使用build命令进行编译

1
2
3
4
5
6
7
8
输入:
fx set core.x64 --with //bundles:kitchen_sink
输出:
Generating compile_commands took 570ms
Done. Made 31219 targets from 2532 files in 152306ms
输入:
fx build
开始编译,可能需要很长时间。

–with 参数用来指定在可用范围内的包的标签,可以制定多个使用逗号分隔,指定的包可以在过程中临时下载下来。

运行

Fuchsia可以使用QEMU运行,也可以使用AEMU(android模拟器)运行。QEMU 运行如下:

1
2
3
fx run
fx run -g
fx run -g -N

-g 表示一个enable graphics,在QEMU下仅是一个有四个页签的shell
-N 表示enable network,在Fuchisa下可以ping一下百度,确实可以使用网络。qemu使用网络需要使用如下命令

1
2
sudo ip tuntap add dev qemu mode tap user xxxxxx && \
sudo ip link set qemu up

加载系统界面:

运行第一个页签为debug log(当前页签黄色高亮):

其他三个页签:

页签之间可以使用【alt+tab】组合按键进行切换。使用上图中的dm相关命令可进行关机、重启等操作。

使用AEMU运行的命令为

1
fx aemu

界面如下图:

至此Fuchsia OS就从源码到运行跑起来了,其中还有很多疑惑的地方需要继续探索,前路漫漫,吾将上下求索之。

robot wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!