Zircon 核心指令列選項

請參閱 //docs/gen/boot-options.md 為可靠資料來源。

Zircon 核心會收到系統啟動載入程式傳送的文字指令列,可用來變更系統的部分行為。核心指令列參數的格式為 optionoption=value,並以空格分隔,而且不得包含空格。

如果是布林值選項,option=0option=falseoption=off 則會停用該選項。任何其他表單 (optionoption=trueoption=wheee 等) 都會啟用。

核心指令列會從核心傳遞至使用者啟動程序和裝置管理員,因此下述部分選項適用於這些使用者空間程序,而非核心本身。

如果鍵重複,系統會優先採用最後的值,也就是說,後續的設定會覆寫之前的值。

元件管理服務會在啟動時讀取檔案 /boot/config/additional_boot_args (如果有的話),並將 name=value 行匯入其環境,藉此擴增或覆寫核心指令列中的值。系統會忽略開頭的空白字元,並忽略開頭為 # 的行。名稱中不得包含空格。

如要指定建構中的選項,請參閱這份指南

blobfs.cache-eviction-policy=<policy>

針對沒有開放式控制代碼或 VMO 本機副本的 blobfs 撤銷策略,控制分頁支援的 blob 執行策略。如未設定,則會使用內部定義的系統預設值。

沒有頁面支援的 Blob 不會受到這個旋鈕影響。

支援下列值:

  • NEVER_EVICT:系統不會移除節點。在這種情況下,建議您啟用核心頁面清除功能 (kernel.page-scanner.enable-eviction),否則 blobf 會無限期保留記憶體中的所有資料頁面。
  • EVICT_IMMEDIATELY:節點沒有公開的控制代碼或 VMO 本機副本時,就會立即剔除。下次存取時,必須從磁碟再次載入這些應用程式。

blobfs.write-compression-algorithm=<algorithm>

blobfs 在執行階段中寫入 blob 時應使用的壓縮演算法。如未設定,則會使用內部定義的系統預設值。

支援下列值:

  • ZSTD_CHUNKED
  • UNCOMPRESSED

boot.usb=<bool>

如果為 true,表示啟動儲存媒介已透過 USB 匯流排連接。//src/sys/live_usb 中的 live_usb 元件會使用這個參數,判斷是否應執行。

bootsvc.next=<啟動檔案系統 path>

控管 bootsvc 執行的程式以繼續執行啟動程序。如未指定,系統會使用預設的下一個程式。

您可以選擇使用程式和個別引數之間的半形逗號分隔符來指定程式的引數。例如「bootsvc.next=bin/mybin,arg1,arg2」。

Clock.backstop=<秒>

設定 UTC 時鐘的初始偏移量 (從 Unix Epoch 紀元時間起算,以秒為單位)。裝置協調人員會在啟動時設定時鐘,日後如有 RTC,則至少會經過 RTC 時鐘處理。

console.shell=<bool>

如果尚未啟動 kernel.shell 會將這個選項設為 true,驅動程式_manager 就會啟動殼層。預設值為 false。

如果為 false,則也會停用 zircon.autorun.boot 和 zircon.autorun.system 選項。

driver.<name>.tests.enable=<bool>

為個別驅動程式庫啟用單元測試。單元測試會在驅動程式庫繫結任何裝置前執行。如果 driver.tests.enable 為 true,則預設為啟用;如未啟用,則預設為停用。

請再次注意,驅動程式庫名稱是 ZIRCON_DRIVER 巨集的「驅動程式」引數。舉例來說,裝置名稱並非例如裝置名稱 (部分驅動程式的名稱幾乎完全相同),唯一的差別是裝置的名稱可能是「foo-bar」,而驅動程式庫名稱則必須使用底線,例如"foo_bar".

Driver.sysmem.contiguous_memory_size=<num>

覆寫 sysmem 連續記憶體集區的主機板驅動程式庫指定大小。值是以位元組為單位。

driver.sysmem.protected_memory_size=<num>

針對 sysmem 的預設受保護記憶體集區,覆寫主機板驅動程式庫指定的大小。值是以位元組為單位。

driver.tests.enable=<bool>

為所有驅動程式啟用單元測試。在驅動程式繫結任何裝置前,系統會執行單元測試。您也可以為個別驅動程式庫啟用測試,請參閱 driver.\<name>.enable_tests。這項設定預設為停用。

x64 專屬值

在 x64 上,設定 8250 這類 UART 可支援其他值:

  • 如果設為 legacy,系統會使用舊版 COM1 介面。
  • 如果設為 acpi,系統會使用系統上 DBG2 ACPI 項目指定的 UART (如果有的話)。
  • 您可以使用 ioport,\<portno>,\<irq> 指定 Port-io UART。
  • 您可以使用 mmio,\<physaddr>,\<irq> 指定 MMIO UART。

