使用開發人員覆寫值組合 Fuchsia 產品

在某些情況下,您可能想覆寫 Fuchsia 產品的設定。

使用組件覆寫

如要開始使用組件的開發人員覆寫功能,請按照下列步驟操作:

  1. 在 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。
    • 金鑰 kernelcommand_line_args 全都以平台設定支援的值為準。詳情請參閱 PlatformConfig
  2. 建立符合需求的 //local/BUILD.gn 檔案後,即可將 fx set 指令設為使用這個組裝平台設定。例如:

    fx set --assembly-override=//local:my_overrides
  3. 建構 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" ]
      }
    }
  }
}