Есть ли список доступных загрузочных аргументов для darwin / OS X

25

В OS X вы можете установить параметры загрузки с

nvram boot-args=[options]

Где опции, которые я знаю о -v (подробный) -x (безопасный режим) и arch = x86_64 (загрузка в 64-битное ядро ​​на 64-битных компьютерах).

Есть ли другие? Там, кажется, нет никакой документации.

STIB
источник

Ответы:

23

Официального списка нет, общий компилируется в само ядро, другие могут быть проанализированы расширениями ядра. Вот список, который я нашел до сих пор.

Общие параметры загрузки:

  • -v: Всегда загружайте систему в режиме Verbose без необходимости удерживать 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: Загрузить альтернативный список конфигурации (например 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 Debug {1}.
  • initmcl: Инициализация кластеров mbuf.
  • socket_debugОтладка сокета (нетто).
  • net_affinity: Чистая близость (нетто).
  • rte_debug: Route debug (net) {flags}.
  • -rwroot_hack: Монтировать root для чтения / записи.

IOKit:

  • mseg: Макс. Сегмент.
  • dart: Удалить маппер присутствует.
  • io: IO Kit Debug.

Мах:

  • keepsyms: Не выгружать KLD / преобразование адреса и символа {1}.
  • debug: Отладка ядра {флаги} (например debug=0x14e).

    Включает функции отладки ядра, которые покажут вам дополнительную информацию. Например

    • 0x01 - Остановитесь во время загрузки и дождитесь подключения отладчика.
    • 0x02 - Отправить вывод отладочной информации ядра на консоль
    • 0x04 - Заходить в отладчик по немаскируемому прерыванию
    • 0x08 - Отправить отладочную информацию ядра на последовательный порт
    • 0x10 - Сделать ddb отладчиком по умолчанию
    • 0x20 - Вывести диагностическую информацию в системный журнал
    • 0x40 - Разрешить отладчик для ARP и маршрутизации
    • 0x80 - Поддержка старых версий GDB на новых системах
    • 0x100 - Отключить графический диалог паники
  • nvram_paniclog: отправить паниклог в NVRAM {1}.

  • pmsafe_debug: Переведите процессоры в «безопасный» режим питания {1}.
  • preempt: Установка скорости вытеснения по умолчанию.
  • unsafe: Макс небезопасных квантов.
  • poll: Макс. Кванты опроса.
  • yield: График смещения доходности опроса.
  • idlehalt: Остановить холостой поток, чтобы процессор перешел в режим пониженного энергопотребления {1}.
  • panic_io_port: При панике читать с этого порта ввода / вывода {0x0 до 0xffff}.
  • _fpu: Ограничить возможности процессора при загрузке {387 / mmx / sse}.
  • disable high mem/2: предпочитаю высокую память}.
  • immediate_NMI: Принудительный немедленный отладчик NMI {1}.
  • -legacy: Принудительно использовать 32-битный режим.
  • lcks: Заблокировать статистику.
  • novmx: Нет эмуляции altivec в Rosetta {1}.
  • 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: Проверка элементов свободной зоны.
  • mtxspinMutex Spin (PPC).
  • vmmforce: Сила VMM (шт.)
  • fn: Force nap (ppc) (acpi) {0/1/2}.
  • pmsx: Экспериментальный шаговый режим управления питанием (ppc) {1}.
  • ctrc: Установить трассировку для конкретного процессора (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

    Он используется для отладки больших конфигураций физической памяти для систем более 4 ГБ. Режимы: 0 - все доступные страницы, 1 - отключить высокий мем, 2 - предпочитать высокий мем.

  • immediate_NMI

    Поддержка отладки для систем более 4 ГБ путем принудительного немедленного отладчика NMI.

  • urgency_notification_abstime

Другие:

  • bluetoothHostControllerSwitchBehavior( never/ always)

    Сообщите драйверу Bluetooth, переключаться ли на подключенный ключ. Для использования внешнего ключа по умолчанию даже после перезагрузки используйте always.

  • smbios: Подробный SMBIOS (AppleSMBIOS.kext) {1}

  • acpi: Отладка платформы AppleACPIP {1-8}
  • acpi_level: Уровень отладки ACPI
  • acpi_layer: ACPI Debug Layer
  • acpi_sleep: ACPI Sleep
  • nvdebug: Отладка NVDAResman
  • nvrm: NVDAResman
  • ndrv_debug_level: Уровень отладки NDRV (NVDAResman)
  • pstep: Power Step Debug (ACPI_SMC)
  • hpet: AppleHPET
  • busratio(например busratio=20): он использовал процессор i7 в 10.5.6, после 10.5.7 ему не нужен x86osx .

Источник: xnu-1228 / Boot Arguments


использование

Например, когда вы находитесь в одиночном режиме ( 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(который используется для анализа аргументов загрузки ядра).

kenorb
источник
2
Это один из моих самых любимых ответов! Спасибо!
Крис
10

Поиск в Google boot-args site:developer.apple.comдает хорошие ресурсы. Например

  • cpus=1 вынуждает систему использовать только одно ядро ​​процессора.
  • 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 (команда-питание, команда-опция-управление-управление-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 Контролирует, выводит ли ядро ​​полное ядро ​​(если флаг снят) или просто журнал паники (если флаг установлен).  
    
Spiff
источник
1
static void parse_bsd_args(void) opensource.apple.com/source/xnu/xnu-2782.1.97/bsd/kern/…
Денис Денисов
1
void i386_init(void) opensource.apple.com/source/xnu/xnu-2782.1.97/osfmk/i386/…
Денис Денисов
1
void gzalloc_configure(void) opensource.apple.com/source/xnu/xnu-2782.1.97/osfmk/kern/…
Денис Денисов
8

Вот еще немного :

-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)
Патчи
источник
Простая ссылка не очень полезна. Пожалуйста, расширьте свой ответ, чтобы он фактически содержал список некоторых опций, как и другие посты здесь.
nhinkle
@nhinkle: Готово. Первоначально я этого не делал, потому что отсутствие поддержки таблиц в StackExchange затрудняет их перечисление таким образом, чтобы это не было до боли уродливо. Но я полагаю, что уродливая информация лучше, чем отсутствие информации. :-)
патчи
Спасибо за обновление, @Patches. Это намного полезнее, +1!
nhinkle
3

Ядро darwin называется «xnu», лучшее, что я мог сделать, это найти исходный код для того, что искали.

Пример: OS X 10.8.5

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

Процедура:

Перейдите сюда (или ваша версия OS X)

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

Скачайте tar-архив XNU, извлеките, grep для "parse_boot"

cd xnu; grep -iRn parse_boot .

SLF
источник
Великолепные ссылки - спасибо! Знание, что соответствующей функцией является PE_parse_boot *, гораздо полезнее, чем регургитация статического и неизбежно устаревшего списка опций.
Тед Миддлтон
1

Не забывайте об очень полезной (если вы обновились до Lion и хотите использовать свой Mac в «закрытом режиме раскладушки» с открытой крышкой)

sudo nvram boot-args="iog=0x0"

слава к: chenga.8

Однако меня беспокоит то, что я не нахожу объяснения этому. Почему 0x0? Почему не 0x1? Что означает «йог» в любом случае?

Я должен отметить, что на моем MacBook это не работает.

lorenzog
источник
0x0 - это первый шестнадцатеричный десятичный период.
Тревор Рудольф
У меня это работало как на 10,7, так и на 10,8, но вам нужно перезагрузить, а затем закрыть и открыть крышку после запуска.
Лри
0

Apple, кажется, не предоставляет полный список. Погуглил несколько известных вариантов и site:apple.comне дал результатов. Сокращение списка опций позволяет найти статьи, подобные этой, и некоторый исходный код, анализирующий эти аргументы, но ничего комплексного.

Вы также можете найти PE_parse_boot_argфункцию, которая хорошо разбирает загрузочные аргументы.


При этом в Интернете есть несколько сторонних страниц, где пользователи предоставляют наиболее полную информацию, которую я могу найти, но она может быть устаревшей:

Даниэль Бек
источник