例如,ioport,0x3f8,4 會描述舊版 COM1 介面。

所有數字都可以採用 strtoul() 所接受的任何基準值。

所有其他值目前為未定義。

ldso.trace

這個選項 (預設為停用) 會開啟動態連接器追蹤輸出。輸出內容會以類似 Intel 處理器 Trace 支援等用戶端使用的方式呈現。

zircon.autorun.boot=<command>

這個選項會要求在開機時執行 command

指令應使用以根「/」開頭的絕對路徑。

系統會將指令中的所有 + 字元視為引數分隔符,方便您將引數傳遞至執行檔。

如果 console.shell 為 false,這個選項就會停用。

zircon.autorun.system=<command>

此選項會要求在掛接系統分區後執行 command。 如果沒有系統分區,就不會啟動。

指令應使用以根「/」開頭的絕對路徑。

系統會將指令中的所有 + 字元視為引數分隔符,方便您將引數傳遞至執行檔。

如果 console.shell 為 false,這個選項就會停用。

zircon.system.disable-automount=<bool>

這個選項可防止 fshost 自動掛接任何磁碟檔案系統 (/system、/data 等),對於某些低階測試設定很實用。預設值為 false。這個值由 netsvc.netboot=true 隱含

zircon.system.pkgfs.cmd=<指令>

此選項會要求在 blob 分區掛接時執行 command。 系統會將指令中的所有 + 字元視為引數分隔符,方便您將引數傳遞至執行檔。

您可在 blob 檔案系統中找到執行檔及其依附元件 (動態連結器和共用程式庫)。執行檔的「路徑」是第一個 + 之前的 command。傳送至載入器服務的動態連結器 (PT_INTERP) 和共用資料庫 (DT_NEEDED) 名稱字串會加上 lib/ 前置字串,以產生路徑。每個這類路徑都會使用 zircon.system.pkgfs.file.path 指令列引數,解析為 blob ID (即 ASCII 十六進位的 merkleroot)。這樣一來,/boot/config/additional_boot_args 會包含用來啟動程序的固定檔案資訊清單。

新程序會在啟動時接收 PA_USER0 管道控制代碼,做為掛接在 /pkgfs 的用戶端檔案系統控制代碼。/pkgfs/system 也會掛接為 /system

zircon.system.pkgfs.file.path=<blobid>

與上述的 zircon.system.pkgfs.cmd 搭配使用。

zircon.system.filesystem-check=<bool>

此選項會要求系統自動掛接的檔案系統,在掛接之前使用檔案系統一致性檢查工具進行預先驗證。

根據預設,系統會將這個選項設為 false。

netsvc.netboot=<bool>

如果為 true,zircon 會在啟動時嘗試以網路啟動 (Zircon) 執行個體。

更具體來說,zircon 會從本機連結上的啟動伺服器擷取新的 Zircon 系統,並嘗試 kexec 進入新的映像檔,進而取代目前執行中的 zircon 執行個體。

這項設定隱含 zircon.system.disable-automount=true

netsvc.disable=<bool>

如果設為 True (預設),系統會停用 netsvc

netsvc.advertise=<bool>

如果設為 true,netsvc 就會傳送網路啟動廣告來尋找開機伺服器。 預設為 true。

netsvc.interface=<路徑>

這個選項會指示 netsvc 僅使用拓撲路徑結尾為選項值的裝置。所有其他裝置都會遭到 netsvc 忽略。裝置的拓撲路徑可透過在殼層執行 lsdev 指令 (例如 /dev/class/network/000/dev/class/ethernet/000) 決定。

這適合用於為具有多個乙太網路通訊埠的裝置設定網路啟動作業,這個通訊埠可能會以非確定順序列舉。

netsvc.all-features=<bool>

這個選項可讓 netsvc 正常運作,並支援所有功能。根據預設,netsvc 會以最低模式啟動,而且僅支援探索裝置。

userboot.next=<路徑>

這個選項會指示使用者啟動程序 (第一個使用者空間程序) 在啟動檔案系統內執行指定的二進位檔,而不會按照一般的使用者空間啟動程序 (啟動裝置管理員等) 執行。

適用於其他啟動模式 (例如原廠測試或系統單元測試)。

這裡使用的路徑名稱會相對於 userboot.root (下方)、如果已設定的話,或其他與 BOOTFS 根的相對關係 (之後通常在 /boot 處查看),其開頭不得為 / 前置字串。

