代碼下載:
參照官方文檔即可: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分鐘之內就完成了,依然很方便。