Czy istnieje lista dostępnych argumentów rozruchowych dla darwin / OS X

25

W OS X można ustawić parametry rozruchu za pomocą

nvram boot-args=[options]

Gdzie opcje, które znam na temat -v (verbose) -x (tryb awaryjny) i arch = x86_64 (bootowanie do 64-bitowego jądra na komputerach obsługujących 64-bit).

Czy są jeszcze jakieś? Wydaje się, że nie ma żadnej dokumentacji.

dźgnięcie
źródło

Odpowiedzi:

23

Nie ma oficjalnej listy, wspólna jest kompilowana w jądro, inne mogą być analizowane przez rozszerzenia jądra. Oto lista, którą znalazłem do tej pory.

Ogólne opcje uruchamiania:

  • -v: Zawsze uruchamiaj system w trybie pełnym, bez konieczności wstrzymywania CMD- Vpodczas uruchamiania.
  • -x: Zawsze uruchamiaj system w trybie awaryjnym bez konieczności trzymania go Shiftpodczas uruchamiania.
  • f: Stary tryb awaryjny.
  • -s: Uruchom system w trybie pojedynczego użytkownika bez konieczności wstrzymywania CMD- Spodczas uruchamiania.
  • -F - Zignoruj ​​plik rozruchowy.
  • iog(np. iog=0x0)

    Powoduje to odwrócenie trybu „Clamshell” w komputerach przenośnych Apple, w którym po zamknięciu wyświetlacza, ale podłączeniu systemu do zewnętrznego monitora i klawiatury, system pozostanie bezczynny. Po uruchomieniu tego polecenia, po podłączeniu zewnętrznego monitora, wewnętrzny wyświetlacz zostanie wyłączony, co może być korzystne w niektórych sytuacjach, takich jak te, gdy dublujesz pulpit, ale chcesz uruchomić zewnętrzny wyświetlacz w wyższej rozdzielczości niż laptop może działać . CNET

  • arch

    Zmienia sposób uruchamiania systemu, na jądro 32-bitowe ( i386) lub 64-bitowe ( x86_64). Pamiętaj, że rozszerzenia jądra innych firm mogą być 32-bitowe lub tylko 64-bitowe.

  • Graphics Mode: Wymiary trybu graficznego VESA.

  • Text Mode: Wymiary trybu tekstowego VGA.
  • Boot Graphics: Tryb graficzny lub tekstowy.
  • Quiet Boot: Quiet Bootmode.
  • MKext Cache: Plik pamięci podręcznej Mkext.
  • Kernel Cache: Plik pamięci podręcznej jądra.
  • rd: Urządzenie root.
  • boot-uuid: Uruchom identyfikator UUID.
  • platform: Platform Expert {ACPI}.
  • config: Obciążenia alternatywną plist konfiguracyjne (np config=foobarładuje /Library/Preferences/SystemConfiguration/foobar.plistzamiast com.apple.Boot.plist) x86osx .

  • serverperfmode=1

    W systemie OS X El Capitan 10.11 i nowszych umożliwia to trybowi wydajności przeznaczenie dodatkowych zasobów systemowych dla aplikacji serwerowych.

DTrace:

  • dtrace_dof_mode: Ustaw tryby DTrace DOF {0/1/2/3}.
  • DisableFBT: Wyłącz FBT {1}.
  • IgnoreFBTBlacklist: Zignoruj ​​czarną listę niektórych krytycznych modułów {1}.

BSD:

  • -b: Nie uruchamiaj /etc/rc.boot.
  • -l: Rejestrowanie wycieków pamięci ( osfmk/kern/startup.c).
  • srv: Uruchom jako serwer {1}.
  • ncl: Liczba klastrów.
  • nbuf: Liczba buforów dla BSD.
  • kmem: Dostęp do pamięci jądra {1}.
  • trace: Rozmiar bufora śledzenia jądra.
  • msgbuf: Bufor wiadomości.
  • rp: Ścieżka główna.
  • mcache_flags: Flagi pamięci podręcznej.
  • mbuf_debug: MBuf Debug {1}.
  • initmcl: Init klastrów mbuf.
  • socket_debug: Debugowanie gniazda (netto).
  • net_affinity: Powinowactwo netto (netto).
  • rte_debug: Route debug (net) {flags}.
  • -rwroot_hack: Zamontuj root do odczytu / zapisu.

