Answers:
没有正式的清单,常见的清单是自己编译成内核的,其他可以通过内核扩展来解析。这是我到目前为止找到的列表。
常规启动选项:
-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.plist)x86osx。
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:设置虚拟机颜色。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:NVDAResmanndrv_debug_level:NDRV调试级别(NVDAResman)pstep:功率步调试(ACPI_SMC)hpet:AppleHPETbusratio(例如busratio=20):它在10.5.6中使用了i7 cpu,在10.5.7之后不再需要x86osx。例如,当您处于单一模式(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
或通过搜索(用于解析内核启动参数)在Apple源文件或GitHub中进行检查PE_parse_boot_argn。
谷歌搜索提供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控制内核是转储完整内核(如果清除了标志)还是仅转储了紧急日志(如果设置了标志)。
static void parse_bsd_args(void) opensource.apple.com/source/xnu/xnu-2782.1.97/bsd/kern/...
void i386_init(void) opensource.apple.com/source/xnu/xnu-2782.1.97/osfmk/i386/...
void gzalloc_configure(void) opensource.apple.com/source/xnu/xnu-2782.1.97/osfmk/kern/...
-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)
darwin内核被称为“ 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 .
苹果似乎没有提供完整的清单。搜寻一些已知选项,site:apple.com不会产生任何结果。减少选项列表可以找到类似此文章的文章以及一些解析这些参数的源代码,但是没有什么全面的。
您也可以搜索PE_parse_boot_arg,该函数可以解析启动参数。
话虽如此,网络上有一些第三方页面,用户可以在其中找到我所能找到的最全面的信息,但是这些信息可能已经过时了: