本文不保证完全正确,希望对本文有意见的朋友通过写在关于界面的联系方式联系我。
如果有任何问题可以直接通过评论讲述你的问题。
本教程适用于2020年3月的源码版本,摘自我的博客:inf.link。

Google在2016年做出了初始版本的Fuchsia系统,这是一个基于全新Zircon内核的操作系统,主要适用于嵌入式系统。我们可以看到项目使用了C、C++、Dart、Go、Python等多种语言,从Google Git中的commit log可以看到项目目前仍然在积极开发,官方也放出了开发者网站Fuchsia.dev。

同时允许我们自己编译这个系统进行尝试,下面我们来探索一下。

编译环境

目前并不支持在Windows下面编译,而且我认为在虚拟机和WSL里面进行并不明智,你需要的是运行在物理机上面的Linux发行版或者Mac OS。因为体验并不佳,所以也不建议在VPS上面进行。

我的编译环境是:

  • Ubuntu 18.04
  • Linux Kernel 5.3(请不要选用版本过高的内核,否则Dart会出现Broken Pipe错误,这也会影响到你开发Flutter应用,5.5.9版本内核测试失败。)

在编译的时候请退出你的conda环境:conda deactivate,否则Python会出现错误。

这里我们安装必要的依赖,并给予ccache加速支持:

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

拉取源码

源码托管在Google Git上面,大小约有10G以上,所以首先我们需要搭建一个能连上Google的稳定网络环境,并在shell中启用支持:

$ export ALL_PROXY=socks5h://127.0.0.1:1080 #Socks支持
$ export http_proxy=http://127.0.0.1:8123 #HTTP支持

切换到你想要的目录,执行官方的bootstrap脚本:

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

这会在当前目录下面创建一个Fuchsia文件夹,并且下载版本管理工具jiri,以后每次使用的时候需要按照提示把jiri加入PATH变量之中。有几个需要注意的点:

  • 你并不能使用git去更新,因为jiri下载下来的不属于任何一个分支,你需要用jiri update进行整体更新。
  • 中途出现网络错误的话会自动重试,如果仍然不行就手动执行jiri update,不需要重新直接引导脚本。
  • 如果提示缺少权限,那就点开给你的Google登录地址,输入得到的access code,执行jiri update即可。

本节可以参考Download Fuchsia source。

配置编译内容

一个设置的样例如下:

$ fx set workstation.x64 --with //bundles:tests --ccache

这里我们设置了编译的产品为workstation,不同的版本区别如下:

  • bringup是最简洁的版本,非常适用于底层开发和调试,并不支持实时获取软件。
  • core是一个支持安装额外软件的版本,适用于更高一层的配置。
  • workstation是一个基础的常用的开发环境,适用于开发UI、媒体等,是最适合爱好者进行探索的版本。

x64表明了我们需要的是x64架构。

捆绑包:

  • tests会编译所有tests程序。
  • tools包含了一些开发调试工具,比如发起http请求、调整音量等等。
  • kitchen_sink会编译全部程序,会产生20G以上的编译结果,

同时你可以发现我们开启了ccache加速编译,当然你也可以使用--no-ccache来禁用。

进行编译

$ fx build

这条命令通常可以解决问题,如果你有任何问题,请添加参数--log build.log进行记录,并且在寻求帮助的时候附上你的log。

运行Fuchsia并启用网络支持

这里你可以选择安装Fuchsia或者直接在虚拟机上面运行,我们选择QEMU来跑,如果你有条件的话,可以pave到实体机上面:Install Fuchsia on a Device。

似乎jiri会下载prebuild的qemu,最后也会去调用,所以不用本地安装。

为了让虚拟机能访问互联网,我们新建一个interface:

$ sudo ip tuntap add dev qemu mode tap user $USER

这时候先不要激活,我们需要配置IPv4支持、包转发和DNS支持。

下面的方法已被Google暂时禁用,请自行选择是否采用,原因为:
This script sets configurations that are not safe for many common environments and users have a tendency to run it blindly without understanding of the consequences. Much of the unwanted behavior of the script is unnecessary and should one day be replaced by a script that is more fit for purpose and does not introduce these problems.