IOKit:

  • mseg: Maksymalny segment.
  • dart: Usuń obecny program mapujący.
  • io: Debugowanie zestawu IO.

Mach:

  • keepsyms: Nie usuwaj tłumaczenia KLD / translacji symboli adresu {1}.
  • debug: Debugowanie jądra {flagi} (np debug=0x14e.).

    Włącza funkcje debugowania jądra, które pokażą dodatkowe informacje. Na przykład

    • 0x01 - Zatrzymaj się w czasie uruchamiania i poczekaj na dołączenie debugera
    • 0x02 - Wyślij wyjście debugowania jądra do konsoli
    • 0x04 - Wpadnij do debuggera w przypadku niemożliwego do wykonania przerwania
    • 0x08 - Wyślij informacje debugowania jądra do portu szeregowego
    • 0x10 - Ustaw ddb jako domyślny debugger
    • 0x20 - Przesyłanie informacji diagnostycznych do dziennika systemu
    • 0x40 - Pozwól debuggerowi na ARP i trasę
    • 0x80 - Obsługa starych wersji gdb na nowszych systemach
    • 0x100 - Wyłącz graficzny ekran dialogowy paniki
  • nvram_paniclog: zatwierdzanie paniclogu do NVRAM {1}.

  • pmsafe_debug: Przełącz procesory w „bezpieczny” tryb zasilania {1}.
  • preempt: Ustaw domyślną stawkę pierwszeństwa.
  • unsafe: Max niebezpieczne kwanty.
  • poll: Max kwanty ankiet.
  • yield: Zaplanuj przesunięcie wydajności sondowania.
  • idlehalt: Zatrzymaj bezczynny wątek, aby umożliwić procesorowi przejście w tryb niskiej mocy {1}.
  • panic_io_port: W panice odczytanej z tego portu we / wy {0x0 do 0xffff}.
  • _fpu: Ogranicz funkcje procesora w czasie uruchamiania {387 / mmx / sse}.
  • disable high mem/2: preferuj wysoką pamięć}.
  • immediate_NMI: Wymusza natychmiastowy debugger NMI {1}.
  • -legacy: Wymuś tryb 32-bitowy starszego typu.
  • lcks: Zablokuj statystyki.
  • novmx: Brak emulacji altivec w Rosetta {1}.
  • max_valid_dma_addr: Maksymalny prawidłowy adres DMA.
  • maxbouncepool: Maksymalny rozmiar puli odrzuceń.
  • maxloreserve: Maksymalna niska rezerwa.
  • npvhash: Skrót do mapowania fizycznego na wirtualny.
  • wpkernel: Zapisz jądro ochrony {1}.
  • -no_shared_cr3: Wyłącz współdzieloną przestrzeń adresową jądra dla 64-bitowych użytkowników.
  • -pmap_trace: Włącz śledzenie jądra dla pmap.
  • _panicd_ip: IP serwera paniki.
  • _router_ip: IP routera.
  • panicd_port: Port serwera paniki.
  • -zc: Sprawdzanie elementu strefy wolnej.
  • mtxspin: Mutex spin (ppc).
  • vmmforce: Siła VMM (ppc).
  • fn: Force nap (ppc) (acpi) {0/1/2}.
  • pmsx: Eksperymentalny tryb krokowy zarządzania energią (ppc) {1}.
  • ctrc: Ustaw śledzenie na konkretną jednostkę centralną (ppc).
  • tb: Inny niż domyślny rozmiar bufora śledzenia (ppc).
  • wcte: Napisz włączanie włącznika czasowego (ppc).
  • mcklog: Wyczyść flagę kontroli maszyny (ppc).
  • mcksoft: Odzyskiwanie oprogramowania do sprawdzania maszyn (ppc).
  • ht_shift: Inny niż domyślny rozmiar tabeli skrótów (ppc) {1}.
  • zsize: Rozmiar strefy docelowej.
  • colors: Ustaw kolory VM.
  • fill: Wypełnij strony.
  • serialbaud: Ustaw szybkość transmisji szeregowej.

