Fuchsia 编译教程(针对与源码更新后,编译方式改变)

Fuchsia

粉色 + 紫色 == Fuchsia (一个新的操作系统)。

欢迎来到Fuchsia中文社区!根据有关信息,Fuchsia使用了C,C++,PY,GO,Dart,FIDL,Rust等多种语言,从系统上来看,似乎Google抛弃了Java,可能是Java虚拟机运行速度不够,效率低。

勿笑!!鄙人穷逼学生党,配置渣,12年老笔记本,前段时间加了4G RAM共6G DDR3,换了西部500G 黑盘(固态是真的贵,水又很深,怕买到大号U盘),然后再战一年到高考!!!具体配置如下:

系统 Ubuntu 18.04.3 LTS x64
CPU Intel® Core™ i3-2310M CPU @ 2.10GHz
虚拟化: VT-x
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 256K
L3 缓存: 3072K
(是不是很垃圾?)
GPU [AMD/ATI] Robson CE [Radeon HD 6370M]
(亮机卡)
内存1 2G DDR3 1333MHZ
内存2 4G DDR3 1333MHZ

准备你的编译环境

 Debian Ubuntu 系列安装依赖包命令如下:

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

 macOS如下:

xcode-select --install

  Xcode,还需要最新版的 [Xcode](https://developer.apple.com/xcode/)。

获取源码

安装Go 1.6版本以上,安装Git然后配置好用户名和邮箱。

下列命令会拉取大约15GB文件,论坛里也有打包好的,请自行寻找。(科学上网)

悄悄推荐一个ssr,付费,便宜,好用(aHR0cHM6Ly9zc3Jzcy5uZXQvcmVnaXN0ZXI/YWZmPTk4NzAzMQ==)括号里的内容自行base64解码就懂了!!!

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

执行上面的命令后,终端窗口黄色提示消息让你把 .jiri_root/bin 路径添加到变量,以便使用Fuchsia的工具链(jiri fx什么的),可在终端输入如下命令:

export PATH="/home/flomen/fuchsia/.jiri_root/bin:$PATH"

或者直接将 PATH="/home/flomen/fuchsia/.jiri_root/bin:$PATH" 添加到.bashrc

如果遇到:

Updating all projects
WARN: 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

这样的错误提示,请按提示转到相关网站,登陆Google账号获取密匙并添加到本机。

此时在你的home目录就有个fuchsia文件夹,cd 进入fuchsia文件夹,可使用 jiri update 更新源码。

编译Fuchsia

这时需要用到fx命令,以前是 fx set x64 或者 fx set arm64 。现在源码有了些变化,需要使用:

fx set [PRODUCT].[BOARD]

而这个[PRODUCT]输入 fx list-products 查看候选项,[BOARD]输入 fx list-boards 查看候选项。如图所示:

可以看见,fuchsia已经支持较多设备了,kirin970,高通835,高通msm8x53-som(不知道啥处理器),以及联发科的8167s。
栗子🌰如下:

fx set workstation.x64 # x64 调试版
fx set core.arm64 # arm64 调试版
fx set core.x64 --release # x64 正式版

默认 fx set core.x64 走起!!


等待一会儿,此时会在~/fuchsia/out目录生成一些必要文件,用于后续编译构建。

接下来使用

fx build

开始构建你的Fuchsia!!
正在编译系统文件


从速度上来看,Fuchsia编译速度比Android快多了,而且错误也很少,几乎没有。从资源上来看,Android编译JAVA通常吃我1.3GB的RAM,硬盘,CPU也是经常爆满。而Fuchsia却很可观。


如图右边可以看出Fuchsia大法好!!!

编译进行中,睡一觉再说。


遇到个错误,我啥都没干,再次输入 fx build 后,错误又消失了,继续编译。

过程中遇到
clang++: error: unable to execute command: Aborted (core dumped)
的错误,要么是clang++软件内部错误,要么是…(不知道)
这时从新输入 fx build 继续编译
经过大约5小时的编译,终于完成了。

运行Fuchsia

QEMU不支持Vulkan,因此无法运行Fuchsia的图形堆栈。所以没有UI。
此时输入

fx run -g

  • -m 用MB设置QEMU内存大小。
  • -g 启用图形界面。
  • -N 启用网络。
  • -k 启用KVM加速。

然而这时弹出了

Could not extend fvm, unable to stat fvm image

这样的错误。解决方法:
用文本编辑器打开~/fuchsia/tools/devshell/lib/fvm.sh,将

stat_output=$(stat "${stat_flags[@]}" "${fvmraw}") 改为
stat_output=$(LC_ALL=C stat "${stat_flags[@]}" "${fvmraw}")

这是似乎是因为系统语言导致的相关问题。在

size="${BASH_REMATCH[1]}" 的后面下一行
echo $size

然后保存,此时再 fx run -g 就能运行了。

ls 命令不能用?这就不妙了。

这我不知道怎么搞,起码现在系统已经启动成功了。
接下来操作

  • ctrl+a x 将会退出QEMU的文本模式。
  • ctrl+a ? 或者 ctrl+a h 显示所有支持的命令。
  • ctrl+alt+g 取消QEMU鼠标捕获。
  • ctrl+alt+tab 切换选项卡,debuglog是调试信息,1,2,3,4都是shell。

要启用网络,首先,为QEMU配置虚拟接口,点我(Google官网)。完成后添加 -N-u 参数到 fx run :

fx run -N -u scripts/start-dhcp-server.sh

然后自己探索Fuchsia吧。
dm help 查看dm命令帮助
dm shutdown 关机

3 Likes

此时在你的home目录就有个fuchsia文件夹, cd 进入fuchsia文件夹,可使用 jiri update 更新源码。

When you execute jiri update, do you encounter this issue?

[email protected]:/media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia$ jiri update
WARN: Please opt in or out of analytics collection. You will receive this warning until an option is selected.
To check what data we collect run 'jiri init -show-analytics-data'
To opt-in run 'jiri init -analytics-opt=true "/media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia"'
To opt-out run 'jiri init -analytics-opt=false "/media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia"'

WARN: Please opt in or out of analytics collection. You will receive this warning until an option is selected.
To check what data we collect run: jiri init -show-analytics-data
To opt-in run: jiri init -analytics-opt=true "/media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia"
To opt-out run: jiri init -analytics-opt=false "/media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia"

Updating all projects
WARN: import "manifest" not found locally, getting from server. Please check your manifest file (default: .jiri_manifest).
Make sure that the 'name' attributes on the 'import' and 'project' tags match and that there is a corresponding 'project' tag for every 'import' tag.

ERROR: while updating: Unable to get manifest file for /media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia/topaz remotes/origin/master:manifest/topaz:error('git show remotes/origin/master:manifest/topaz' failed:
stdout:

stderr:
fatal: Path 'manifest/topaz' does not exist in 'remotes/origin/master'

command fail error: exit status 128), while writing history: Unable to get manifest file for /media/zelong/2828a0f1-cc41-4428-854d-a7a18c59f5c6/fuchsia_source/fuchsia/topaz JIRI_HEAD:manifest/topaz:error('git show JIRI_HEAD:manifest/topaz' failed:
stdout:

stderr:
fatal: Path 'manifest/topaz' does not exist in 'JIRI_HEAD'

command fail error: exit status 128)

看样子是bootstrap那步出问题了,重来一遍bootstrap看看?注意的是最后的bash也要翻墙,第一步curl过来的脚本里面还会请求一个脚本

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