是否有适用于 darwin / OS X 的可用引导参数列表

sti*_*tib 38 boot efi macos

在 OS X 中,您可以设置启动参数

nvram boot-args=[options]
Run Code Online (Sandbox Code Playgroud)

我知道的关于 -v(详细)-x(安全模式)和 arch=x86_64(在支持 64 位的机器上启动到 64 位内核)的选项。

还有其他人吗?似乎没有任何文档。

ken*_*orb 43

没有官方列表,常用的都是自己编译进内核的,其他的可以通过内核扩展来解析。这是我迄今为止找到的列表。

一般启动选项:

  • -v:始终以详细模式启动系统而无需按住CMD-V在启动时。
  • -x:始终将系统引导到安全模式,而无需Shift在启动时按住。
  • f: 旧的安全模式。
  • -s:将系统引导至单用户模式,无需按住CMD-S在启动时。
  • -F - 忽略引导文件。
  • iog(例如iog=0x0

    这与 Apple 笔记本电脑系统的“翻盖”模式相反,当您关闭显示器但将系统连接到外部显示器和键盘时,系统将保持唤醒状态。运行此命令后,当连接外部显示器时,内部显示器将被禁用,这在某些情况下很有用,例如您正在镜像桌面但希望以比笔记本电脑更高的分辨率运行外部显示器. 网络

  • arch

    更改系统引导至 32 位 ( i386) 或 64 位 ( x86_64) 内核的方式。请注意,第三方内核扩展可能仅为 32 位或 64 位。

  • Graphics Mode:VESA 图形模式尺寸。

  • Text Mode: VGA 文本模式尺寸。
  • Boot Graphics:图形或文本模式。
  • Quiet Boot: 安静的引导模式。
  • MKext Cache: Mkext 缓存文件。
  • Kernel Cache: 内核缓存文件。
  • rd: 根设备。
  • boot-uuid: 启动 UUID。
  • platform:平台专家{ACPI}。
  • config:加载备用配置 plist(例如config=foobar将加载/Library/Preferences/SystemConfiguration/foobar.plist而不是com.apple.Boot.plistx86osx

  • serverperfmode=1

    在 OS X El Capitan 10.11 及更高版本上,这使性能模式能够将额外的系统资源专用于服务器应用程序。

跟踪:

  • dtrace_dof_mode:设置 DTrace DOF 模式 {0/1/2/3}。
  • DisableFBT:禁用 FBT {1}。
  • IgnoreFBTBlacklist:忽略某些关键模块的黑名单{1}。

BSD:

  • -b: 不要运行/etc/rc.boot。
  • -l:内存泄漏日志记录 ( osfmk/kern/startup.c)。
  • srv: 作为服务器 {1} 启动。
  • ncl:簇数。
  • nbuf: BSD 的缓冲区数。
  • kmem: 内核内存访问{1}。
  • trace:内核跟踪缓冲区大小。
  • msgbuf: 消息缓冲区。
  • rp: 根路径。
  • mcache_flags:内存缓存标志。
  • mbuf_debug:MBuf 调试{1}。
  • initmcl: 初始化 mbuf 集群。
  • socket_debug:套接字调试(网络)。
  • net_affinity:净亲和力(净)。
  • rte_debug:路由调试(网络){flags}。
  • -rwroot_hack: 挂载 root 读/写。

IOKit:

  • mseg:最大段。
  • dart:删除存在的映射器。
  • io: IO 套件调试。

马赫:

  • keepsyms:不要卸载 KLD/地址符号转换 {1}。
  • debug:内核调试{flags}(例如debug=0x14e)。

    启用内核调试功能,将显示额外的信息。例如

    • 0x01 - 在启动时停止并等待调试器附加
    • 0x02 - 将内核调试输出发送到控制台
    • 0x04 - 在不可屏蔽中断时进入调试器
    • 0x08 - 将内核调试信息发送到串口
    • 0x10 - 将 ddb 设为默认调试器
    • 0x20 - 输出诊断信息到系统日志
    • 0x40 - 允许调试器进行 ARP 和路由
    • 0x80 - 在较新的系统上支持旧版本的 gdb
    • 0x100 - 禁用图形紧急对话框屏幕
  • nvram_paniclog: 将恐慌日志提交到 NVRAM {1}。

  • pmsafe_debug:将 CPU 置于“安全”电源模式 {1}。
  • preempt: 设置默认抢占率。
  • unsafe: 最大不安全量。
  • poll:最大轮询量。
  • yield:安排轮询收益率转移。
  • idlehalt:暂停空闲线程以允许 cpu 进入低功耗模式 {1}。
  • panic_io_port:在从这个 I/O 端口 {0x0 到 0xffff} 的紧急读取中。
  • _fpu:限制启动时 CPU 功能 {387/mmx/sse}。
  • disable high mem/2: 更喜欢高内存}。
  • immediate_NMI: 强制立即 NMI 调试器 {1}。
  • -legacy: 强制使用传统 32 位模式。
  • lcks: 锁统计。
  • novmx: Rosetta {1} 中没有altivec 仿真。
  • max_valid_dma_addr: 最大有效 DMA 地址。
  • maxbouncepool:最大反弹池大小。
  • maxloreserve: 最大低储备。
  • npvhash:物理到虚拟映射哈希。
  • wpkernel: 写保护内核{1}。
  • -no_shared_cr3: 为 6​​4 位用户禁用共享内核地址空间。
  • -pmap_trace: 为 pmap 启用内核跟踪。
  • _panicd_ip:恐慌服务器的IP。
  • _router_ip: 路由器的IP。
  • panicd_port: 恐慌服务器的端口。
  • -zc:自由区元素检查。
  • mtxspin:互斥自旋(ppc)。
  • vmmforce: VMM 力 (ppc)。
  • fn:强制小睡 (ppc) (acpi) {0/1/2}。
  • pmsx:实验电源管理步进模式 (ppc) {1}。
  • ctrc: 将跟踪设置为特定的 cpu (ppc)。
  • tb:非默认跟踪缓冲区大小 (ppc)。
  • wcte: 写组合定时器使能 (ppc)。
  • mcklog: 清除机器检查标志 (ppc)。
  • mcksoft:机器检查软件恢复(ppc)。
  • ht_shift:非默认哈希表大小 (ppc) {1}。
  • zsize:目标区域大小。
  • colors: 设置虚拟机颜色。
  • fill: 填页。
  • serialbaud: 设置串行波特率。

启动选项来自xnu/osfmk/i386/i386_init.c

  • diag:诊断输出。
  • serial: 串行诊断控制台。支持串行键盘和/或控制台。

  • maxmem

    要使用的最大内存。它将可寻址内存限制为指定的数量(例如maxmem=32)。

  • cpus=1

    将系统中活动处理器的数量限制为设置级别。这可能有助于保持功率,除非您正在测试和编程,否则可能对其他很多事情没有用。

  • himemory_mode

    它用于调试超过 4GB 系统的大型物理内存配置。模式:0 - 所有页面可用,1 - 禁用高内存,2 - 首选高内存。

  • immediate_NMI

    通过强制立即 NMI 调试器调试支持超过 4GB 的系统。

  • urgency_notification_abstime

其他:

  • bluetoothHostControllerSwitchBehavior( never/ always)

    告诉蓝牙驱动程序是否切换到您插入的加密狗。要使外部加密狗即使在重新启动后仍为默认值,请使用always.

  • smbios: 详细 SMBIOS (AppleSMBIOS.kext) {1}

  • acpi: 调试 AppleACPIPlatform {1-8}
  • acpi_level: ACPI 调试级别
  • acpi_layer: ACPI 调试层
  • acpi_sleep: ACPI 睡眠
  • nvdebug: NVDAResman 调试
  • nvrm: NVDA雷斯曼
  • ndrv_debug_level: NDRV 调试级别 (NVDAResman)
  • pstep: 电源步进调试 (ACPI_SMC)
  • hpet: 苹果HPET
  • busratio(例如busratio=20):它在 10.5.6 中使用 i7 cpu,在 10.5.7 之后它不需要x86osx

来源:xnu-1228 / 引导参数


用法

例如,当您处于单模式时(CMD-S在启动时发出声音之后),要进入安全模式并详细地将额外的内核调试输出输出到控制台,请尝试:

sudo nvram boot-args="-x -v debug=0x14e"
Run Code Online (Sandbox Code Playgroud)

要将参数添加到现有(不覆盖)中,请尝试:

sudo nvram boot-args="-v $(nvram boot-args 2>/dev/null | cut -f 2-)"
Run Code Online (Sandbox Code Playgroud)

要删除引导参数,请运行:

sudo nvram boot-args=""
sudo nvram -d boot-args
Run Code Online (Sandbox Code Playgroud)

其他非官方参数可以在kernel二进制本身中找到,例如

$ strings /System/Library/Kernels/kernel | grep -C7 maxmem
kernel_early_bootstrap
diag
serial
Serial mode specified: %08X
PE_init_printf
version_variant = %s
version         = %s
maxmem
himemory_mode
himemory_mode: %d
immediate_NMI
urgency_notification_abstime
i386_vm_init
power_management_init
machine_startup
Run Code Online (Sandbox Code Playgroud)

或者通过搜索(用于解析内核启动参数)在Apple 源文件或 GitHub 上检查PE_parse_boot_argn

  • 这是我最喜欢的答案之一!谢谢! (2认同)

Spi*_*iff 11

谷歌搜索提供boot-args site:developer.apple.com了一些很好的资源。例如

  • cpus=1 强制系统仅使用单个 CPU 内核。
  • srv=1 在 Xserve 和安装了 Mac OS X Server 的机器上设置,据说更改了一些内核调整参数以实现服务器友好操作。
  • _panicd_ip=a.b.c.d 允许您指定要写入内核核心转储的紧急调试服务器的 IP 地址。
  • debug=0xH (其中 H 是 1-4 位十六进制数)让您从此列表中设置内核调试标志:

    DB_HALT 0x01 在启动时暂停并等待调试器附加 (gdb)。  
    DB_PRT 0x02 将内核调试 printf 输出发送到控制台。  
    DB_NMI 0x04 进入 NMI 上的调试器(Command-Power、Command-Option-Control-Shift-Escape 或中断开关)。  
    DB_KPRT 0x08 将内核调试 kprintf 输出发送到串口。  
    DB_KDB 0x10 使 ddb (kdb) 成为默认调试器(需要自定义内核)。  
    DB_SLOG 0x20 将某些诊断信息输出到系统日志。  
    DB_ARP 0x40 允许调试器进行 ARP 和路由(允许跨路由器调试并消除对永久 ARP 条目的需要,但这是一个潜在的安全漏洞)— 并非在所有内核中都可用。  
    DB_KDP_BP_DIS 0x80 在较新的系统上支持旧版本的 gdb。  
    DB_LOG_PI_SCRN 0x100 禁用图形紧急对话框。  
    DB_KERN_DUMP_ON_PANIC 0x0400 导致内核在系统崩溃时进行核心转储。  
    DB_KERN_DUMP_ON_NMI 0x0800 当用户触发 NMI 时,使内核进行核心转储。  
    DB_DBG_POST_CORE 0x1000 在响应 NMI (DB_KERN_DUMP_ON_NMI) 转储内核后控制内核的行为。如果用户触发 NMI 并且此标志清除,内核将转储核心然后继续。相反,如果设置了此标志,内核将转储核心,然后等待调试器连接。  
    DB_PANICLOG_DUMP 0x2000 控制内核是转储完整内核(如果标志已清除)还是仅转储紧急日志(如果已设置标志)。  
    


Pat*_*hes 9

这里还有一些

-f                            Force rebuild extensions cache
-v                            Verbose booting shows debug information
-s                            Boots into single user mode (means only terminal based mode)
-x                            Boots into safe mode
-legacy                       Boots into 32bit instead of 64bit mode
rd=disk0s1                    Force to boot a specific partition on a specific drive (BSD drive notation, means disk0 = physical disk 1). Here disk1 partition 1 is forced to be booted.
Graphics Mode=1024x768x32@75  Forces to boot with a resolution of 1024 x 768 with 32bit colors at 75Hz
Kernel=mach_kernel            Forces to load a specific kernel, helpful for testing of new kernels.
cpus=1                        Force using only 1 CPU core, may help addressing issues
idlehalt=0                    May solve stuttering and shuttering on dualcore CPUs
platform=X86PC                Forces to not use powermanagement (disables ACPI)
platform=ACPI                 Forces to use powermanagement (enables ACPI, but may crash your system)
Run Code Online (Sandbox Code Playgroud)


slf*_*slf 5

达尔文内核被称为“xnu”,我能做的最好的事情就是 grep 正在寻找的源代码。

示例:OS X 10.8.5

https://gist.github.com/reklis/fa26d4e8db62d6eea9ea

程序:

去这里(或您的 OS X 版本)

http://www.opensource.apple.com/release/mac-os-x-1085/

下载 XNU tarball,解压,grep 为“parse_boot”

cd xnu; grep -iRn parse_boot .