¡¡¡¡ACPI ÊÇÒ»ÖÖȫеķ¢ÏÖÉ豸¡¢ ¹ÜÀíµçԴʹÓᢠÒÔ¼°Ìṩ¹ýÈ¥ÓÉ BIOS ¹ÜÀíµÄ·ÃÎʲ»Í¬Ó²¼þµÄ±ê×¼»¯·½·¨¡£ Èà ACPI ÔÚ¸÷ÖÖϵͳÉ϶¼ÄÜÕýȷʹÓõŤ×÷Ò»Ö±ÔÚ½øÐУ¬ µ«Ðí¶àÖ÷°åµÄ ACPI »úÆ÷ÓïÑÔ (AML) ×Ö½Ú´úÂëÖÐµÄ bug£¬ FreeBSD µÄÄÚºËÖÐ×ÓϵͳÉè¼ÆµÄ²»ÍêÉÆ£¬ ÒÔ¼° Intel® ACPI-CA ½âÊÍÆ÷ÖÐµÄ bug ÈÔÈ»²»Ê±»á³öÏÖ¡£
¡¡¡¡Õâ·ÝÎĵµÆÚÍûÄܹ»°ïÖúÄúÐÖú FreeBSD ACPI µÄά»¤ÈËÔ±À´ÕÒµ½ÄúËù¹Û²ìµ½µÄÎÊÌâµÄ¸ùÔ´£¬ ²¢Í¨¹ýµ÷ÊÔÕÒµ½Æä½â¾ö·½·¨¡£ ¸ÐлÄúÔĶÁÕâ·ÝÎĵµ£¬ ÎÒÃÇҲϣÍûÄܹ»½â¾öÄúµÄϵͳÉϵÄÎÊÌâ¡£
×¢Òâ: ÔÚÌá½»ÎÊÌâ֮ǰ£¬ ÇëÈ·ÈÏÄúÒѾÔÚÔËÐÐ×îÐ嵀 BIOS °æ±¾£¬ ´ËÍ⣬ Ò²°üÀ¨Ç¶Èëʽ¿ØÖÆÆ÷µÄ¹Ì¼þ°æ±¾¡£
¡¡¡¡Èç¹ûÄúÏ£ÍûÌá½»Ò»¸öÎÊÌ⣬ ÇëÈ·±£½«ÏÂÊöÐÅÏ¢·¢µ½ freebsd-acpi@FreeBSD.org:
ÎÊÌâÐÐΪµÄÃèÊö£¬ °üÀ¨ÏµÍ³ÀàÐÍ¡¢Ðͺţ¬ÒÔ¼°Èκδ¥·¢ÎÊÌâµÄÏà¹ØÐÅÏ¢¡£ ÁíÍ⣬ Çë×¢Ò⾡¿ÉÄÜ׼ȷµØÃèÊöÕâÒ»ÎÊÌâÊÇ·ñ¶ÔÄúÊÇİÉúµÄ¡£
ÔÚ ¡°boot -v¡± Ö®ºóµÃµ½µÄ dmesg(8) Êä³ö£¬ ÒÔ¼°ÈκÎÔÚÖØÏÖ bug ʱ³öÏֵĴíÎóÐÅÏ¢¡£
ÔÚ½ûÓÃÁË ACPI Ö®ºóµÄ ¡°boot -v¡± µÄ dmesg(8) Êä³ö£¬ Èç¹ûÄú·¢ÏÖ½ûÓà ACPI Äܹ»°ïÖúÏû³ýÎÊÌâ¡£
À´×Ô sysctl hw.acpiµÄÊä³ö¡£ ÕâÒ²ÊÇÕÒµ½ÄúµÄϵͳËùÌṩµÄ¹¦ÄܵÄÒ»Öֺð취¡£
Äܹ»µÃµ½ÄúµÄ ACPI Source Language (ASL) µÄ URL¡£ ²»Òª °Ñ ASL Ö±½Ó·¢µ½ÓʼþÁбíÖУ¬ ÒòΪËüÃÇ¿ÉÄܷdz£´ó¡£ ΪÁ˵õ½ ASL Äú¿ÉÒÔÔËÐÐÕâ¸öÃüÁ
# acpidump -dt > name-system.asl
(°Ñ name ¸ÄΪÄúµÄµÇ¼Ãû£¬ ²¢°Ñ system ¸ÄΪÄúµÄÓ²¼þÖÆÔìÉ̼°ÆäÐͺš£ ÀýÈ磺 njl-FooCo6000.asl)
¡¡¡¡Ðí¶à¿ª·¢ÕßÒ²»á¶©ÔÄ FreeBSD-CURRENT ÓʼþÁÐ±í µ«»¹ÊÇÇë·¢µ½ freebsd-acpi ÕâÑùËü»á±»¸ü¶àÈË¿´µ½¡£ ÇëÄÍÐĵȴý£¬ ÒòΪÎÒÃǶ¼ÓÐȫְµÄÆäËû¹¤×÷¡£ Èç¹ûÄúµÄ bug ²»ÊÇÏÔ¶øÒ×¼ûµÄ£¬ ÎÒÃÇ¿ÉÄÜ»áÒªÇóÄúͨ¹ý send-pr(1) À´Ìá½»Ò»¸ö PR¡£ ÔÚÊäÈë PR ʱ£¬Ç뽫ͬÑùµÄÐÅÏ¢°üº¬½øÈ¥¡£ Õ⽫°ïÖúÎÒÃÇÀ´×·×ٺͽâ¾öÎÊÌâ¡£ ²»ÒªÔÚ¸ø freebsd-acpi дÐÅ֮ǰ·¢ËÍ PR ÒòΪÎÒÃǰÑËüµ±×÷ÒÑÖªÎÄÌåµÄ±¸Íü¼¶ø²»ÊDZ¨¸æ»úÖÆ¡£ ÄúµÄÎÊÌâºÜ¿ÉÄÜÒѾ±»ÆäËûÈ˱¨¸æ¹ýÁË¡£
¡¡¡¡ACPI ´æÔÚÓÚ²ÉÓà ia32 (x86)¡¢ ia64 (°²ÌÚ)¡¢ ÒÔ¼° amd64 (AMD) ¼Ü¹¹µÄËùÓÐÏÖ´ú¼ÆËã»úÉÏ¡£ ÍêÕûµÄ±ê×¼¾ßÓдóÁ¿µÄ¸÷ʽ¹¦ÄÜ£¬ °üÀ¨ CPU ÐÔÄܹÜÀí¡¢ µçÔ´¿ØÖÆ¡¢ ÎÂ¶È¼à¿Ø¡¢ µç³ØÏµÍ³¡¢ ǶÈëʽ¿ØÖÆÆ÷ÒÔ¼°×ÜÏßö¾Ù¡£ ¾ø´ó¶àÊýϵͳʵÏÖ±ÈÍêÕû±ê×¼µÄ¹¦ÄÜÒªÉÙһЩ¡£ ÀýÈ磬 ×ÀÃæÏµÍ³Í¨³£Ö»ÊµÏÖ×ÜÏßö¾Ù²¿·Ö£¬ ¶ø±Ê¼Ç±¾Ôòͨ³£Ö§³Ö½µÎº͵çÔ´¹ÜÀí¹¦ÄÜ¡£ ±Ê¼Ç±¾Í¨³£»¹ÌṩÐÝÃߺͻ½ÐÑÖ§³Ö£¬ ²¢ÌṩÓë´ËÊÊÓ¦µÄ¸´ÔÓ¹¦ÄÜ¡£
¡¡¡¡·ûºÏ ACPI µÄϵͳÖÐÓÐÐí¶à×é¼þ¡£ BIOS ºÍоƬ×éÖÆÔìÉÌÌṩһЩ¹Ì¶¨µÄ±í (ÀýÈ磬 FADT) ÔÚ´æ´¢Æ÷ÖУ¬ ÒÔÌṩÀàËÆ APIC Ó³Éä (ÓÃÓÚ SMP)¡¢ ÅäÖüĴæÆ÷¡¢ ÒÔ¼°¼òµ¥µÄÅäÖÃÖµµÈµÈ¡£ ÁíÍ⣬ Ò»¸ö×Ö½Ú´úÂë (bytecode) ±í (ÏµÍ³Çø±ðÃèÊö±í DSDT) ÔòÌṩÁËͨ¹ýÊ÷×´ÃüÃû¿Õ¼äÀ´Ö¸¶¨É豸¼°Æä¹¦Äܵķ½·¨¡£
¡¡¡¡ACPI Çý¶¯±ØÐëÒª´¦Àí¹Ì¶¨±í£¬ ʵÏÖ×Ö½ÚÂë½âÊÍÆ÷£¬ ²¢ÐÞ¸ÄÇý¶¯³ÌÐòºÍÄںˣ¬ ÒÔ½ÓÊÜÀ´×Ô ACPI ×ÓϵͳµÄÐÅÏ¢¡£ ¶ÔÓÚ FreeBSD£¬ Intel ÌṩÁËÒ»¸ö½âÊÍÆ÷ (ACPI-CA)£¬ ËüÔÚ Linux ºÍ NetBSD Ò²¿ÉÒÔʹÓᣠACPI-CA Ô´´úÂë¿ÉÒÔÔÚ src/sys/contrib/dev/acpica ÕÒµ½¡£ ÓÃÓÚÔÚ FreeBSD ÖÐÔÊÐí ACPI-CA ÕýÈ·ÔËתµÄ´úÂëÔòÔÚ src/sys/dev/acpica/Osd¡£ ×îºó£¬ ÓÃÓÚʵÏÖ ACPI É豸µÄÇý¶¯¿ÉÒÔÔÚ src/sys/dev/acpica ÕÒµ½¡£
¡¡¡¡ÒªÈà ACPI Õý³£¹¤×÷£¬ ËüµÄÿһ²¿·Ö¶¼±ØÐ빤×÷Õý³£¡£ ÏÂÃæÊÇһЩ³£¼ûµÄÎÊÌ⣬ °´ÕÕ³öÐÂµÄÆµ·±³Ì¶ÈÅÅÐò£¬ ²¢¸ø³öÁËÒ»Ð©ÈÆ¹ý»òÐÞÕýËüÃǵķ½·¨¡£
¡¡¡¡Ä³Ð©Ê±ºò£¬ »½ÐѲÙ×÷»áµ¼ÖÂÊó±ê²»ÔÙÕý³£¹¤×÷¡£ ÒÑÖªµÄÈÆ¹ýÕâÒ»ÎÊÌâµÄ·½·¨£¬ ÊÇÔÚ /boot/loader.conf ÎļþÖÐÌí¼Ó hint.psm.0.flags="0x3000" ÉèÖᣠÈç¹ûÕâÑù×ö²»Äܽâ¾öÎÊÌ⣬ Ç뿼Âǰ´Ç°Ãæ½éÉܵķ½·¨Ìá½»ÎÊÌⱨ¸æ¡£
¡¡¡¡ACPI ÌṩÁËÈýÖÖÐÝÃßµ½ RAM (STR) µÄ״̬£¬ S1-S3£¬ ÒÔ¼°Ò»¸öÐÝÃßµ½´ÅÅ̵Ä״̬ (STD)£¬ ³Æ×÷ S4¡£ S5 ÊÇ ¡°Èí¹Ø»ú¡± ͬʱҲÊÇϵͳ½ÓºÃµçÔ´µ«Ã»Óпª»úʱµÄÕý³£×´Ì¬¡£ S4 ʵ¼ÊÉÏ¿ÉÒÔÓÃÁ½ÖÖ²»Í¬µÄ·½·¨À´ÊµÏÖ¡£ S4BIOS ÊÇÒ»ÖÖÓÉ BIOS ¸¨ÖúµÄ¹ÒÆðµ½´ÅÅÌ·½·¨£¬ ¶ø S4OS ÔòÊÇÍêÈ«ÓɲÙ×÷ϵͳʵÏֵġ£
¡¡¡¡¿ÉÒÔʹÓà sysctl hw.acpi À´²é¿´ÓëÐÝÃßÓйصÄÏîÄ¿¡£ ÕâÀïÊÇÎÒµÄ Thinkpad Éϵõ½µÄ½á¹û¡£
hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0
¡¡¡¡Õâ±íʾÎÒ¿ÉÒÔʹÓà acpiconf -s À´²âÊÔ S3£¬ S4OS£¬ ÒÔ¼° S5¡£ Èç¹û s4bios
ÊÇÒ» (1)£¬ Ôò¿ÉÒÔʹÓà S4BIOS À´´úÌæ S4 OS¡£
¡¡¡¡µ±²âÊÔÐÝÃß/»½ÐÑʱ£¬ ´Ó S1 ¿ªÊ¼£¬ Èç¹ûËü±»Ö§³ÖµÄ»°¡£ Õâ¸ö״̬ÊÇ×î¿ÉÄÜÕý³£¹¤×÷µÄ״̬£¬ ÒòΪËü²»ÐèҪ̫¶àµÄÇý¶¯Ö§³Ö¡£ ûÓÐÈËʵÏÖ S2 µ«Èç¹ûÄúÓÐËüµÄÖ§³Ö£¬ ÔòÓ¦¸ÃºÍ S1 ÀàËÆ¡£ ÏÂÒ»¼þÖµµÃ³¢ÊÔµÄÊÇ S3¡£ ÕâÊÇ×îÉîµÄ STR ״̬£¬ ²¢ÐèҪһϵÁÐÇý¶¯µÄÖ§³Ö²ÅÄܹ»Õý³£µØÖØÐ³õʼ»¯ÄúµÄÓ²¼þ¡£ Èç¹ûÄúÔÚ»½ÐÑϵͳʱÓöµ½ÎÊÌ⣬ Çë²»ÒªÁßϧ·¢Óʼþ¸ø freebsd-acpi ÓʼþÁÐ±í£¬ ¾¡¹Ü²»ÒªÖ¸ÍûÎÊÌâÒ»¶¨»áºÜ¿ì½â¾ö£¬ ÒòΪÓÐÐí¶àÇý¶¯³ÌÐò/Ó²¼þÐèÒª½øÐиü¶àµÄ²âÊԺ͸Ľø¡£
¡¡¡¡ÐÝÃߺͻ½ÐѲÙ×÷×î³£¼ûµÄÎÊÌâÊÇijЩÉ豸Çý¶¯³ÌÐò²»»á±£´æ¡¢ »Ö¸´»òÕýÈ·µØÖØÐ³õʼ»¯Æä¹Ì¼þ¡¢ ¼Ä´æÆ÷»òÉ豸ÄÚ´æ¡£ ³¢ÊÔµ÷ÊÔÕâЩÎÊÌâʱ£¬ Ê×ÏÈ¿ÉÒÔ³¢ÊÔ£º
# sysctl debug.bootverbose=1 # sysctl debug.acpi.suspend_bounce=1 # acpiconf -s 3
¡¡¡¡Õâ¸ö²âÊÔ»áÄ£ÄâÐÝÃߺͻָ´¹ý³Ì¶ø²»ÕæµÄ½øÈë S3 ״̬¡£ ÓÐʱ£¬ Äú»áÓÃÕâÖÖ·½Ê½ºÜÈÝÒ×µØ×¥×¡ÎÊÌâ (ÀýÈ磬 ¶ªÊ§¹Ì¼þ״̬¡¢ É豸 watchdog ³¬Ê±£¬ ÒÔ¼°Ò»Ö±ÖØÊÔµÈ)¡£ ×¢Òâϵͳ²»»áÕæµÄ½øÈë S3 ״̬£¬ ÕâÒâζ×ÅÕâЩÉ豸¿ÉÄܲ»»áµôµç£¬ ¶øÐí¶àÉ豸ÔÚÍêÈ«²»ÌṩÐÝÃߺͻָ´·½·¨Ê±ÈÔ¿ÉÕý³£¹¤×÷£¬ ¶ø²»ÏñʹÓÃÕæµÄ S3 ״̬ÄÇÑù¡£
¡¡¡¡½ÏÄѵÄÇé¿öÔòÐèÒª¸ü¶àµÄÓ²¼þ£¬ ÀýÈçÓÃÓÚ´®¿Ú¿ØÖÆÌ¨µÄ´®¿Ú/Ïߣ¬ ÒÔ¼°ÓÃÓÚ dcons(4) µÄ»ðÏß¿Ú/ÏߺÍÄں˵÷ÊÔ¼¼ÄÜ¡£
¡¡¡¡ÎªÁ˰ïÖú¸ôÀëÎÊÌ⣬ ÇëÔÚÄÚºËÖÐɾȥ¾¡¿ÉÄܶàµÄÇý¶¯¡£ Èç¹ûÕâÑù×öÄܹ»½â¾öÎÊÌ⣬
Çë³¢ÊÔÖð¸ö¼ÓÔØÇý¶¯Ö±µ½ÎÊÌâÔٴγöÏÖ¡£ ͨ³£Ô¤±àÒëµÄÇý¶¯³ÌÐòÈç nvidia.ko¡¢ X11 ÏÔʾÇý¶¯£¬ ÒÔ¼° USB µÄÎÊÌâ×î¶à£¬ ¶øÒÔÌ«Íø¿¨µÄÇý¶¯Ôòͨ³£¹¤×÷µÄºÜºÃ¡£
Èç¹ûÄúÄܹ»Í¨¹ý¼ÓÔØºÍÐ¶ÔØÇý¶¯Ê¹ÏµÍ³Õý³£¹¤×÷£¬ Äú¿ÉÒÔͨ¹ý½«Êʵ±µÄÃüÁî·Åµ½ /etc/rc.suspend ºÍ /etc/rc.resume
À´½«Õâ¸ö¹ý³Ì×Ô¶¯»¯¡£ ÔÚÕâÁ½¸öÎļþÖÐÓÐÒ»¸ö×¢Ê͵ôµÄÐ¶ÔØºÍ¼ÓÔØÇý¶¯³ÌÐòµÄÀý×Ó¹©Äú²Î¿¼¡£
ÁíÍâÄú»¹¿ÉÒÔ½« hw.acpi.reset_video
ÉèÖÃΪÁã (0)£¬ Èç¹ûÄúµÄÏÔʾÔÚ»½ÐÑÖ®ºóÏԵúܻìÂÒ¡£ ´ËÍâÄú»¹¿ÉÒÔ³¢ÊÔ¸ü³¤»ò¸ü¶ÌµÄ
hw.acpi.sleep_delay
Öµ¿´¿´ÊÇ·ñÓÐËùÖúÒæ¡£
¡¡¡¡ÁíÒ»¼þÖµµÃÒ»ÊÔµÄÊÂÇéÊÇʹÓÃÒ»¸ö±È½Ïеİüº¬ ACPI Ö§³ÖµÄ Linux ·¢ÐаæÀ´ÊÔÊÔ¿´ËûÃÇµÄ ÐÝÃß/»½ÐÑ ¹¦ÄÜÊÇ·ñÔÚͬÑùµÄÓ²¼þÉÏÄܹ»Õý³£¹¤×÷¡£ Èç¹ûÔÚ Linux ÏÂÕý³££¬ ÔòºÜ¿ÉÄÜÊÇ FreeBSD Çý¶¯³ÌÐòµÄÎÊÌ⣬ ¶ø¸ôÀëÎÊÌâ²¢ÕÒµ½´æÔÚÎÊÌâµÄÇý¶¯ÓÐÖúÓÚ½â¾öËü¡£ ÐèҪעÒâµÄÊÇ ACPI µÄά»¤ÈËԱͨ³£²¢²»Î¬»¤ÆäËûÇý¶¯ (ÀýÈç ÉùÒô¡¢ ATA£¬ µÈµÈ) Òò´ËÈç¹û×îÖÕ·¢ÏÖÊÇÇý¶¯µÄÎÊÌâ×îºÃ»¹ÊÇ·¢µ½ freebsd-current ÓʼþÁÐ±í²¢·¢¸øÇý¶¯³ÌÐòµÄά»¤Õß¡£ Èç¹ûÄúϲ»¶Ã°ÏÕ£¬ Ôò¿ÉÒÔ¼ÓһЩ printf(3) µ½ÓÐÎÊÌâµÄÇý¶¯ÖУ¬ ÒÔÕÒµ½ËüµÄ»Ö¸´¹¦ÄÜ·¢ÉúÎÊÌâµÄλÖá£
¡¡¡¡×îºó£¬ ÊÔÊÔ¿´½ûÓà ACPI ²¢´úÖ®ÒÔÆôÓà APM¡£ Èç¹û ÐÝÃß/»½ÐÑ Äܹ»ÔÚ APM ÏÂÕý³£¹¤×÷£¬ ʹÓà APM ¿ÉÄÜ»á¸üºÃ£¬ ÌØ±ðÊǶÔÓÚ½ÏÀϵÄÓ²¼þ (2000ÄêÒÔǰ)¡£ Ó²¼þÖÆÔìÉÌÐèҪһЩʱ¼äÀ´ÈÃÀÏÓ²¼þµÄ ACPI ¹¤×÷Õý³££¬ ¶ø ACPI µÄÎÊÌâʮ֮°Ë¾ÅÊÇ BIOS ÖеÄ벡Òý·¢µÄ¡£
¡¡¡¡¾ø´ó¶àÊýϵͳֹͣÏìÓ¦ÊÇÓÉÓÚδÄܼ°Ê±ÏìÓ¦Öжϻò·¢ÉúÁËÖжϷ籩µ¼Öµġ£ оƬ×éÓкܶàÎÊÌâ×îÖÕ»áËÝÔ´µ½ BIOS ÈçºÎÔÚÒýµ¼ÏµÍ³Ö®Ç°ÅäÖÃÖжϣ¬ APIC (MADT) ±íµÄÕýÈ·ÐÔ£¬ ÒÔ¼° ϵͳ¿ØÖÆÖÐ¶Ï (SCI) ÈçºÎ·ÓÉ¡£
¡¡¡¡Í¨¹ý²ì¿´ vmstat -i µÄÊä³öÖаüÀ¨ acpi0 µÄÄÇÒ»ÐпÉÒÔÇø·ÖÖжϷ籩ºÍδÄܼ°Ê±ÏìÓ¦Öжϡ£ Èç¹ûÿÃë¼ÆÊýÆ÷Ôö³¤µÄËٶȶàÓÚÒ»Á½¸ö£¬ ÔòÄúÊÇÓöµ½ÁËÖжϷ籩¡£ Èç¹ûϵͳֹͣÁËÏìÓ¦£¬ Äú¿ÉÒÔ³¢ÊÔÍ£Ö¹Äں˲¢½øÈë DDB (ÔÚ¿ØÖÆÌ¨Éϰ´ CTRL+ALT+ESC) ²¢ÊäÈë show interrupts¡£
¡¡¡¡´¦ÀíÖжÏÎÊÌâµÄ¾ÈÃüµ¾²ÝÊdz¢ÊÔ½ûÓà APIC Ö§³Ö£¬ ÕâÊÇͨ¹ýÔÚ loader.conf ÖмÓÈë hint.apic.0.disabled="1" Íê³ÉµÄ¡£
¡¡¡¡±ÀÀ£¶ÔÓÚ ACPI ÊDZȽϺ±¼ûµÄÇé¿ö£¬
Èç¹û·¢ÏÖ£¬ ÎÒÃǽ«»á·Ç³£ÖØÊÓ²¢ºÜ¿ìÐÞ¸´Ëü¡£ ÄúÒª×öµÄµÚÒ»¼þÊÂÊÇÉè·¨¸ôÀë³öÄܹ»ÖØÏÖ±ÀÀ£
(Èç¹û¿ÉÄܵϰ) µÄ²Ù×÷²¢»ñȡһ·Ýµ÷ÓöÑÕ»¡£ ÇëÆôÓà options DDB
²¢ÉèÖô®ÐпØÖÆÌ¨ (²Î¼û µÚ 26.6.5.3
½Ú) »òÅäÖÃÒ»¸ö dump(8) ·ÖÇø¡£ Äú½«ÔÚ
DDB ÖÐͨ¹ý tr
µÃµ½µ÷ÓöÑÕ»¡£ Èç¹ûÄúÖ»ÄÜÓÃÊÖ³µÄ·½·¨¼Ç¼Ëü£¬ Ò»¶¨Òª¼ÇÏÂÍ·Îå (5) ÐкÍ×îºóÎå (5) ÐС£
¡¡¡¡È»ºó£¬ ³¢ÊÔͨ¹ýÔÚÆô¶¯Ê±½ûÓà ACPI
À´¸ôÀë¹ÊÕÏ¡£ Èç¹ûÕâÑù×öÄܹ»Õý³£¹¤×÷£¬ Çëͨ¹ýÉèÖà debug.acpi.disable
µÄÄÇ×éÊýÖµÀ´¸ôÀë¾ßÌåÊÇÄĸö ACPI ×ÓϵͳµÄÎÊÌâ¡£ Çë²Î¼û acpi(4)
Áª»úÊÖ²áÖиø³öµÄÄÇЩÀý×Ó¡£
¡¡¡¡Ê×ÏÈÇë³¢ÊÔÔÚ loader.conf(5) ÖÐÉèÖÃ
hw.acpi.disable_on_poweroff=
¡°0¡±¡£ Õ⽫Èà ACPI ²»ÔÙÔڹػú¹ý³ÌÖнûÓÃһЩʼþ¡£ »ùÓÚͬÑùµÄÔÒò£¬
һЩϵͳÐèÒª°ÑÕâ¸öÖµÉèÖÃΪ ¡°1¡± (ÕâÊÇĬÈÏÖµ)¡£
Õâͨ³£Äܹ»ÐÞ¸´ÔÚÐÝÃß»ò¹Ø»úʱÁ¢¼´ÔÙ´ÎÆô¶¯µÄÎÊÌâ¡£
¡¡¡¡Èç¹ûÄúÓÐ ACPI µÄÆäËûÎÊÌâ (ͬ docking station Ðͬ¹¤×÷¡¢ ÎÞ·¨¼ì²âÉ豸£¬ µÈµÈ)£¬ Çë°ÑÃèÊö·¢¸øÓʼþÁÐ±í£» ²»¹ý£¬ ÕâЩÎÊÌâÒ²ÓпÉÄÜºÍ ACPI ÖÐÉÐδÍê³ÉµÄ²¿·ÖÓйأ¬ ËüÃÇ¿ÉÄÜÐèҪʱ¼ä²ÅÄܱ»ÊµÏÖ¡£ Çë¸øµãÄÍÐÄ£¬ ²¢×¼±¸²âÊÔÎÒÃÇ¿ÉÄܻᷢ¸øÄúµÄ²¹¶¡¡£
¡¡¡¡×î³£¼ûµÄÎÊÌâÊÇ BIOS ÖÆÔìÉÌÌṩµÄ²»ÕýÈ· (ÉõÖÁÍêÈ«´íÎóµÄ!) ×Ö½Ú´úÂë¡£ Õâͨ³£»áÒÔÀàËÆÏÂÃæÕâÑùµÄÄÚºËÏûÏ¢ÏÔʾÔÚ¿ØÖÆÌ¨ÉÏ£º
ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND
¡¡¡¡Ðí¶àʱºò£¬ Äú¿ÉÒÔͨ¹ý½« BIOS
Éý¼¶µ½×îа汾À´½â¾ö´ËÀàÎÊÌâ¡£ ¾ø´ó¶àÊý¿ØÖÆÌ¨ÏûÏ¢ÊÇÎÞº¦µÄ£¬
µ«Èç¹ûÄúÓÐÆäËûÎÊÌâÀýÈçµç³Ø¹¤×÷²»Õý³££¬ Ôò´Ó AML ¿ªÊ¼²éÕÒÎÊÌ⽫ÊÇÒ»Ìõ½Ý¾¶¡£ ×Ö½Ú´úÂ룬 »ò³£ËµµÄ AML£¬ ÊÇ´ÓÒ»ÖÖ½Ð×ö ASL
µÄÓïÑÔд³ÉµÄÔ´´úÂë½øÐбàÒëµÃµ½µÄ½á¹û¡£ AML
Ò»°ã´æ·ÅÔÚ DSDT ±íÖС£ ÒªµÃµ½ÄúϵͳµÄ
ASL£¬ ÐèҪʹÓà acpidump(8)¡£ ÐèҪͬʱָ¶¨
-t
(ÏÔʾ¹Ì¶¨±êµÄÄÚÈÝ) ºÍ -d
(½«
AML ·´±àÒë³É ASL) Á½¸öÑ¡Ïî¡£ Çë²Î¼û ÈçºÎÌá½»µ÷ÊÔÐÅÏ¢ Ò»½ÚÁ˽âÈçºÎʹÓÃËü¡£
¡¡¡¡×î·½±ãµÄ³õ²½¼ì²éÊdz¢ÊÔÖØÐ±àÒë ASL À´¿´¿´ÊÇ·ñÓдíÎó¡£ Í¨³£¿ÉÒÔºöÂÔÕâÒ»¹ý³ÌÖвúÉúµÄ¾¯¸æ£¬ µ«´íÎóÒ»°ã¾Í¶¼ÊÇ bug£¬ ËüÃÇͨ³£¾ÍÊǵ¼Ö ACPI ÎÞ·¨Õý³£¹¤×÷µÄÔÒò¡£ ÒªÖØÐ±àÒëÄúµÄ ASL£¬ ¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁ
# iasl your.asl
¡¡¡¡ÎÒÃǵij¤ÆÚÄ¿±êÊÇÈÃÿһ¸öÈ˶¼Äܹ»ÔÚ²»ÐèÒªÈκÎÓû§¸ÉÔ¤µÄÇé¿öÏÂʹÓà ACPI¡£ È»¶ø£¬ ĿǰÎÒÃÇÈÔÈ»ÔÚ¿ª·¢Èƹý BIOS ÖÆÔìÉ̳£¼û´íÎóµÄ·½·¨¡£ Microsoft® ½âÊÍÆ÷ (acpi.sys ºÍ acpiec.sys) ²¢²»»áÑϸñµØ¼ì²éÊÇ·ñ×ñÊØÁ˱ê×¼£¬ Òò´ËÐí¶àÖ»ÔÚ Windows® ÖвâÊÔ ACPI µÄ BIOS ÖÆÔìÉ̺ܿÉÄÜÓÀÔ¶²»»áÐÞÕýËûÃÇµÄ ASL¡£ ÎÒÃÇÏ£Íû²»¶ÏµØÕÒ³ö²¢ÓÃÎĵµËµÃ÷ Microsoft µÄ½âÊÍÆ÷µ½µ×ÔÊÐíÄÇЩ²»±ê×¼µÄÐÐΪ£¬ ²¢ÔÚ FreeBSD ½øÐжÔÓ¦µÄÐÞ¸ÄʹËüÄܹ»Õý³£¹¤×÷¶ø²»ÐèÒªÓû§ÐÞÕý ASL¡£ ×÷ΪһÏîÁÙʱ»º½âÎÊÌâµÄ·½·¨£¬ ²¢°ïÖúÎÒÃÇÈ·ÈÏÆäÐÐΪ£¬ Äú¿ÉÒÔÊÖ¹¤ÐÞÕý ASL¡£ Èç¹ûÕâÑùÄܹ»½â¾öÎÊÌ⣬ Çë°ÑÐÂ¾É ASL µÄ diff(1) ·¢¸øÎÒÃÇ£¬ ÕâÑùÎÒÃǾÍÓпÉÄÜÈÆ¹ý ACPI-CA ÖеĴíÎóÐÐΪ£¬ ´Ó¶ø²»ÔÙÐèÒªÄúÀ´ÊÖ¹¤ÐÞÕý¡£
¡¡¡¡ÏÂÃæÊÇһЩ³£¼ûµÄ´íÎóÐÅÏ¢£¬ ËüÃǵÄÔÒò£¬ ÒÔ¼°ÈçºÎÐÞÕý¡£
¡¡¡¡Ä³Ð© AML ¼Ù¶¨ÊÀ½çÊÇÓɲ»Í¬°æ±¾µÄ
Windows ×é³ÉµÄ¡£ Äú¿ÉÒÔÈà FreeBSD Éù³Æ×Ô¼ºÊÇÈÎÒâ
OS À´¿´Ò»¿´ÊÇ·ñÄܹ»ÐÞÕýÎÊÌâ¡£
±È½Ï¼òµ¥µÄ°ì·¨ÊÇÉèÖà hw.acpi.osname
="Windows 2001" µ½
/boot/loader.conf ÖУ¬ »òʹÓÃÄúÔÚ ASL ÖÐÕÒµ½µÄÆäËû×Ö·û´®¡£
¡¡¡¡Ò»Ð©·½·¨¿ÉÄÜû°´ÕÕ±ê×¼ÒªÇóµÄÄÇÑùÏÔʽµØ·µ»ØÖµ¡£ ¾¡¹Ü ACPI-CA ÎÞ·¨´¦ÀíËü£¬ µ« FreeBSD
ÌṩÁËÒ»¸öÈÆ¹ýËü²¢ÔÊÐíÆä°µº¬µØ·µ»ØÖµµÄ·½·¨¡£ ÄúÒ²¿ÉÒÔÔö¼ÓÒ»¸öÏÔʽµÄ Return Óï¾ä£¬
Èç¹ûÄúÖªµÀÄÇÀïÐèÒª·µ»ØÒ»¸öÖµµÄ»°¡£ ÒªÇ¿ÖÆ iasl ±àÒë
ASL£¬ ÐèҪʹÓà -f
±êÖ¾¡£
¡¡¡¡ÔÚ¶¨ÖÆ your.asl Ö®ºó£¬ Äú¿ÉÒÔͨ¹ýÏÂÃæµÄÃüÁî±àÒëËü£º
# iasl your.asl
¡¡¡¡¿ÉÒÔʹÓà -f
±êÖ¾À´Ç¿ÖÆ´´½¨ AML£¬ ¼´Ê¹ÔÚ±àÒë¹ý³ÌÖз¢ÉúÁË´íÎó¡£ Çë×¢ÒâijЩ´íÎó (ÀýÈ磬 ȱÉÙ Return
Óï¾ä) »á×Ô¶¯±»½âÊÍÆ÷ºöÂÔµô¡£
¡¡¡¡DSDT.aml ÊÇ iasl ÃüÁîµÄĬÈÏÊä³öÎļþÃû¡£ ¿ÉÒÔ¼ÓÔØËüÀ´È¡´úÄú BIOS ÖдæÔÚÎÊÌâµÄ¸±±¾ (ËüÈÔÈ»´æÔÚÓÚÉÁ´æÖÐ)£¬ Æä·½·¨Êǰ´ÏÂÃæµÄ˵Ã÷±à¼ /boot/loader.conf£º
acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml"
¡¡¡¡Ò»¶¨Òª°ÑÄúµÄ DSDT.aml ¸´ÖƵ½ /boot Ŀ¼ÖС£
¡¡¡¡ACPI Çý¶¯³ÌÐòÌṩÁ˷dz£Áé»îµÄµ÷ÊÔ»úÖÆ¡£ ÕâÔÊÐíÄúÖ¸¶¨Ò»×é×Óϵͳ£¬ ÒÔ¼°ËùÐèÒªµÄÏêϸÐÅÏ¢¡£ ÐèÒªµ÷ÊÔµÄ×Óϵͳ¿ÉÒÔ°´ ¡°layers(²ã)¡± À´Ö¸¶¨£¬ ²¢·ÖΪ ACPI-CA ×é¼þ (ACPI_ALL_COMPONENTS) ºÍ ACPI Ó²¼þÖ§³Ö (ACPI_ALL_DRIVERS)¡£ µ÷ÊÔÊä³öµÄÏêϸ³Ì¶È¿ÉÒÔͨ¹ý ¡°level(Ïêϸ¶È)¡± À´Ö¸¶¨£¬ Æä·¶Î§ÊÇ ACPI_LV_ERROR (Ö»±¨¸æ´íÎó) µ½ ACPI_LV_VERBOSE (ÏÔʾËùÓÐ)¡£ ¡°level¡± ÊÇÒ»¸öλÑÚÂëÒò´Ë¿ÉÒÔÒ»´ÎÉèÖöà¸öÑ¡Ï ÖмäÓÿոñ·Ö¿ª¡£ ʵ¼ÊʹÓÃÖÐÄúÓ¦¸Ã¿¼ÂÇʹÓô®ÐпØÖÆÌ¨À´¼Ç¼Êä³ö£¬ Èç¹ûËüÌ«³¤ÒÔÖÁÓÚ³åµôÁË¿ØÖÆÌ¨ÏûÏ¢»º³åµÄ»°¡£ ²»Í¬µÄ²ãºÍÊä³öÏêϸ¶ÈµÄÍêÕûÁбí¿ÉÒÔÔÚ acpi(4) Áª»úÊÖ²áÖÐÕÒµ½¡£
¡¡¡¡µ÷ÊÔÊä³öĬÈϲ¢²»¿ªÆô¡£ ÒªÆðÓÃËü£¬ ÄúÐèÒªÔÚÄÚºËÉèÖÃÖÐÌí¼Ó options ACPI_DEBUG£¬ Èç¹ûÄúµÄÄÚºËÖбàÈëÁË ACPI µÄ»°¡£ Äú»¹¿ÉÒÔÔÚ /etc/make.conf ÖмÓÈë ACPI_DEBUG=1 À´ÔÚÈ«¾ÖÆðÓÃËü¡£ Èç¹ûËüÖ»ÊÇÄ£¿é£¬ Äú¿ÉÒÔÓÃÏÂÃæµÄ·½·¨À´ÖØÐ±àÒë acpi.ko£º
# cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1
¡¡¡¡°²×° acpi.ko µ½ /boot/kernel and add your ²¢°ÑËùÐèµÄÏêϸ¶ÈºÍ²ãÔÚ loader.conf ÖÐÖ¸¶¨¡£ Õâ¸öÀý×Ó½«ÆôÓÃËùÓÐ ACPI-CA ×é¼þÒÔ¼°ËùÓÐ ACPI Ó²¼þÇý¶¯ (CPU¡¢ LID£¬ µÈµÈ) µÄÏûÏ¢¡£ Ö»Êä³ö´íÎóÐÅÏ¢£¬ Ò²¾ÍÊÇ×îµÍµÄÏêϸ¶È¡£
debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR"
¡¡¡¡Èç¹ûÄúÐèÒªµÄÐÅÏ¢ÊÇÓÉij¸öÌØ¶¨µÄʼþ´¥·¢µÄ (±ÈÈç˵£¬ ÐÝÃßÖ®ºóµÄ»½ÐÑ)£¬ Äú¿ÉÒÔ²»ÐÞ¸Ä loader.conf ¶ø×ª¶øÊ¹Óà sysctl À´ÔÚÆô¶¯ºÍΪÄǸöʼþ×¼±¸ÏµÍ³Ö®ºóÔÙÖ¸¶¨²ãºÍÏêϸ¶È¡£ ÕâЩ sysctl µÄÃû×ÖºÍ loader.conf ÖеÄÒ»Ö¡£
¡¡¡¡¹ØÓÚ ACPI µÄ¸ü¶àÐÅÏ¢¿ÉÒÔ´ÓÏÂÃæÕâЩµØ·½ÕÒµ½£º
ACPI ÓʼþÁÐ±í´æµµ http://lists.freebsd.org/pipermail/freebsd-acpi/
¾ÉµÄ ACPI ÓʼþÁÐ±í´æµµ http://home.jp.FreeBSD.org/mail-list/acpi-jp/
The ACPI 2.0 ±ê×¼ http://acpi.info/spec.htm
FreeBSD ÊÖ²áÒ³: acpi(4), acpi_thermal(4), acpidump(8), iasl(8), acpidb(8)
DSDT µ÷ÊÔ×ÊÔ´. (ʹÓà Compaq ×÷ΪÀý×Óµ«Í¨³£Çé¿ö϶¼ºÜÓÐÓá£)
±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.