如果這個執行檔使用 PT_INTERP (例如動態連結器),使用者啟動程序會提供載入器服務,來解析 PT_INTERP (動態連結器) 名稱及可能要求的任何共用程式庫名稱。該服務只會查看 BOOTFS 中的 lib/ 目錄 (位於 userboot.root 下方)。

您可以選擇使用程式和個別引數之間的「+」分隔符來指定下一個程式的引數。下一個節目名稱一律會做為第一個引數提供。

範例:userboot.next=bin/core-tests+arg1+arg2=foo

userboot.root=<路徑>

這會在 BOOTFS 內設定「根」路徑前置字串,位置將找到 userboot.next 路徑,以及尋找載入器服務的 lib/ 目錄。根據預設不會有前置字串,因此路徑會視為 BOOTFS 根目錄的確切相對路徑。例如,若為 userboot.root=pkg/foouserboot.next=bin/app,則在 BOOTFS 中找到的名稱會是 pkg/foo/bin/apppkg/foo/lib/ld.so.1 等。

userboot.shutdown

如果設定了這個選項,當機器啟動程序結束時,使用者啟動程序就會嘗試關機。請注意,如果已設定 userboot.reboot,系統會忽略 userboot.shutdown

virtcon.disable

如有這個選項,請勿啟動虛擬控制台服務。

virtcon.hide-on-boot

如有這個選項,除非使用者透過裝置控制按鍵組合切換至螢幕,否則虛擬主控台不會取得任何螢幕的擁有權。

virtcon.keep-log-visible

如有這個選項,虛擬主控台服務會讓偵錯記錄檔 (vc0) 持續顯示,而不會在啟動時切換至第一個殼層 (vc1)。

virtcon.keymap=<name>

指定虛擬控制台的按鍵對應配置。系統支援「qwerty」和「dvorak」。

virtcon.font=<name>

指定虛擬控制台的字型。系統支援「9x16」和「18x32」。

zircon.nodename=<name>

設定系統節點名稱,由 bootserverloglistenernet{addr,cp,ls,runcmd} 工具使用。如果省略,系統會根據其 MAC 位址產生節點名稱。GigaBoot 和 Zircon 會榮耀這條分線。

zircon.namegen=<num>

設定系統節點名稱產生樣式。如果省略或不知道,系統會使用樣式 1。如果設定 zircon.nodename,這個項目就不會有任何作用。舊版名稱產生樣式日後可能會移除。GigaBoot 和 Zircon 會稱呼這個 cmdline。

樣式:- 0:根據 MAC 位址使用四字形式的名稱。- 1: 基於 MAC 位址,fuchsia-0123-4567-89ab。

zvb.current_slot=<_a|_b|_r>

讓 Fuchsia 瞭解系統啟動載入程式啟動的運算單元。設定此屬性也會通知分區映像檔安裝工具支援 ABR,且應更新 ABR 中繼資料。

zvb.boot-partition-uuid=<UUID>

除了 zvb.current_slot 的替代選項,系統也會傳送含有啟動中 Zircon 核心的分區 UUID,讓 Fuchsia 知道系統啟動載入程式啟動的運算單元。設定這個屬性也會讓通知器知道支援 ABR,且應更新 ABR 中繼資料。

主控台.device_topological_suffix=<路徑>

如果設定了這個值,主控台啟動器就會連線至主機路徑與這個後置字串相符的主控台裝置。如未指定,控制台啟動器會連線至 /svc/console。只有在 kernel.shell=false 時才會生效。

其他 Gigaboot 指令列選項

bootloader.timeout=<num>

這個選項會在系統啟動載入程式中設定啟動逾時,預設值為 3 秒。如要略過啟動選單,請將值設為 0。

bootloader.fbres=<w>x<h>

這個選項會設定 framebuffer 解析度。使用系統啟動載入程式選單,顯示裝置可用的解析度。

範例:bootloader.fbres=640x480

bootloader.default=<network|local|zedboot>

這個選項會將預設啟動裝置設為網路啟動 (Netboot)、使用本機 zircon.bin,或透過 Zedboot 啟動網路啟動 (Netboot)。

如何將指令列傳送至核心

,使用 ffx emu 或 fx qemu

請使用 -c 傳遞每個選項,例如:

ffx emu start -c gfxconsole.font=18x32 -c gfxconsole.early=false

並在 GigaBoot20x6 中執行網路啟動

傳送核心指令列,在結尾為 -- 分隔符,例如:

bootserver zircon.bin bootfs.bin -- gfxconsole.font=18x32 gfxconsole.early=false

以 GigaBoot20x6 格式,透過 USB 閃光燈啟動

在包含指令列的 USB 隨身碟的檔案系統根目錄中,建立名為「cmdline」的文字檔案。