Fuchsia 試玩——源碼獲取、構建、運行

源碼獲取

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 來查看所有的產品配置列表。

介紹最基本三個:

  • bringup,最小的系統功能集,沒有網絡支持等,我猜可能僅是個能運行起來的內核和驅動程序等
  • core,安裝了基本程序的最小功能集,例如網絡能力等,比 bringup 高級一點
  • workstation,通用開發環境的基礎,包含了例如 UI、媒體和我們想折騰的一些東西

board 指芯片架構,我們同樣可以通過 fx list-boards 來查看支持的板子、芯片架構。

name 指額外的模塊,比如測試程序等,文檔提到三個選擇,分別是 toolstests 以及 kitchen_sink

它們的含義分別是:

  • tools,包含了大量的開發人員工具,例如 shell 組件,ls、vim、cat、curl 等
  • 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 可以查看支持的命令。

  • exit qemu,ctrl + a then x
  • ctrl+a ? or ctrl+a h prints all supported commands. 這裏指 qemu 本身支持的命令。

關閉 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 |
           ||     ||

更新 package

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。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章