Opcje rozruchu z xnu/osfmk/i386/i386_init.c:

  • diag: Wyjście diagnostyczne.
  • serial: Szeregowa konsola diagnostyczna. Obsługa klawiatury szeregowej i / lub konsoli.

  • maxmem

    Maksymalna pamięć do użycia. Ogranicza pamięć adresowalną do określonej ilości (np maxmem=32.).

  • cpus=1

    Ogranicza liczbę aktywnych procesorów w systemie do ustawionego poziomu. Może to pomóc w oszczędzaniu energii, co prawdopodobnie nie będzie przydatne w wielu innych przypadkach, chyba że testujesz i programujesz.

  • himemory_mode

    Służy do debugowania dużych konfiguracji pamięci fizycznej dla systemów ponad 4 GB. Tryby: 0 - wszystkie dostępne strony, 1 - wyłącz wysoką pamięć, 2 - preferuj wysoką pamięć.

  • immediate_NMI

    Obsługa debugowania dla systemów ponad 4 GB poprzez wymuszenie natychmiastowego debuggera NMI.

  • urgency_notification_abstime

Inny:

  • bluetoothHostControllerSwitchBehavior( never/ always)

    Powiedz sterownikowi Bluetooth, czy przełączyć się na klucz, który podłączyłeś. Aby ustawić domyślny klucz zewnętrzny nawet po ponownym uruchomieniu, użyj always.

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

  • acpi: Debuguj AppleACPIPlatform {1-8}
  • acpi_level: Poziom debugowania ACPI
  • acpi_layer: Warstwa debugowania ACPI
  • acpi_sleep: ACPI Sleep
  • nvdebug: Debugowanie NVDAResman
  • nvrm: NVDAResman
  • ndrv_debug_level: Poziom debugowania NDRV (NVDAResman)
  • pstep: Debugowanie kroku zasilania (ACPI_SMC)
  • hpet: AppleHPET
  • busratio(np. busratio=20): Używał procesora i7 w 10.5.6, po 10.5.7 nie potrzebuje x86osx .

Źródło: xnu-1228 / Boot Arguments


Stosowanie

Na przykład, gdy jesteś w trybie pojedynczym ( CMD- Spo dźwięku przy starcie), aby przejść do trybu awaryjnego i ustnie z dodatkowym wyjściem debugującym jądro do konsoli, spróbuj:

sudo nvram boot-args="-x -v debug=0x14e"

Aby dodać argument do istniejącego (bez przesłonięcia), spróbuj:

sudo nvram boot-args="-v $(nvram boot-args 2>/dev/null | cut -f 2-)"

Aby usunąć argumenty rozruchowe, uruchom:

sudo nvram boot-args=""
sudo nvram -d boot-args

Inne nieoficjalne parametry można znaleźć w kernelbinarnej wersji, np

$ 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

Lub sprawdź w plikach źródłowych Apple lub na GitHub, wyszukując PE_parse_boot_argn(który służy do analizy argumentów rozruchowych jądra).

kenorb
źródło
2
To jedna z moich ulubionych odpowiedzi! Dziękuję Ci!
Chris
10

Googling dla boot-args site:developer.apple.comdaje dobre zasoby. Na przykład

  • cpus=1 zmusza system do używania tylko jednego rdzenia procesora.
  • srv=1 jest ustawiony na Xserves i komputerach, na których zainstalowany jest Mac OS X Server, i podobno zmienia niektóre parametry strojenia jądra dla przyjaznej dla serwera pracy.
  • _panicd_ip=a.b.c.d Pozwala określić adres IP panikowego serwera debugowania, na którym będą zapisywane zrzuty jądra jądra.
  • debug=0xH (Gdzie H jest 1-4 cyfrową liczbą szesnastkową) Umożliwia ustawienie flag debugowania jądra z tej listy:

    DB_HALT 0x01 Zatrzymaj się podczas uruchamiania i poczekaj na dołączenie debuggera (gdb).  
    DB_PRT 0x02 Wyślij wyjście debugowania jądra printf do konsoli.  
    DB_NMI 0x04 Drop do debuggera w NMI (Command-Power, Command-Option-Control-Shift-Escape lub przełącznik przerwań).  
    DB_KPRT 0x08 Wyślij wyjście debugowania jądra kprintf na port szeregowy.  
    DB_KDB 0x10 Ustaw ddb (kdb) jako domyślny debugger (wymaga niestandardowego jądra).  
    DB_SLOG 0x20 Przesyłanie określonych informacji diagnostycznych do dziennika systemu.  
    DB_ARP 0x40 Zezwól debugerowi na ARP i trasowanie (umożliwia debugowanie między routerami i eliminuje potrzebę stałego wpisu ARP, ale jest potencjalną luką bezpieczeństwa) - nie jest dostępne we wszystkich jądrach.  
    DB_KDP_BP_DIS 0x80 Obsługa starych wersji gdb na nowszych systemach.  
    DB_LOG_PI_SCRN 0x100 Wyłącz graficzne okno dialogowe paniki.  
    DB_KERN_DUMP_ON_PANIC 0x0400 Powoduje zrzut jądra, gdy system wpadnie w panikę.  
    DB_KERN_DUMP_ON_NMI 0x0800 Powoduje zrzut jądra, gdy użytkownik wyzwoli NMI.  
    DB_DBG_POST_CORE 0x1000 Steruje zachowaniem jądra po zrzuceniu rdzenia w odpowiedzi na NMI (DB_KERN_DUMP_ON_NMI). Jeśli użytkownik wyzwoli NMI i ta flaga jest czysta, jądro zrzuci rdzeń, a następnie będzie kontynuował. I odwrotnie, jeśli ta flaga jest ustawiona, jądro zrzuci rdzeń, a następnie zaczeka na połączenie debuggera.  
    DB_PANICLOG_DUMP 0x2000 Kontroluje, czy jądro zrzuca pełny rdzeń (jeśli flaga jest czysta), czy po prostu dziennik paniki (jeśli flaga jest ustawiona).  
    
