在 OS X 中,你可以使用以下命令设置启动参数
nvram boot-args=[options]
我知道的选项是 -v(详细)-x(安全模式)和 arch=x86_64(在支持 64 位的机器上启动 64 位内核)。
还有其他的吗?好像没有任何文档。
答案1
没有官方的列表,常见的都编译进内核了,其他的可以通过内核扩展来解析。下面是我目前找到的列表。
常规启动选项:
-v
:始终以详细模式启动系统,而无需在启动时按住CMD- V。-x
:始终将系统启动到安全模式无需Shift在启动时按住。f
:旧安全模式。-s
:启动系统进入单用户模式,无需在启动时按住CMD- S。-F
- 忽略启动文件。iog
(例如iog=0x0
)这会反转 Apple 笔记本电脑系统的“翻盖”模式,即当您关闭显示屏但将系统连接到外部显示器和键盘时,系统将保持唤醒状态。运行此命令后,当连接外部显示器时,内部显示器将被禁用,这在某些情况下很有用,例如当您镜像桌面但希望以比笔记本电脑更高的分辨率运行外部显示器时。CNET
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.plist
)x86操作系统。serverperfmode=1
在 OS X El Capitan 10.11 及更高版本中,这将启用性能模式为服务器应用程序提供额外的系统资源。
DTrace:
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
:以读/写方式挂载根目录。
IOKit:
mseg
:最大段。dart
:删除现有的映射器。io
:IO 套件调试。
马赫:
keepsyms
:不卸载 KLD/地址符号转换{1}。debug
:内核调试{flags}(例如debug=0x14e
)。启用内核调试功能,它将向您显示更多信息。例如
0x01
- 在启动时停止并等待调试器连接0x02
- 将内核调试输出发送到控制台0x04
- 在不可屏蔽中断时进入调试器0x08
- 发送内核调试信息到串口0x10
- 将 ddb 设为默认调试器0x20
- 将诊断信息输出到系统日志0x40
- 允许调试器 ARP 和路由0x80
- 在较新的系统上支持旧版本的 gdb0x100
- 禁用图形恐慌对话框屏幕
nvram_paniclog
:将 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
:禁用 64 位用户的共享内核地址空间。-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
:设置VM颜色。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
: 苹果HPETbusratio
(例如busratio=20
):10.5.6 版本使用了 i7 CPU,10.5.7 版本之后就不需要了x86操作系统。
用法
例如,当您处于单一模式(启动时的声音CMD后S)时,要进入安全模式并将额外的内核调试输出详细地输出到控制台,请尝试:
sudo nvram boot-args="-x -v debug=0x14e"
要将参数添加到现有参数中(不覆盖),请尝试:
sudo nvram boot-args="-v $(nvram boot-args 2>/dev/null | cut -f 2-)"
要删除启动参数,请运行:
sudo nvram boot-args=""
sudo nvram -d boot-args
其他非官方参数可以在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
或者苹果源文件或在 GitHub 上搜索PE_parse_boot_argn
(用于解析内核启动参数)。
答案2
谷歌搜索boot-args site:developer.apple.com
提供了一些很好的资源。例如
cpus=1
强制系统仅使用单个 CPU 核心。srv=1
在 Xserves 和安装了 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 控制内核是否转储完整核心(如果标志清除)或仅仅是恐慌日志(如果设置了标志)。
答案3
-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)
答案4
不要忘记它非常有用(如果你更新到了 Lion 并且想在打开盖子的情况下以“合盖模式”使用你的 Mac)
sudo nvram boot-args="iog=0x0"
感谢:成加.8
然而,让我困扰的是,我找不到任何解释。为什么是 0x0?为什么不是 0x1?“iog”到底代表什么?
我应该指出的是,在我的 MacBook 上它不起作用。