在某些情況下,您可能會想要覆寫 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",
]
}
新增殼層指令
在某些情況下,您可能需要在產品設定中加入殼層指令。在 Fuchsia 殼層中新增 CLI 工具時,您必須同時新增套件並設定組合,以便建立可為二進位元執行元件的啟動器存根。這是因為大多數的 CLI 工具其實都是元件。
如要這麼做,請在 assembly_developer_overrides
中定義 shell_commands
清單。此清單中的每個項目都是一個物件,其中包含下列鍵:
package_name
:包含殼層指令的套件名稱。這個值必須與套件BUILD.gn
檔案中定義的package_name
相符。components
:您要註冊為 Shell 指令的套件內 CLI 二進位檔清單。組合會在尋找元件資訊清單時,自動在這些名稱中加入meta/
前置字串和.cm
字尾。舉例來說,foo
會變為meta/foo.cm
。
舉例來說,如要從 //third_party/sbase
套件新增 cp
指令,//local/BUILD.gn
可能會如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_custom_shell_commands") {
shell_commands = [
{
package_name = "//third_party/sbase"
components = [ "cp" ]
}
]
}
將殼層指令新增至套件組合
此外,如果透過套件探索提供套件仍不夠,您也可以將套件目標新增至套件集。舉例來說,如要將套件新增至 base
套件組合,//local/BUILD.gn
可能會如下所示:
import("//build/assembly/developer_overrides.gni")
assembly_developer_overrides("my_custom_shell_commands") {
shell_commands = [
{
package_name = "//third_party/sbase"
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
這個選項會將所有快取和 on_demand 套件組合套件重新導向至基本套件組合。這項功能可讓您在網路可能無法使用或無法執行套件伺服器的情況下,使用含有快取或 Universe 套件的產品映像檔。
這個選項的主要用途是在網路無法運作時,允許在裝置上使用偵錯工具。
netboot_mode
這個選項會建立 ZBI (Zircon 開機映像檔),其中包含 ramdisk 內的 fvm/fxfs 映像檔,以便透過網路啟動產品。
這是先前使用 //build/images/fuchsia:netboot
產生的 netboot
組件的替代品。