在某些情況下,您可能想覆寫 Fuchsia 產品的設定。
使用組件覆寫
如要開始使用組件的開發人員覆寫功能,請按照下列步驟操作:
在 Fuchsia 結帳頁面中,建立
//local/BUILD.gn
檔案://local.BUILD.gn
檔案可能如下所示:import("//build/assembly/developer_overrides.gni") assembly_developer_overrides("my_overrides") { kernel = { command_line_args = ["foo"] } }
這個
BUILD.gn
檔案表示:- 組件開發人員覆寫的名稱為
my_overrides
。這個欄位可以使用任何有意義的 ID。 - 金鑰
kernel
、command_line_args
全都以平台設定支援的值為準。詳情請參閱PlatformConfig
。
- 組件開發人員覆寫的名稱為
建立符合需求的
//local/BUILD.gn
檔案後,即可將fx set
指令設為使用這個組裝平台設定。例如:fx set --assembly-override=//local:my_overrides
建構 Fuchsia:
fx build
現在您應該可以照常建構 Fuchsia。
此外,您也可以執行下列操作:
新增套件
有時您可能需要在產品套件中加入其他套件。在這種情況下,您的 //local/BUILD.gn
可能會如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_custom_base_packages") {
base_packages = [
"//some/gn/target/for/a:package",
"//some/other/target/for/a:package",
"//third_party/sbase",
]
}
新增 Shell 指令
在某些情況下,您可能需要在產品設定中加入殼層指令。在 Fuchsia Shell 中執行 CLI 工具時,必須同時新增套件及設定組裝作業,才能建立啟動器 Stub,以執行二進位檔的元件。這是因為大多數 CLI 工具實際上都是元件。
如要這麼做,請在 assembly_developer_overrides
中定義 shell_commands
清單。這份清單中的每個項目都是物件,包含下列鍵:
package
:含有 Shell 指令的套件名稱 (例如cp
)。這是套件名稱,不是 GN 目標標籤。components
:要註冊為殼層指令的套件內 CLI 二進位檔清單。在尋找元件資訊清單時,Assembly 會自動為這些名稱加上meta/
前置字元和.cm
後置字元。舉例來說,foo
會變為meta/foo.cm
。
舉例來說,如要從 cp
套件新增 cp
指令,//local/BUILD.gn
可能如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_custom_shell_commands") {
shell_commands = [
{
package = "cp"
components = [ "cp" ]
}
]
}
如要將多個項目新增至 shell_commands
清單,請參閱以下範例:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_multiple_shell_commands") {
shell_commands = [
{
package = "foo"
components = [ "foo_comp" ]
},
{
package = "bar"
components = [ "bar_comp1", "bar_comp2" ]
}
]
}
將殼層指令新增至套件集
此外,如果透過套件探索功能提供套件不足以滿足需求,您也可以將套件目標新增至套件集。舉例來說,如要將套件新增至 base
套件組合,您的 //local/BUILD.gn
可能如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_custom_shell_commands") {
shell_commands = [
{
package = "cp"
components = [ "cp" ]
}
]
# This GN target should define a package named "foo_cli".
base_packages = [
"//some/gn/target/for/my/package:foo_cli"
]
}
使用 developer_only_options
在某些情況下,您可能想使用部分 developer_only_options
。這些選項可與「使用組件覆寫」一節中介紹的一般覆寫選項合併使用。
在此情況下,您的 //local/BUILD.gn
可能如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_overrides") {
developer_only_options = {
all_packages_in_base = true
netboot_mode = true
}
}
all_packages_in_base
這個選項會將所有快取和隨選套件集套件重新導向至基本套件集。這項功能可在網路可能無法使用或無法執行套件伺服器的情況下,使用含有快取或 Universe 套件的產品映像檔。
這個選項的主要用途是允許偵錯工具在網路無法運作時,於裝置上使用。
netboot_mode
這個選項會建立 ZBI (Zircon 開機映像檔),其中包含 ramdisk 內的 fvm/fxfs 映像檔,以便產品進行網路開機。
這是取代先前使用 //build/images/fuchsia:netboot
產生的 netboot
組件。
覆寫多個平台設定
您也可以在同一個 assembly_developer_overrides
定義中,覆寫多個平台設定區域。
舉例來說,以下覆寫會自訂開發 SSH 金鑰和 USB 周邊功能:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_multi_overrides") {
platform = {
development_support = {
authorized_ssh_keys_path = "//local/fuchsia_authorized_keys"
}
usb = {
peripheral = {
functions = [ "cdc" ]
}
}
}
}