在之前的文章 為什麼Google需要Fuchsia操作系統 中,對Fuchsia操作系統的背景和大體的設計做了簡要的介紹。

大家可能已經蠢蠢欲動,想要趕快嘗試一下這個全新的系統了。

然而很遺憾的是,Google當前開源出來的代碼庫支持的設備非常有限,而且大部分GUI的內容均沒有包含。所以,大家能嘗試的內容非常有限。主要還是針對開發者的版本,不建議嘗鮮的終端用戶嘗試。現在GUI能看到的,大體上就只是題圖的內容。

準備工作

硬體設備

工欲善其事必先利其器。

首先你需要有1臺電腦(廢話),它運行的操作系統可以是Ubuntu Linux或者macOS,但必須都是64位的版本。它被稱為宿主機,用以下載和編譯Fuchsia操作系統,也用來作為客戶機的更新源,向客戶機推送鏡像和更新。最重要的是,由於Fuchsia的代碼量巨大,編譯生成的文件也非常大,建議至少準備150GB的空餘磁碟空間;如果考慮到將來升級,準備300GB以上是比較合適的空間大小。

如果你想要在真機上運行Fuchsia操作系統的話,還需要一臺Intel NUC(6代或者7代,集成顯卡,當前來說這是最簡單的在真機上運行Fuchsia的方法)。需要將NUC的UEFI固件(俗稱BIOS)更新到最新的版本。這臺電腦被稱為是客戶機,用以實際運行Fuchsia操作系統。同時,你還需要一個優盤作為下載Fuchsia操作系統的啟動盤。

軟體準備

建議使用Ubuntu 18.04 x64作為宿主機的操作系統,主要原因在於Fuchsia的編譯腳本依賴Git輸出unixtime格式的時間戳信息,而Git是從2.10才開始支持這個功能的,16.04中包含的版本並不包含該功能,需要額外安裝。

由於Fuchsia會通過CIPD(Chrom Infra Package Deployment)下載和使用指定版本的編譯器,所以對系統自帶的包的要求比較少,只需要採用如下指令安裝即可:

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

對於macOS來說,需要首先從AppStore安裝Xcode的最新版本,然後再在命令行執行

xcode-select --install

網路準備

由於眾所周知的原因,Fuchsia涉及到的絕大部分代碼倉庫和CIPD倉庫在大陸是無法訪問的,你需要確保如下域名在你的宿主機上能夠正常訪問:

  • fuchsia.googlesource.com
  • github.com
  • chrome-infra-packages.appspot.com

我正在準備一份包含最新Fuchsia代碼的虛擬機,想要嘗鮮的朋友,也可以直接下載該虛擬機映像。

下載源代碼

Fuchsia與Android不同,採用了jiri而非repo作為源碼的管理工具。Google為了大家能夠快速搭建編譯環境,準備了一份腳本來自動化的下載源碼。只需在你的shell中執行如下命令即可Checkout master版本的Fuchsia源代碼:

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

這段代碼會在當前目錄下新建一個名為fuchsia的目錄,然後將預編譯的jiri和fx腳本(該腳本的用途我在下文會進一步說明)放入該目錄中的.jiri_root/bin目錄下,並將完整的代碼都簽出到fuchsia目錄中。

注意:由於Fuchsia本身的目錄結構已經比較深,建議直接在你的HOME目錄中籤出fuchsia。之前我將fuchsia放在了~/projects/open_source/fuchsia中,就碰到了路徑過長的問題,無法編譯。

簽出後,需要將fuchsia/.jiri_root/bin目錄加入到你的本地PATH中。你可以修改~/.profile文件,在文件的最後增加一行:

PATH="$HOME/fuchsia/.jiri_root/bin:$PATH"

然後重啟系統(或者重新連接ssh),是的jiri和fx可用。

由於網路環境的原因,我們很難一次性簽出成功。只要fuchsia/.jiri_root/bin目錄和裡面的jiri文件已經簽出成功,我們可以通過在不完整的fuchsia目錄中執行jiri update來逐步補完。而通過jiri update -v參數,可以觀察到整個簽出過程的細節,也更容易排查到簽出錯誤的真正原因。在我的網路環境下,我用了大約2天的時間才完成了第一次完整的簽出。所以,祝大家好運。

由於失敗不止一次,所以,通常我會寫一個腳本來保證簽出成功:

#! /bin/bash

# make_sure_update.sh

while true; do
jiri update -v && break
done

編譯

產品與板子

