มีรายการ boot-args สำหรับ darwin / OS X หรือไม่


25

ใน OS X คุณสามารถตั้งค่าพารามิเตอร์การบู๊ตด้วย

nvram boot-args=[options]

ที่ตัวเลือกที่ฉันรู้เกี่ยวกับ -v (verbose) -x (เซฟโหมด) และ arch = x86_64 (บูตเข้าสู่เคอร์เนล 64 บิตบนเครื่องที่มีความสามารถ 64 บิต)

มีคนอื่นอีกไหม? ดูเหมือนจะไม่มีเอกสารใด ๆ

คำตอบ:


23

ไม่มีรายการอย่างเป็นทางการรายการทั่วไปถูกรวบรวมเป็นเคอร์เนลด้วยตนเองส่วนอื่น ๆ สามารถแยกวิเคราะห์ได้โดยส่วนขยายเคอร์เนล นี่คือรายการที่ฉันได้พบจนถึง

ตัวเลือกการบูตทั่วไป:

  • -v: ทำการบูทระบบในโหมด Verbose เสมอโดยไม่จำเป็นต้องกดค้างCMD- Vเมื่อเริ่มต้น
  • -x: บู๊ตระบบเข้าสู่Safe Mode เสมอโดยไม่จำเป็นต้องหยุดShiftทำงานเมื่อเริ่มต้นระบบ
  • f: เซฟโหมดเก่า
  • -s: บูตเครื่องเข้าสู่โหมดผู้ใช้คนเดียวโดยไม่จำเป็นต้องกดค้างCMD- Sเมื่อเริ่มต้น
  • -F - ละเว้นไฟล์บู๊ต
  • iog(เช่นiog=0x0)

    นี่เป็นการย้อนกลับโหมด "Clamshell" สำหรับระบบแล็ปท็อปของ Apple ซึ่งเมื่อคุณปิดจอแสดงผล แต่เชื่อมต่อระบบกับจอภาพภายนอกและแป้นพิมพ์ระบบจะยังคงทำงานอยู่ หลังจากรันคำสั่งนี้เมื่อเชื่อมต่อจอภาพภายนอกจอแสดงผลภายในจะถูกปิดการใช้งานซึ่งอาจเป็นประโยชน์ในบางสถานการณ์เช่นที่คุณกำลังทำมิเรอร์เดสก์ท็อปของคุณ แต่ต้องการรันจอแสดงผลภายนอกที่ความละเอียดสูงกว่าแล็ปท็อปของคุณ . CNET

  • arch

    เปลี่ยนวิธีที่ระบบบู๊ตไม่ว่าจะเป็นเคอร์เนลแบบ 32- บิต ( i386) หรือ 64- บิต ( x86_64) โปรดทราบว่าส่วนขยายเคอร์เนลของบุคคลที่สามอาจเป็นแบบ 32 บิตหรือ 64 บิตเท่านั้น

  • Graphics Mode: ขนาดโหมดกราฟิก VESA

  • Text Mode: ขนาดโหมดข้อความ VGA
  • Boot Graphics: กราฟิกหรือโหมดข้อความ
  • Quiet Boot: Bootmode ที่เงียบสงบ
  • MKext Cache: ไฟล์แคช Mkext
  • Kernel Cache: ไฟล์ Kernel Cache
  • rd: อุปกรณ์รูท
  • boot-uuid: Boot 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 Debug {1}
  • initmcl: กลุ่ม mbuf เริ่มต้น
  • socket_debug: Socket debug (สุทธิ)
  • net_affinity: Net Affinity (สุทธิ)
  • rte_debug: debug เส้นทาง (สุทธิ) {flag}
  • -rwroot_hack: เมานต์รูทอ่าน / เขียน

IOKit:

  • mseg: ส่วนสูงสุด
  • dart: ลบผู้ทำแผนที่ออก
  • io: IO Kit Debug

