Zircon 内核命令行选项

请参阅 //docs/gen/boot-options.md 现在是 真相。

Zircon 内核从引导加载程序接收文本命令行, 用于改变系统的某些行为。内核命令行参数 应采用 optionoption=value 的形式,用空格分隔,并且不能 包含空格。

对于布尔值选项,option=0option=falseoption=off 将停用 选项。任何其他形式(optionoption=trueoption=wheee 等) 启用它。

内核命令行会从内核传递到 userboot 进程, 因此,下文介绍的部分选项适用于 用户空间进程,而非内核本身。

如果键重复,则以最后的值为准,即更晚的设置 覆盖之前的设置

组件管理器会读取文件 /boot/config/additional_boot_args(如果 并将 name=value 行导入其环境中,从而增强 或从内核命令行替换值。开头的空格是 并忽略以 # 开头的行。不允许在 名称。

若要在 build 中指定选项,请参阅 本指南

blobfs.cache-eviction-policy=<policy>

控制 blobfs针对没有打开句柄的分页器支持的 blob 的逐出策略 或 VMO 克隆如果未设置,则使用内部定义的系统默认值。

不受分页器支持的 Blob 不受此旋钮影响。

支持使用以下值:

  • NEVER_EVICT:永不逐出节点。建议启用内核 页面逐出 (kernel.page-scanner.enable-eviction),如下所示: 否则 blobfs 将无限期地保留内存中的所有数据页。
  • 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=<bootfs 路径>

控制 bootsvc 为继续执行启动过程而执行的程序。如果 未指定,则使用默认的下一个程序。

可以选择使用逗号分隔符指定程序的参数 程序和各个参数之间的关联。例如: “bootsvc.next=bin/mybin,arg1,arg2”。

clock.backstop=&lt;seconds&gt;

设置 UTC 时钟的初始偏移量(从 Unix 纪元开始的时间,以秒为单位)。通过 时钟将由设备协调器在启动时设置,之后如果 如果存在 RTC,系统会至少在这个时间对 RTC 时钟进行清理。

console.shell=&lt;bool&gt;

如果此选项设置为 true,Driver_manager 会在发生以下情况时启动 shell: core.shell 尚未启动。默认设置为 false。

如果该值为 false,那么也会停用 zircon.autorun.boot 并 zircon.autorun.system 选项。

driver.&lt;name&gt;.tests.enable=&lt;bool&gt;

为单个驱动程序启用单元测试。单元测试将在 驱动程序绑定所有设备如果 driver.tests.enable 为 true,则 默认处于启用状态,否则默认处于停用状态。

再次注意,司机的名字是“Driver”参数 ZIRCON_DRIVER 宏。例如,不是设备的名称 有些驱动程序几乎完全相同,只是设备可能命名为“foo-bar” 而驱动程序名称必须使用下划线,例如“foo_bar”。

driver.sysmem.contiguous_memory_size=&lt;num&gt;

替换系统内存的连续内存的板驱动程序指定的大小 数据池。值以字节为单位。

driver.sysmem.protected_memory_size=&lt;num&gt;

替换系统内存的默认受保护内存的板驱动程序指定的大小 数据池。值以字节为单位。

driver.tests.enable=&lt;bool&gt;

为所有驱动程序启用单元测试。单元测试将在 驱动程序绑定所有设备也可以为个别用户启用测试 驱动程序,请参阅 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 Processor Trace 等客户端可以使用的形式 联系。

zircon.autorun.boot=&lt;command&gt;

此选项要求在启动时运行 command

命令应该是从根“/”开始的绝对路径。

command 中的任何 + 字符都被视为参数分隔符, 将参数传递给可执行文件。

如果 console.shell 为 false,此选项将停用。

zircon.autorun.system=&lt;command&gt;

此选项会请求在系统分区装载后运行 command。 如果没有系统分区,则永远不会启动。

命令应该是从根“/”开始的绝对路径。

command 中的任何 + 字符都被视为参数分隔符, 将参数传递给可执行文件。

如果 console.shell 为 false,此选项将停用。

zircon.system.disable-automount=&lt;bool&gt;

此选项可防止 fshost 自动装载任何磁盘文件系统 (/system、/data 等),这对某些低级别的测试设置非常有用。它 默认值为 false。隐含于 netsvc.netboot=true

zircon.system.pkgfs.cmd=&lt;command&gt;

此选项会请求在装载 blob 分区后运行 commandcommand 中的任何 + 字符都被视为参数分隔符, 将参数传递给可执行文件。

可执行文件及其依赖项(动态链接器和共享库) 。可执行 pathcommand,位于 前 +。动态链接器 (PT_INTERP) 和共享库 (DT_NEEDED) 发送到加载器服务的名称字符串带有 lib/ 前缀,以生成 path。每个这样的 path 都会解析为一个 blob ID(即 ASCII 十六进制格式的 Merkleroot) 使用 zircon.system.pkgfs.file.path 命令行参数指定该路径。这样, /boot/config/additional_boot_args 包含用于 启动该过程。

新进程在启动时收到 PA_USER0 通道句柄,该句柄将 用作在 /pkgfs 处装载的客户端文件系统句柄。/pkgfs/system将会 也会作为 /system 装载。

zircon.system.pkgfs.file.path=&lt;blobid&gt;

与上面的 zircon.system.pkgfs.cmd 一起使用。

zircon.system.filesystem-check=&lt;bool&gt;

此选项会请求系统自动装载的文件系统 在装载之前使用文件系统一致性检查工具进行预验证

默认情况下,此选项设置为 false。

netsvc.netboot=&lt;bool&gt;

如果为 true,Zircon 将尝试通过 netboot 连接到另一个 Zircon 实例 启动。

更具体地说,Zircon 将在 并尝试通过 kexec 连接到新映像,从而将 当前正在运行的 Zircon 实例

此设置意味着 zircon.system.disable-automount=true

netsvc.disable=&lt;bool&gt;

如果设置为 true(默认值),则 netsvc 会停用。

netsvc.advertise=&lt;bool&gt;

如果为 true,netsvc 将通过发送 netboot 广告来寻找 bootserver。 默认值为 true。

netsvc.interface=&lt;path&gt;

此选项指示 netsvc 仅使用拓扑路径结束的设备 替换为选项的值,其中包含与任意零或* 拓扑路径的更多字符。所有其他设备都会被忽略 netsvc。设备的拓扑路径可以通过以下方式从 shell 确定: 在设备上运行 lsdev 命令,例如/dev/class/network/000/dev/class/ethernet/000)。