Spiff
źródło
1
static void parse_bsd_args(void) opensource.apple.com/source/xnu/xnu-2782.1.97/bsd/kern/…
Denis Denisov
1
void gzalloc_configure(void) opensource.apple.com/source/xnu/xnu-2782.1.97/osfmk/kern/…
Denis Denisov
8

Oto kilka innych :

-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)
Łatki
źródło
Zwykły link nie jest zbyt pomocny. Rozwiń swoją odpowiedź, aby zawierała listę niektórych opcji, tak jak zrobiły to inne posty tutaj.
nhinkle
@nhinkle: Gotowe. Początkowo tego nie zrobiłem, ponieważ brak obsługi tabel przez StackExchange sprawia, że ​​trudno jest je wymienić w sposób, który nie jest boleśnie brzydki. Ale przypuszczam, że brzydka informacja jest lepsza niż brak informacji. :-)
Łaty
Dzięki za aktualizację, @Patches. To jest teraz o wiele bardziej pomocne, +1!
nhinkle
3

Jądro darwina nazywa się „xnu”, najlepsze co mogłem zrobić, to grepować kod źródłowy tego, czego szukaliśmy.

Przykład: OS X 10.8.5

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

Procedura:

Idź tutaj (lub Twoja wersja OS X)

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

Pobierz tarball XNU, wypakuj, grep dla "parse_boot"

cd xnu; grep -iRn parse_boot .

slf
źródło
Świetne linki - dzięki! Wiedza, że ​​odpowiednią funkcją jest PE_parse_boot *, jest o wiele bardziej przydatna niż regurgitacja statycznej i nieuchronnie nieaktualnej listy opcji.
Ted Middleton
1

Nie zapomnij o niezwykle przydatnym (jeśli zaktualizowałeś się do Lion i chcesz używać swojego Maca w „trybie zamkniętej klapki” z otwartą pokrywą)

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

hołd dla: chenga.8

Niepokoi mnie jednak to, że nie znajduję na to żadnego wyjaśnienia. Dlaczego 0x0? Dlaczego nie 0x1? Co w ogóle oznacza „iog”?

Powinienem zaznaczyć, że na moim Macbooku to nie działa.

lorenzog
źródło
0x0 to pierwszy szesnastkowy okres dziesiętny.
Trevor Rudolph
Działa to dla mnie zarówno w wersji 10.7, jak i 10.8, ale musisz uruchomić ponownie, a następnie zamknąć i otworzyć pokrywę po uruchomieniu.
Lri
0

Apple nie wydaje się oferować pełnej listy. Googling dla kilku znanych opcji i site:apple.comnie daje żadnych rezultatów. Zmniejszenie listy opcji powoduje, że artykuły takie jak ten i kod źródłowy analizują te argumenty, ale nic kompletnego.

Możesz także wyszukać PE_parse_boot_argfunkcję, która analizuje argumenty rozruchowe.


Biorąc to pod uwagę, w Internecie jest kilka stron osób trzecich, na których użytkownicy podają najbardziej wyczerpujące informacje, jakie mogłem znaleźć, ale mogą one być nieaktualne:

Daniel Beck
źródło