Skip to content

启动配置 ​

UniXNU 启动管理器先从启动所在卷读取 \EFI\UniXNU\unixnu.toml,再扫描其他卷。kit 目录中的 Kit.toml 使用相同的 match 和注入段。

unixnu.toml ​

toml
version = 1

[boot]
timeout = 5
rotate = 0
fallback_timeout = 10
connect_all = true
default = "xnu"

[ui]
title = "UniXNU"
scale = 0
logo = true
console = "auto"

[boot] ​

键默认含义
timeout5秒数,负数等待输入
rotate0空闲高亮轮换秒数,0 关闭
fallback_timeout10无输入设备时的超时
connect_alltrue对所有 handle 调用 ConnectController
default第一项菜单项 id 或索引

[ui] ​

键默认含义
titleUniXNU菜单标题
scale0字形缩放,0 自动
logotrue绘制标志
consoleautoauto、graphics、text 或 none

[[driver]] ​

toml
[[driver]]
path = "Drivers/MyDriver.efi"
args = "board=1"
connect = true
enabled = true
键默认含义
path必需文件路径或 fv:<GUID>
argsload options
connecttrue驱动启动后连接控制器
enabledtruefalse 跳过

kit 驱动使用 file 代替 path。

[[dt_patch]] ​

toml
[[dt_patch]]
op = "set"
node = "/chosen"
prop = "bootargs"
value = "console=ttyAMA0"
type = "string"
键含义
opset、delete-prop、add-node、delete-node 或 overlay
node绝对节点路径
propset 和 delete-prop 的属性名
valueset 的值
typestring、stringlist、u32、u64、bytes 或 empty
fileoverlay 的文件

补丁应用于 EFI 和 Linux 菜单项。Darwin 路径使用 .adt sidecar。

[[block_slice]] ​

toml
[[block_slice]]
partition = "<GPT name>"
name = "<slice name>"
offset = 0
length = 0
writable = false
enabled = true
键含义
partitionGPT 分区名
name设备路径中的标签
offset相对分区起始的字节偏移
length字节长度,0 表示到末尾
writable发布可写块设备
enabledfalse 跳过

切片以整盘形式出现,子分区方案或文件系统驱动可以绑定。

ACPI ​

toml
[acpi]
add = ["Tables/DSDT.aml", "Tables/SSDT.aml"]

每个表通过 EFI_ACPI_TABLE_PROTOCOL 安装,header 长度必须匹配文件大小。

kit ​

toml
[[kit]]
path = "Kits/MyKit.kit"
enabled = true

[kits]
autoload = true
directory = "Kits"

显式 kit 先加载。autoload 为 true 时,directory 下每个 *.kit 按名称顺序加载。

[[entry]] ​

toml
[[entry]]
id = "xnu"
title = "UniXNU"
type = "xnu"
path = "Payloads/kernel.macho"
args = "-v serial=3"
initrd = "Payloads/scratch-data.img"
enabled = true
键含义
id菜单项标识
title菜单标题
typeefi、linux、action 或 xnu
pathEFI 程序、Linux 镜像或内核路径
argsload options 或内核命令行
dtbfirmware、文件路径或省略
initrdinitrd 路径
actionaction 类型的 reset、shutdown 或 exit
enabledfalse 跳过

内置配置包含 exit、reset 和 shutdown。找不到文件时,可移动加载器会加在它们之前。

[entry.chosen] ​

toml
[entry.chosen]
bootargs = "console=ttyAMA0"

每个键成为 /chosen 属性,在菜单项补丁之后应用。

[[entry.kext]] ​

toml
[[entry.kext]]
bundle = "Kexts/MyDriver.kext"
plist = "Contents/Info.plist"
executable = "Contents/MacOS/MyDriver"
enabled = true

菜单项 kext 只作用于声明它的菜单项。

[[entry.variable]] ​

toml
[[entry.variable]]
guid = "00000000-0000-0000-0000-000000000000"
name = "MyVariable"
value = "hello"
type = "ascii"
volatile = true
键含义
guid变量 GUID
name变量名
value值
typeascii、ucs2、u8、u16、u32、u64 或 bytes
volatilefalse 加入 EFI_VARIABLE_NON_VOLATILE

变量在菜单项启动前设置。

[[entry.dt_patch]] ​

菜单项接受自己的 [[dt_patch]] 数组,在全局补丁之后应用。

Kit.toml ​

toml
schema = 1

[kit]
name = "MyKit"
version = "1.0.0"
description = "Board support"

[match]
arch = "AARCH64"
fdt_compatible = ["vendor,board"]
firmware_vendor = ["Vendor"]
requires_protocol = ["00000000-0000-0000-0000-000000000000"]

[[driver]]
file = "MyDriver.efi"
args = "from-kit"

[[overlay]]
file = "board.dtbo"

[[dt_patch]]
op = "set"
node = "/chosen"
prop = "from-kit"
value = "1"
type = "u32"

[[acpi]]
file = "DSDT.aml"

[[kext]]
bundle = "MyDriver.kext"
entry = "xnu"
段含义
[kit]名称、版本、描述
[match]所有存在的键必须匹配
[[driver]]相对 kit 的驱动文件
[[overlay]]相对 kit 的设备树 overlay
[[dt_patch]]设备树补丁
[[acpi]]相对 kit 的 ACPI 表
[[kext]]限定菜单项 id 的 kext 包

match 键:

键含义
archAARCH64
fdt_compatible固件根 compatible 列表中的字符串
firmware_vendorgST->FirmwareVendor 的子串
requires_protocol必须已安装的 GUID

同一个键内任意值匹配,跨键必须全部匹配。

菜单行为 ​

条件结果
有输入设备倒计时到超时
无输入设备使用 fallback_timeout
负超时且有输入等待按键
负超时且无输入使用 fallback_timeout
启动失败返回菜单,不再倒计时

菜单显示配置来源、菜单项、注入摘要和第一条错误。

下一步 ​

Released under the BSD-2-Clause-Patent License.