Fuchsia編譯與真機安裝

代碼下載:

參照官方文檔即可:https://fuchsia.dev/fuchsia-src/development/source_code

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

下載時間大概在一兩個小時。下載完成後,先配置好jiri命令環境變量:

PATH=/$(CODE_PATH)/fuchsia/.jiri_root/bin:$PATH

後續可以直接使用jiri更新代碼:

jiri update

實際使用過程中發現代碼同步/更新時有時會出現以下警告:

[23:58:37.190] Updating all projects
ERROR: 'git fetch -p origin' failed:
stdout:

stderr:
fatal: unable to access 'https://dart.googlesource.com/observatory_pub_packages/': gnutls_handshake() failed: The TLS connection was non-properly terminated.

command fail error: exit status 128

和設置了代理/網絡不穩定有關,多嘗試幾次。


開始編譯,使用的是Intel NUC7真機,選擇如下的配置進行編譯:

fx set workstation.x64 --with //bundles:kitchen_sink

其中workstation是product類型,x64是平臺類型,"--with //bundles:kitchen_sink"則是要一起編譯的bundle。

通過fx list-products可以看到支持的產品列表:

官方對各類product的解釋: https://fuchsia.dev/fuchsia-src/development/build/fx#key-product-configurations

workstation包含包括UI支持,多媒體在內的高級功能。

fx list-boards可以查看支持的平臺類型:

key bundles的分類:https://fuchsia.dev/fuchsia-src/development/build/fx#key-bundles

fx命令的詳細用法參考官方文檔:https://fuchsia.dev/fuchsia-src/development/build/fx

fx build開始編譯,編譯大約一到兩個小時

編譯完成後,可以在虛擬機中運行,也可以選擇在真機上運行,按照官方文檔,目前對NUC6/7(注意需要是酷睿)、PixelBook支持較好,建議選擇這些設備進行真機調試。

官方文檔,如何在intel NUC上安裝fuchsia:https://fuchsia.dev/fuchsia-src/development/hardware/intel_nuc

安裝有兩種辦法,但無一列外需要先製作Zedboot啓動U盤:

製作命令也很簡單,將U盤先插入fuchsia編譯源碼的主機(host):

fx mkzedboot /path/to/usb/disk

其中/path/to/usb/disk是U盤在host上的路徑,可以通過以下命令獲得: 

fx list-usb-disks

輸出如下:

/dev/sdc - U3              
/dev/sda - USB Flash Disk  //通過df命令/手動拔插再次確認此設備爲新插入的U盤

Zedboot啓動盤製作完成:

把製作好的Zedboot U盤插到要安裝fuchsia的設備(target)上, 並且通過在BIOS中選擇從USB引導啓動,啓動進入後是一個藍屏的命令行界面。

關於Zedboot的詳細解釋,官方文檔:https://fuchsia.dev/fuchsia-src/development/build/fx#what-is-zedboot
/

Zedboot其實就是fuchsia內核Zircon的包裝,包含了網絡棧,可以用來和編譯代碼的Host通信已完成安裝,還包括分區等必要工具,這和Android上的recovery的組成及扮演的角色是非常相似的。

進入Zedboot後,屏幕上顯示:

netsvc start

此時target和host之間已經可以通過網絡鏈接了,通過USB網線轉接頭+網線連接了編譯主機與目標設備NUC。

接下來有兩種安裝辦法

1. fx pave

通過Zedboot在target設備上進行分區,將host上編譯好的各個分區的鏡像通過網絡上傳至Zedboot並寫入對應分區。這種方法會創建Fuchsia的EFI引導,這樣安裝完成後的Fuchsia會增加一個啓動項(就像平時安裝Ubuntu時那樣),開機的時候能自動引導進入系統。

進入Zedboot後,通過ALT+TAB進入命令行模式,接下來就可以開始安裝Fuchsia鏡像了。

擦除分區:

install-disk-image wipe-partition-tables --block-device /path/to/usb/disk

其中/path/to/usb/disk是要安裝的目標路徑,可以通過lsblk,首次安裝時我選擇了主硬盤路徑,相當於完全擦除其餘數據只保留Fuchsia。

初始化分區表:

install-disk-image init-partition-tables --block-device /path/to/usb/disk

此時再lsblk可以看到對應的分區已經分好了。

接下來在host的命令行中輸入fx pave,可以看到編譯主機在本地創建了一個bootserver本地端口,等待另一端的Zedboot通過網絡發起請求,連接成功後編譯好的fuchsia會開始傳輸。

實際pave的過程中在傳輸鏡像的過程中發生過多次網絡斷開,傳輸反覆重試的情況,多等待幾次重試直到成功爲止。傳輸成功後target上的Zedboot會自動啓動到Fuchsia。


經測試無法和target硬盤上原有的系統引導共存,這樣測試設備在安裝Fuchsia無法承擔其他工作,相對會造成一定的浪費。

2. fx netboot

netboot的區別是不需要對target上的存儲設備分區,每次都通過host直接傳輸鏡像到target內存中,直接通過Zedboot引導啓動到Fuchsia。這種方法可以保留target硬盤上的原系統不受影響(如已經安裝了的Windows/Ubuntu),設備在不運行Fuchsia時依然可以承擔其他工作,缺點是每次進入Fuchsia都需要通過U盤Zedboot引導啓動,而pave在安裝成功後Fuchsia可以脫離Zedboot直接啓動。

同樣通過啓動U盤將target引導至Zedboot,通過fx netboot直接引導啓動,實際一次完整鏡像傳輸1分鐘之內就完成了,依然很方便。

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