Mach:

  • keepsyms: ห้ามถอดการแปล KLD / ที่อยู่ - สัญลักษณ์ {1}
  • debug: เคอร์เนลดีบัก {flag} (เช่นdebug=0x14e)

    เปิดใช้งานคุณสมบัติการดีบักเคอร์เนลที่จะแสดงข้อมูลเพิ่มเติมให้คุณ เช่น

    • 0x01 - หยุดที่เวลาบูตและรอให้ตัวดีบั๊กแนบมา
    • 0x02 - ส่งเอาต์พุตการดีบักเคอร์เนลไปที่คอนโซล
    • 0x04 - ดร็อปเข้าดีบักเกอร์บนอินเทอร์รัปต์ที่ห้ามใช้
    • 0x08 - ส่งข้อมูลการดีบักเคอร์เนลไปยังพอร์ตอนุกรม
    • 0x10 - ทำให้ ddb เป็นดีบักเกอร์เริ่มต้น
    • 0x20 - ข้อมูลการวิเคราะห์เอาต์พุตไปยังบันทึกระบบ
    • 0x40 - อนุญาตให้ดีบักเกอร์ไปที่ ARP และเส้นทาง
    • 0x80 - รองรับ gdb รุ่นเก่าในระบบที่ใหม่กว่า
    • 0x100 - ปิดการใช้งานหน้าจอข้อความโต้ตอบแบบตื่นตระหนกแบบกราฟิก
  • nvram_paniclog: กำหนด paniclog ให้กับ NVRAM {1}

  • pmsafe_debug: ใส่ CPU ในโหมดพลังงาน "ปลอดภัย" {1}
  • preempt: ตั้งค่าอัตราการจองเริ่มต้น
  • unsafe: ควอนตัมที่ไม่ปลอดภัยสูงสุด
  • poll: ควอนตัมสำรวจสูงสุด
  • yield: กำหนดการกะผลการสำรวจความคิดเห็น
  • idlehalt: หยุดเธรดที่ไม่ทำงานเพื่อให้ cpu เข้าสู่โหมด lowpower {1}
  • panic_io_port: ในตื่นตระหนกอ่านจากพอร์ต I / O นี้ {0x0 ถึง 0xffff}
  • _fpu: จำกัด คุณสมบัติ cpu เวลาบูต {387 / mmx / sse}
  • disable high mem/2: ชอบ mem สูง ๆ }
  • 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 ของเซิร์ฟเวอร์ panic
  • _router_ip: IP ของเราเตอร์
  • panicd_port: พอร์ตของเซิร์ฟเวอร์ panic
  • -zc: การตรวจสอบองค์ประกอบโซนฟรี
  • mtxspin: Mutex หมุน (ppc)
  • vmmforce: แรง VMM (ppc)
  • fn: Force nap (ppc) (acpi) {0/1/2}
  • pmsx: โหมด stepper การจัดการพลังงานแบบทดลอง (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 - ปิดใช้งาน high mem, 2 - ต้องการ high mem

  • immediate_NMI

    แก้ไขข้อผิดพลาดรองรับระบบมากกว่า 4GB โดยบังคับให้ดีบักเกอร์ NMI ทันที

  • urgency_notification_abstime

อื่น ๆ :

  • bluetoothHostControllerSwitchBehavior( never/ always)

    บอกคนขับรถบลูทู ธ ได้ว่าจะสลับไปดองเกิลที่คุณเสียบ. เพื่อให้ dongle ภายนอกเริ่มต้นแม้หลังจากรีบูต, alwaysการใช้งาน

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

  • acpi: แก้ไขข้อบกพร่อง AppleACPIP แพลตฟอร์ม {1-8}
  • acpi_level: ACPI Debug Level
  • 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 CPU ใน 10.5.6 หลังจาก 10.5.7 มันไม่จำเป็นต้องx86osx

ที่มา: อาร์กิวเมนต์ xnu-1228 / Boot


การใช้

ตัวอย่างเช่นเมื่อคุณอยู่ในโหมด Single ( CMD- Sหลังจากเสียงเมื่อเริ่มต้น) เมื่อต้องการเรียกใช้ในเซฟโหมดและ verbosely ด้วยผลลัพธ์เพิ่มเติมเคอร์เนลดีบักไปยังคอนโซลลอง:

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(ซึ่งใช้ในการวิเคราะห์อาร์กิวเมนต์การบูตเคอร์เนล)


2
นี่คือหนึ่งในคำตอบที่ฉันโปรดปรานตลอดกาล! ขอขอบคุณ!
Chris

10

Googling สำหรับboot-args site:developer.apple.comให้ทรัพยากรที่ดี เช่น

  • cpus=1 บังคับให้ระบบใช้ CPU แกนเดียวเท่านั้น
  • srv=1 ถูกตั้งค่าบน Xserves และเครื่องที่ติดตั้ง Mac OS X Server และควรเปลี่ยนพารามิเตอร์การปรับแต่งเคอร์เนลบางส่วนเพื่อการใช้งานที่เป็นมิตรกับเซิร์ฟเวอร์
  • _panicd_ip=a.b.c.d ให้คุณระบุที่อยู่ IP ของเซิร์ฟเวอร์ debic debug เพื่อเขียนเคอร์เนล core dumps
  • debug=0xH (โดยที่ H คือตัวเลขฐานสิบหก 1-4 หลัก) ให้คุณตั้งค่าการดีบักเคอร์เนลจากรายการนี้:

    DB_HALT 0x01 หยุดขณะบูตและรอการแนบดีบักเกอร์ (gdb)  
    DB_PRT 0x02 ส่งเคอร์เนลการดีบักเอาต์พุต printf ไปยังคอนโซล  
    DB_NMI 0x04 Drop to debugger บน NMI (Command – Power, Command-Option-Control-Shift-Escape หรือ interrupt switch)  
    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 ควบคุมว่าเคอร์เนลจะทิ้งแกนเต็ม (ถ้าค่าสถานะชัดเจน) หรือเพียงแค่บันทึกการตื่นตระหนก (ถ้าตั้งค่าสถานะ)  
    




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!
วันที่

3

เคอร์เนลดาร์วินเรียกว่า "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, extract, grep สำหรับ "parse_boot"

cd xnu; grep -iRn parse_boot .


ลิงค์ที่ยอดเยี่ยม - ขอบคุณ! การรู้ว่าฟังก์ชั่นที่เกี่ยวข้องคือ PE_parse_boot * มีประโยชน์มากกว่าการลบรายการตัวเลือกแบบคงที่และไม่สามารถหลีกเลี่ยงได้
Ted Middleton

1

อย่าลืมสิ่งที่มีประโยชน์อย่างมาก (หากคุณอัปเดตเป็น Lion และต้องการใช้ mac ของคุณใน 'โหมดหอยแบบปิด' เมื่อเปิดฝา)

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

รุ่งโรจน์ถึง: chenga.8

อย่างไรก็ตามสิ่งที่รบกวนจิตใจฉันคือฉันไม่พบคำอธิบายสำหรับสิ่งนั้น ทำไมต้อง 0x0 ทำไมไม่ 0x1 'iog' หมายถึงอะไรต่อไป

ฉันควรชี้ให้เห็นว่าใน macbook ของฉันมันไม่ทำงาน


0x0 คือช่วงเวลาทศนิยมฐานสิบหกแรก
เทรเวอร์ Rudolph

มันใช้งานได้สำหรับฉันทั้ง 10.7 และ 10.8 แต่คุณต้องรีสตาร์ทจากนั้นปิดและเปิดฝาหลังจากเปิดเครื่อง
Lri

0

Apple ดูเหมือนจะไม่ให้รายการที่ครอบคลุม Googling สำหรับตัวเลือกที่รู้จักสองสามตัวและsite:apple.comไม่ให้ผลลัพธ์ใด ๆ การลดรายการตัวเลือกจะค้นหาบทความเช่นนี้และซอร์สโค้ดบางส่วนเพื่อแยกอาร์กิวเมนต์เหล่านี้ แต่ไม่มีอะไรครอบคลุม

นอกจากนี้คุณยังสามารถค้นหาPE_parse_boot_argฟังก์ชั่นที่แยกวิเคราะห์อาร์กิวเมนต์การบู๊ต


ดังที่กล่าวไว้มีหน้าเว็บของบุคคลที่สามบางหน้าบนเว็บที่ผู้ใช้ให้ข้อมูลที่ครอบคลุมที่สุดที่ฉันสามารถหาได้ แต่อาจล้าสมัย:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.