Google在Fuchsia中引入了2個正交的概念,以提供廣泛的適應性:產品和板子(board,不知道該怎麼翻orz)。

產品是指你想要編譯的系統的用途。比如core表示只有最核心的系統,terminal表示具有命令行的界面,workstation代表具有完整GUI的全功能系統,router代表路由器。

而對應的,板子(board)是指你的系統運行的硬體設備。比如arm64表示執行armv8-a指令集的64位ARM CPU,而kirin970表示海思的麒麟970處理器。

Google為了讓Fuchsia實現完全的模塊化和可定製化,在這兩個正交的概念中,是允許有包含關係的。比如上文中所說的產品:

terminal的導入了core(import("//products/core.gni")),並加上了一些命令行工具。

workstation的導入了terminal,並刪除了部分命令行工具,同時加上了用戶體驗的包。

所以,如果我想做一臺自動駕駛汽車,那麼也可以在terminal的基礎上,加上自動駕駛的相關服務即可。

這也非常有利於向新的平臺移植Fuchsia操作系統,可以逐步實現目標。

可以通過fx list-products和fx list-boards來查看所有支持的產品和板子。

編譯設置

有了上面的這些先導知識,我們就可以設置Fuchsia的編譯參數了,格式如下:

fx set <product>.<board> [--release]

這裡product需要用上述的具體的產品代替,board需要用上述的板子代替,如果包含了--release開關,則採用Release編譯,否則默認採用Debug編譯。

建議大家初次嘗試使用如下編譯參數:

fx set terminal.x64

編譯

Fuchsia整個操作系統是使用ninja作為編譯系統,GN作為meta build系統(Google自家的一套體系)。編譯只需要執行:

fx build

它會自動用滿你所有的CPU核心,來進行編譯。在我的機器上,編譯通常耗時40分鐘,請耐心等待。

模擬運行

作為開發和嘗鮮,使用qemu是最簡單的途徑。無需額外的物理硬體即可進行測試。在完成編譯後,只需執行:

fx run

即可自動創建qemu鏡像,並運行。而帶上-g參數則可以打開Fuchsia的命令行終端。更多的信息,可以參考Fuchsia的官方文檔:fuchsia.dev/fuchsia-src

注意:由於Fuchsia的GUI以來Vulcan圖形API,而qemu當前並沒有Vulcan模擬的能力,所以使用qemu時,最多隻能看到命令行界面。

你可以使用Alt+F1 ~ Alt+F5在Debug Log和0~3號Shell之間進行切換。

在真機上運行

當前的Fuchsia操作系統只支持2個指令集arm64和x86_64。

x86_64指令集只支持Broadwell(第5代酷睿i處理器)及更新的Intel處理器,而更早的CPU和全線的AMD產品均不在支持之列。

同時,如果在x86_64的平臺上運行,主板必須支持UEFI引導,且UEFI必須支持網路棧功能(也就是網卡是由UEFI初始化好的)。Fuchsia當前不支持安裝到虛擬機中。

準備啟動U盤

注意:該啟動優盤上所有的內容都會被抹除。

在宿主機上,完成Fuchsia的Build之後,可以通過

fx mkzedboot <udisk_device>

比如,如果優盤是/dev/sdb,那麼就可以使用:

fx mkzedboot /dev/sdb

即可完成啟動盤製作。

使用啟動盤啟動

將啟動盤插到客戶機上,並在客戶機中選擇從該啟動盤上的EFI啟動(注意,不能選擇Legacy Boot)。客戶機會自動啟動到一個zedboot系統(zedboot其實是一個最小化的zircon內核+驅動)中。

此時需要將2臺電腦接入到同一個網路中,或者使用網線直接將兩臺電腦連接起來。

客戶機上的zedboot會通過mdns協議對外廣播自己的存在。

安裝Fuchsia OS

此時,只需在宿主機上執行:

fx pave

即可自動裝載Fuchsia操作系統到客戶機的硬碟上,並自動重啟進入新的操作系統。

如果安裝失敗,通常是因為客戶機的硬碟原本已經有分區信息,包含了數據,可以在客戶機上執行:

install-disk-image wipe
dm reboot

上述命令中的第一條會清空你的磁碟,而第二條會重啟客戶機。更多的信息可以參考官方文檔中的Troubleshooting一節:fuchsia.googlesource.com

Enjoy

至此,你親手編譯的Fuchsia操作系統已經在機器上正常運行。

相關文章:

黃珏珅:為什麼Google需要Fuchsia操作系統?

zhuanlan.zhihu.com圖標
推薦閱讀:

相關文章