对于具有多个 以太网端口,可按非确定性顺序枚举。

netsvc.all-features=&lt;bool&gt;

此选项可让 netsvc 正常运行并支持所有功能。默认情况下 netsvc 以最低模式启动,在该模式下仅支持设备发现。

userboot.next=&lt;path&gt;

此选项指示用户启动过程(第一个用户空间进程) 在 bootfs 中执行指定的二进制文件,而不是遵循常规 用户空间启动过程(启动设备管理器等)。

它对于替代启动模式(例如出厂测试或系统单元)非常有用 测试)。

此处使用的路径名是相对于 userboot.root(如下所示)的路径名(若已设置)或其他 相对于 BOOTFS 的根(之后通常在 /boot 中看到)。 而不应以 / 前缀开头。

如果此可执行文件使用 PT_INTERP(即动态链接器),则 userboot 过程提供了 loader 服务 解析 PT_INTERP(动态链接器)名称,并且任何共享库都会将其命名为 请求。该服务只会在 lib/ 目录(位于 userboot.root)。

可以选择使用“+”指定下一个程序的参数分隔符 程序和各个参数之间的关联。下一个计划名称将始终为 作为第一个参数提供。

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

userboot.root=&lt;path&gt;

这会设置一个“根”BOOTFS 中的路径前缀,其中 userboot.next 路径 并找到加载器服务的 lib/ 目录。默认情况下 没有前缀,因此路径被视为从 BOOTFS。例如其中 userboot.root=pkg/foouserboot.next=bin/app 是 将为 pkg/foo/bin/apppkg/foo/lib/ld.so.1 等。

userboot.shutdown

如果设置了此选项,则当出现以下情况时,userboot 会尝试关闭计算机: 退出进程请注意,如果设置了 userboot.reboot,则 将忽略userboot.shutdown

virtcon.disable

如果存在此选项,则不启动虚拟控制台服务。

virtcon.hide-on-boot

如果存在此选项,虚拟控制台将失去任何 屏幕,直到用户使用设备控制键组合切换到该模式为止。

virtcon.keep-log-visible

如果存在此选项,虚拟控制台服务将保留调试日志 (vc0) 可见,而不是在启动时切换到第一个 shell (vc1)。

virtcon.keymap=&lt;name&gt;

指定虚拟控制台的按键映射。“qwerty”和“dvorak”。

virtcon.font=&lt;name&gt;

指定虚拟控制台的字体。“9x16”和“18x32”。

zircon.nodename=&lt;name&gt;

设置供 bootserverloglistenernet{addr,cp,ls,runcmd} 工具。如果省略,系统将生成节点名称 从其 MAC 地址发送此 cmdline 获得 GigaBoot 和 Zircon 的支持。

zircon.namegen=&lt;num&gt;

设置系统节点名称生成样式。如果省略或未知,系统会使用 样式 1。如果设置了 zircon.nodename,则不会产生任何影响。生成旧名称 未来可能删除某些样式此 cmdline 由 GigaBoot 支持,并且 锆石。

Styles: - 0:使用 4 个字词的名称样式,基于 MAC 地址。- 1: fuchsia-0123-4567-89ab。

zvb.current_slot=&lt;_a|_b|_r&gt;

让 Fuchsia 知道引导加载程序启动的槽位。同时设置 告知 paver 支持 ABR,并告知其应更新 ABR 元数据。

zvb.boot-partition-uuid=&lt;UUID&gt;

zvb.current_slot 的替代方法 - 用于指示 Fuchsia 知道由 通过传递包含 Zircon 内核的分区的 UUID 来启动引导加载程序 启动设置此参数还会通知 paver 支持 ABR, 应更新 ABR 元数据。

console.device_topological_suffix=&lt;path&gt;

如果已设置,控制台启动器将会连接到控制台设备, 与此后缀匹配。如果未指定,则使用控制台启动器 将连接到 /svc/console。仅在 kernel.shell=false 时才有效。

其他 Gigaboot 命令行选项

bootloader.timeout=&lt;num&gt;

此选项用于在引导加载程序中设置启动超时,默认值为 3 。设为 0 即可跳过启动菜单。

bootloader.fbres=&lt;w&gt;x&lt;h&gt;

此选项设置帧缓冲区分辨率。使用引导加载程序菜单来 设备的可用分辨率。

示例:bootloader.fbres=640x480

bootloader.default=&lt;network|local|zedboot&gt;

此选项会将默认启动设备设置为 netboot,使用本地 zircon.bin 或 通过 zedboot 切换到 netboot。

如何将命令行传递给内核

在模拟器或 Qemu 中,使用 ffx emu 或 fx qemu

使用 -c 传递每个选项,例如:

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

在 GigaBoot20x6 中,在进行 netboot 时

传递内核命令行末尾的 -- 分隔符,例如:

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

在 GigaBoot20x6 中,从 USB 闪存启动时

创建名为“cmdline”的文本文件在 U 盘的根目录下 或包含命令行的文件系统