如果你已经了解风险,请保存脚本:start-dhcp-server.sh,并按照下面的方式执行:

$ chmod +x ./start-dhcp-server.sh
$ ./start-dhcp-server.sh qemu

如果你的系统是中文,并且nmcli d status的结果显示qemu确实处于未托管状态,那么你可以修改L 66的unmanaged"未托管"

完成之后我们再激活qemu并启动虚拟机:

$ sudo ip link set qemu up
$ fx qemu -N

如果这时候出现ERROR: Could not extend fvm, unable to stat fvm image的话需要去除本地化设置,export LC_ALL=C

因为QEMU不支持Vulkan,所以你不能在上面运行图形程序,-g选项也只是创建一个图形缓冲区。但是我们在一个2018年的新闻中发现Google正在使Android Studio中的安卓模拟器支持Zirzon,并支持Vulkan。所以我们现在还需要等待官方更新。

运行命令

这里我们打开了三个窗口分别为:

$ fx serve -v
$ fx qemu -N
$ fx shell

第一个提供了一个pave server,因为很多编译时候的配置包括软件并没有包含在镜像里面,我们需要启动一个服务器来按需提供软件,比如执行curl的时候就会从这个服务器中获取。

第二个我们启动了一个虚拟机,同时会启动一个SSH服务器,fx shell就会去连接。

我们在这里执行一下常见的ls和curl命令:

编译软件

比较遗憾的是,Fuchsia里面没有带有开发工具,所以不能在系统里面编译东西。所以我们从外部编译之后在通过pave server传入。这也能理解,我们需要的是编译好的软件包,而不是编译一个软件。

首选我们查看在fx set的时候GN发现的包(GN相关概念:Using GN build):fx list-packages

对任意一个包进行编译,然后push到服务器:fx build-push echo_test

在shell里面执行:run echo_test,如果提示这个名字对应多个组建的话,那我们需要指定组件:fuchsia-pkg://fuchsia.com/echo_test#meta/echo_integration_test.cmx

从输出来看已经执行成功:

Found fuchsia-pkg://fuchsia.com/hello_world_cpp_tests#meta/hello_world_cpp_unittests.cmx, executing.
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from HelloWorldTest
[ RUN      ] HelloWorldTest.True
[       OK ] HelloWorldTest.True (1 ms)
[----------] 1 test from HelloWorldTest (6 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (29 ms total)
[  PASSED  ] 1 test.

写在最后

初步地测试了一下Fuchsia,我们可以看到这个系统已经完成了一些基础命令的实现,甚至从9to5Google发布的消息来看,已经成功跑起来Chrome。Google自研的Zircon内核在子进程的处理某些方面上比Linux更加安全,有更严格的权限管理。而新的网络安装系统方式和网络获取组件方式似乎也能看出以后全新的软件OTA更新。

有人喜欢讨论这个系统能不能战胜Android和iOS,这个还不好下定论,而且既然这个系统也能在嵌入式设备里面跑起来,目标是全平台,那也不是很好做。一个系统的成败也要靠开发者的活跃性和门槛,否则会落到以前诺基亚一样的结局。

让我们拭目以待吧!

参考链接

  • Fuchsia.dev
  • Pink + Purple == Fuchsia (a new Operating System)
  • Fuchsia 系统的编译和探索

myeclipse每次保存编译全部_Fuchsia编译运行指南相关推荐

  1. TypeScript保存代码时自动编译并运行

    TypeScript保存代码时自动编译并运行 在 package.json 中加入 watch 指令,达到监听 .ts 文件变化,自动重新编译. "scripts": {" ...

  2. myeclipse重新编译java,反编译class文件并重新编译的方法

    在没有.java源码的情况下,如果想修改一个.class文件.可以通过以下步骤实现: 修改前的class文件: 一.反编译.class文件成.java文件. 1.可以使用Java Decompiler ...

  3. 终端编译opengl程序编译运行_ubuntu编译opengl和demo之二(glfw版本)

    [TOC] 1.安装GL和glut等 sudo apt-get install mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev sudo apt-ge ...

  4. 用 powershell 脚本 .ps1 写一个自动化的「编译->链接->运行C++文件」脚本

    │ abc.cpp │ main.cpp │ test.ps1 │ └─.vscodec_cpp_properties.jsonsettings.json 我这人有个毛病:一定要用 VS Code 写 ...

  5. Java 在线编程编译工具上线,直接运行Java代码

    前言 大家好,我是小哈~ 周末没出去浪,花了点时间,在我的个人网站上线了一款小工具.啥工具呢?一款可以在线编译 Java 代码并运行输出结果的小工具. 大家都知道,甲骨文刷 Java 版本号非常积极, ...

  6. 使用dev-c++建立工程(多个文件一同编译连接)并运行

    使用dev-c++建立工程(多个文件一同编译连接)并运行 关于dev-c++的下载安装不多赘述. 需要用到的三个代码: main.c#include <stdio.h> #include ...

  7. RISC-V GNU编译环境搭建与运行实践

    RISC-V GNU编译环境搭建与运行实践 riscv-gnu-toolchain交叉编译工具链 riscv-gnu-toolchain下载 riscv-gnu-toolchain编译 RISC-V运 ...

  8. 汇编学习教程:编译、连接、运行

    引言 在上篇博文中,我们详细学习了汇编源程序的组成,并且下载好两个必须的工具:编译源程序的工具 MASM.exe和处理中间文件的工具 LINK.exe. 我们在上篇博文中只是大致了解了一下MASM.e ...

  9. KEIL5工程不能编译和下载,运行时提示找不到.axf文件(Error: Flash Download failed - Could not load file“.axf“)

    KEIL5工程不能编译和下载,运行时提示找不到.axf文件 KEIL5工程不能编译和下载,运行时提示找不到.axf文件 keil5debug运行时弹出警告 在网上找了好多办法都试过,就是不行,最终根据 ...

最新文章

  1. NumericUpDown 控件输入限制小数位
  2. JVM - 应用JVM核心参数推荐设置
  3. java——什么是浅表副本
  4. mvc jquery ajax方法,Mvc Jquery Ajax功能不起作用[关闭]
  5. Sublime Text 3 Mac常用快捷键与注意事项
  6. Linux进阶之路————开机、重启和用户登录注销
  7. php把数据创建一个表格,PHP创建(导出Excel数据表格)
  8. 如何使用SQL计算宝宝每次吃奶的时间间隔(文末含PPT)
  9. 一些常用的字符串方法
  10. 微信又上线新功能,能让你更会聊天?
  11. 罗永浩宣布进军电商直播;微博回应用户数据泄露;Android 11 开发者预览版 2 发布 | 极客头条...
  12. URL带中文参数的解决方法FR.cjkEncode()
  13. 点击次数(thinkphp)
  14. 计算机网络双绞线的功能,双绞线由几根组成?双绞线每根线的作用
  15. 帝国CMS7.5忘记后台密码怎么找回
  16. 写论文自动生成参考文献的方法
  17. 苹果手机打开浏览器显示无法连接服务器,苹果浏览器safari打不开网页因为无法连接服务器吗?...
  18. 深入学习三个月向大厂发起冲击
  19. 1949-2020年全国31省铁路里程数据
  20. 中兴微型计算机,超乎想象的视觉享受,中兴天机Axon 9 Pro

热门文章

  1. 【演讲实录】银行PB级别海量非结构化数据管理实践
  2. 鸿蒙轻内核的得力助手:带你掌握4种内存调试方法
  3. 拥有一个高性能低延时数据库是什么样的体验?
  4. SARIF在应用过程中对深层次需求的实现
  5. 一个真正0基础小白学习前端开发的心路历程
  6. Python学习指南高清PDF版,速存!24小时后删除
  7. 【华为云技术分享】云小课 | 容灾切换:业务一键切换到容灾站点
  8. 【鲲鹏来了】手把手教你在鲲鹏上使用编程语言——C语言
  9. edpluse怎么运行c语言,[JSP]小菜也来学Editplus+Tomcat配置jsp运行环境
  10. HDFS的操作SHELL和API