ãšã³ããªãŒ
ãã®ããã ACPIã¯ã黿ºç®¡çãããããªãŒç£èŠãããæ¥ç¶ãããå€éšãã£ã¹ãã¬ã€ã®æ©èœã®ç §äŒãŸã§ãææ°ã®ã³ã³ãã¥ãŒã¿ãŒã®äžéšã®ããŒããŠã§ã¢æ©èœãžã®ãŠãããŒãµã«ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
ããã¯ãããã€ãã®æ§æããŒãã«ã§æ§æãããŠããŸããæ§æããŒãã«ã® 1ã€ã«ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ã«ãŒãã«ã§å®è¡ãããŠããä»®æ³ãã·ã³ã®ã³ãŒããå«ãŸããŠããŸãã ã·ã¹ãã ãå¯èœãªéãæè»ã«ããããã«ãACPIã®å®è£ ãå€§å¹ ã«è€éã«ããä»®æ³ãã·ã³ã远å ãããŸããã
çè«çã«ã¯ããã®ãããªã·ã¹ãã ã¯ããããã»ããã®ãã©ã€ããŒãäžèŠã«ããã¯ãã§ããã ããã¯éåžžã«åŒ·åã§ïŒãè¥å€§åããããšèšããªãå ŽåïŒããã®ãããªã¿ã¹ã¯ã«ååã«å¯ŸåŠã§ããŸãã ããšãã°ãMacã§ã¯ACPIãéåžžã«åºã䜿çšãããŠããŸãã
ãã ããå®éã«ã¯ãPCäºæã·ã¹ãã ã®ãã³ããŒã«ã¯ã誀ã£ããŸãã¯äžå®å šãªACPIããŒãã«ãå«ãŸããŠããããšãå€ãããã³ããŒããã¯ã€ã³ãæåŸã®çç±ã§ã¯ãããŸããã ãããã£ãŠããããã®ã·ã¹ãã ã§ã¯ãå€ãã®å ŽåææžåãããŠããããåžžã«æ£åžžã«åäœãããšã¯éããªããéèŠãªåé¿çã䜿çšããå¿ èŠããããŸãã 代ããã«ããã®ãããªã·ã¹ãã ã®ACPIãä¿®æ£ããããšããŸããã
ç§ãæã£ãŠããã³ã³ãã¥ãŒã¿ãŒã¯ãSamsung N250 +ãããããã¯ã§ãã ããã¯ããªãè¯ãããŒããŠã§ã¢ãæã£ãŠããŸãïŒããããªãŒãšBroadcom WiFiã«ãŒãã«ãŒããé€ããç§ã¯ããã«åæ§ã®Atherosã«çœ®ãæããŸããïŒããBIOSã®å質ã¯éåžžã«æ®å¿µã§ãã ãªãªãŒã¹ã®æç¹ã§ã¯ãLinuxã·ã¹ãã ããWiFiããªã³ïŒãŸãã¯ãªãïŒã«ããããšããã§ããŸããã§ããããã®ç¶æ ã¯ãCMOSã»ããã¢ãããŠãŒãã£ãªãã£ãä»ããŠã®ã¿å€æŽã§ããŸããã çŸæç¹ã§ã¯ãã©ã€ããŒãååšããŸãããæ ¹æ¬çã«æ¬ é¥ã®ããã¢ãããŒãã䜿çšããŠãããããã€ãã®åé¡ãæ±ããŠããŸãã
çŸç¶ã®ç ç©¶
ACPIã³ãŒãããªãã£ããããããã¯æ©èœã®ãµããŒãã¯ãã«ãŒãã«ã¢ãžã¥ãŒã«ã®ã€ãŒãžãŒã¹ããŒããŠã³ãããŒãžã£ãŒã«æåã«å®è£ ãããŠããŸããããæçµçã«samsung-laptop.cãšããŠã«ãŒãã«ã«æ¡çšãããŸããã
ãœãŒã¹ã³ãŒãã®725è¡ç®ã§ãããããã«ããã®ãã©ã€ããŒã¯SMIåŒã³åºãïŒããã³SABIãšåŒã°ããSamsungã€ã³ã¿ãŒãã§ãŒã¹ïŒã䜿çšããŠããã¯ã©ã€ãã¬ãã«ãèšå®ãããããã©ãŒãã³ã¹ã¢ãŒããïŒå®éã«ã¯ãã¡ã³é床ã®ã¿ã倿ŽïŒã倿Žããã¯ã€ã€ã¬ã¹ã®é»æºããªã³ã«ããŸãã¢ãžã¥ãŒã«ã«ã SMIã³ãŒã«ã¯ããã€ããŒãã€ã¶ãŒãã«ãŒããããã«äŒŒããããã»ãããšããã»ããµã®ç¹å¥ãªæ©èœã§ãããããããã·ã¹ãã 管çã¢ãŒãïŒ SMM ïŒãCPUã«åŒ·å¶çã«ã¢ã¯ãã£ãã«ããã³ãã³ãã§ãã
BIOSã¯ãç¹å®ã®æäœïŒããšãã°ãã¡ã¢ãªãŸãã¯I / OããŒãã®éžæãããé åãžã®ã¢ã¯ã»ã¹ïŒãã€ã³ã¿ãŒã»ããããSMMãã¢ã¯ãã£ãåããããã«ãããã»ãããæ§æã§ããŸããé²ãã ãã®åŸãBIOSã¯ä»»æã®ã³ãŒããå®è¡ã§ããŸããããšãã°ãUSBããŠã¹ãæ¥ç¶ãããŠããå ŽåãSMMã¯å€ãOSïŒããšãã°ãDOSïŒã®PS / 2ããŠã¹ãµããŒãããšãã¥ã¬ãŒãããããã«äœ¿çšãããŸãã ããã«ãSMMãã³ãã©ãŒã«å²ãåœãŠãããã¡ã¢ãªé åã¯ãã©ã®ãããªç¶æ³ã§ãOSã«ã¢ã¯ã»ã¹ã§ããããã®åäœããžãã¯ã®çŽæ¥åæãäžå¯èœã«ãªããŸãã
幞ããªããšã«ããã®å ŽåãSMIåŒã³åºãã¯æ°ãã€ããã倿Žããªãå¯èœæ§ãé«ããéãè¯ããã°ãSMMã¢ãŒãã³ãŒãã調ã¹ãªããŠããã®å Žæãç¹å®ã§ããŸãã
ACPIããŒãã«ã詳ããèŠãŠã¿ãŸãããã ãããã«ã¯å€ãã®ã¿ã€ãããããŸããããã®å Žåã¯1ã€ã ããéèŠã§ããDSDT-å€ãã®ã·ã¹ãã ã€ãã³ãã®ãã€ãã³ãŒããã³ãã©ãŒãæã€ããŒãã«ã§ãã
ã·ã¹ãã ããããŒãã«ãæœåºããŠã³ãŒãã倿Žããã«ã¯ããacpidumpããšãiaslãã®2ã€ã®ãŠãŒãã£ãªãã£ãå¿ èŠã§ãã Debianã®ãããªOSã§ã¯ãåãååã®ããã±ãŒãžã«å«ãŸããŠããŸãã
$ sudo acpidump -o dsdt.aml -b $ iasl -d dsdt.amlïŒdsdt.amlãdsdt.dslã«éã³ã³ãã€ã«ããŸã
æç¢ºã«ããããã«ãgithubãªããžããªãšããŠå€æŽå±¥æŽãå«ãããŒãã«ãèšèšããŸããã åæç¶æ ã¯ãã®ã³ãããã«å«ãŸããŠããŸãã ã芧ã®ãšãããããŒãã«ã¯éåžžã«é·ãã5000è¡ãè¶ ããŠããŸãã 25,000è¡ãè¶ ããããŒãã«ã¯éåžžã«å®æçã«æ€åºãããŸãã
倿Žããã«ããŒãã«ãã³ã³ãã€ã«ããŠãã€ãã³ãŒãã«æ»ãïŒ
make
å ¥å
make
ïŒãšãã³ã³ãã€ã©ã¯ããã€ãã®ãšã©ãŒãšã³ã¡ã³ããåºåããŸãã ãããã¯ãã¡ãã»ãŒãžãšACPI仿§ã ããèŠãã ãã§ç°¡åã«ä¿®æ£ã§ããŸãã ãã®Gentooãã©ãŒã©ã ã¹ã¬ããã«ã¯ããã€ãã®è¯ããã³ãããããŸã ã ã¡ãªã¿ã«ãããã¯ç§ã®ãããããã¯ããã7幎å€ãã§ãããã¢ããã€ã¹ã¯ãŸã é¢é£ããŠããŸãã ä¿®æ£ããã衚ã¯ããã§èŠãããšãã§ããŸã ã
ããã¯ã©ã€ããä¿®æ£ãã
ç§ã®ãããããã¯ã«ã¯LEDããã¯ã©ã€ããä»ããŠããã®ã§ãåãæéééã®äžå®ã®å²åã§ãªã³ã«ããã ãã§æãããå€ããããšãã§ããŸããããšãã°ã30ïŒ æãããããã«ã70ïŒ ã®æéç¹ç¯ãããããšãã§ããŸãã ã¡ãã€ããé²ãããã«ããã®ã¹ã€ããã³ã°ïŒ PWM ïŒã¯ã人éã®ç®ã®æåºŠããæããã«é«ãåšæ³¢æ°ã§çºçããŸããããšãã°ã200 kHzã§ååã§ãã
ãã®å ŽåãPWM ãã¥ãŒãã£ãµã€ã¯ã«ã¯ãçµ±åã°ã©ãã£ãã¯ã¹ã³ã³ãããŒã©ãŒã«ãã£ãŠå€æŽãããå¯èœæ§ããããŸãã ããã¯PCIãã¹äžã«ãããŸãã
$ lspci 00ïŒ00.0ãã¹ãããªããžïŒIntel Corporation N10ãã¡ããªDMIããªããž 00ïŒ02.0 VGAäºæã³ã³ãããŒã©ãŒïŒIntel Corporation N10 Family Integrated Graphics Controller 00ïŒ02.1ãã£ã¹ãã¬ã€ã³ã³ãããŒã©ãŒïŒIntel Corporation N10 Family Integrated Graphics Controller <...>
æ°å "00ïŒ02.0"-ãã¹äžã®ããã€ã¹ã®ã¢ãã¬ã¹ã Linuxã¯sysfsãä»ããŠå€ãã®å¶åŸ¡ãã€ã³ããæäŸããããããã®ã¢ãã¬ã¹ãç¥ã£ãŠãããšãããã€ã¹ãã©ã¡ãŒã¿ãŒãèŠæ±ãŸãã¯å€æŽã§ããŸãã ãã®ãã¡ã®1ã€ã䜿çšãããšãPCIèšå®ã¹ããŒã¹ïŒããã€ã¹èšå®ãä¿åãããŠãã256ãã€ãã®ãããã¯ïŒãèªã¿æžãã§ããŸãã ãã®ãããã¯ã®æåã®64ãã€ãã«ã¯ä»æ§ã§å®çŸ©ãããå€ããããæ®ãã¯ã¡ãŒã«ãŒãå¿ èŠã«å¿ããŠèªç±ã«äœ¿çšã§ããŸãã
ããã¯ã©ã€ãã¬ãã«ãå€åãããšãã®æ§æã§äœãèµ·ãããã確èªããŸãããïŒããã¯ãªãŒãã³ãã©ã€ããŒã䜿çšããLinuxã®äŸã§ãããããã¯ãã¹ãŠãã©ã€ããŒããã©ã€ããŒãŸãã¯Windowsã§ãå®è¡ã§ããŸãããŸããæ§æã¹ããŒã¹ãèªã¿åãããšãã§ããŸãïŒïŒ
ïŒecho 7> / sys /ã¯ã©ã¹/ããã¯ã©ã€ã/ãµã ã¹ã³/æãã ïŒhexdump -C /sys/bus/pci/devices/0000\:00\:02.0/config> config-1 ïŒecho 5> / sys /ã¯ã©ã¹/ããã¯ã©ã€ã/ãµã ã¹ã³/æãã ïŒhexdump -C /sys/bus/pci/devices/0000\:00\:02.0/config> config-2 ïŒdiff -u config-1 config-2 --- config-1 2011-09-05 01ïŒ06ïŒ13.326930250 +0400 +++ config-2 2011-09-05 01ïŒ06ïŒ21.503828025 +0400 @@ -13.5 +13.5 @@ 000000c0 00 00 00 00 00 01 00 00 00 00 00 00 00 a7 00 00 00 | ................ | 000000d0 01 00 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .. "............. | 000000e0 00 00 00 00 00 00 00 00 00 80 80 80 00 00 00 00 00 00 | ................ | -000000f0 79 00 00 00 ff 00 00 00 ad 0f 00 00 7c 0e 5c 7f | y ........... |ã\ã| + 000000f0 79 00 00 00 73 00 00 00 ad 0f 00 00 7c 0e 5c 7f | y ... s ....... |ã\ã| 00000100
ãããã£ãŠã0xf4ã®ãã€ããããã¯ã©ã€ãã¬ãã«ãå¶åŸ¡ããŸãã ããã確èªããã«ã¯ã
sudo setpci -s 00:02.0 f4.b=80
ïŒ80ãç®çã®ããã¯ã©ã€ãã¬ãã«ã«çœ®ãæããŸãïŒã
ããã§ããã®å€ãæŽæ°ãããããã«DSDTãæžãæããŸãïŒãããŠããããããããã»ã¹äžã«ãACPIãä»ããããã¯ã©ã€ãå¶åŸ¡ããŸã£ããæ©èœããªãçç±ãèŠã€ããããšãå¯èœã«ãªããŸãïŒã
ACPI仿§ ïŒä»é²Bãã»ã¯ã·ã§ã³
_BCL
ããŒãžïŒ
_BCL
ãäºææ§ã®ããã°ã©ãã£ãã¯ã¢ããã¿ãŒã®èª¬æã¯ã
_BCL
ã
_BCM
ããã³
_BQC
å®è£ ããå¿ èŠããã
_BQC
ã DSDTã§ã¯ããããã®ã¡ãœããã¯1767è¡ç®ã§å®çŸ©ãããŠããŸãã ã³ã¡ã³ãããããœãŒã¹ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
/* = = * (Package ACPI), * . */ Method (_BCL, 0, NotSerialized) { /* GVNS (. 132). , . */ Or (VDRV, 0x01, VDRV) Return (Package (0x08) { 0x64, /* */ 0x05, /* , */ 0x0F, /* */ 0x18, /* 24 */ 0x1E, /* 30 */ 0x2D, /* 45 */ 0x3C, /* 60 */ 0x50 /* 80 */ }) } /* = = * Arg0. * , , * _BCL. */ Method (_BCM, 1, NotSerialized) { /* Arg0 10. Local0, * â Local1. */ Divide (Arg0, 0x0A, Local0, Local1) /* ACPI "L" ( "Logic"). * , LEqual(Local0, 0x00) * (Local0 == 0x00). * * , «» * . */ If (LEqual (Local0, 0x00)) { /* BRTW (. 5324). * ^W . */ BRTW (Arg0) } } /* = = * . * , _BCL. */ Method (_BQC, 0, NotSerialized) { /* . . */ Divide (BRTL, 0x0A, Local0, Local1) If (LEqual (Local0, 0x00)) { /* BRTL, * BRTW ( . 5341). */ Return (BRTL) } }
ãã®ã³ãŒãã倿ŽããŠãPCIæ§æã¹ããŒã¹ã§æ©èœããããã«ããã«ã¯ããã®ã¹ããŒã¹ãèšè¿°ããæ§é ã«æ°ãããã£ãŒã«ãã远å ããå¿ èŠããããŸãã ã¢ããã¿ã¢ãã¬ã¹00ïŒ02.0ã¯ãACPIã®å€0x0002000ã«å¯Ÿå¿ããŸãïŒã»ã¯ã·ã§ã³6.1.1ãpã200ïŒã ãã®ã¢ãã¬ã¹ãæã€ããã€ã¹ã¯1325è¡ç®ã§å®çŸ©ãããŠããŸãã PCIæ§æã¹ããŒã¹ã®èª¬æãç¶ããŸãã
åè¿°ã®ããã«ããã®ã¹ããŒã¹ã®æåã®64ïŒ0x40ïŒãã€ãã¯å éšäœ¿çšã®ããã«äºçŽãããŠããŸãã ãã®ãããACPIã¯ããããå°åã«ãå«ããŸããã
OperationRegion(IGDP, PCI_Config, 0x40, 0xC0)
ãšããŠå®çŸ©ãããŠããŸãã3çªç®ã®åŒæ°ã¯ãPCI_Configé åã®å é ããã®ãªãã»ããã§ãã èŒåºŠå¶åŸ¡ãã£ãŒã«ãã¯ã空éå šäœã§0xf4ããã®é åã§0xb4ã«ãããŸãã
é åå®çŸ©ã®åŸã«ãã£ãŒã«ãå®çŸ©ãç¶ããŸãã Fieldã³ã³ã¹ãã©ã¯ãå šäœã¯ãããããã£ãŒã«ãã®ã¹ããªãŒã ïŒé·ãã¯ãã€ãã§ã¯ãªããããã§æå®ïŒã§ããã€ãåäœã§æå®ããããªãã»ããïŒãªãã»ããïŒãšäº€äºã«ãªããŸãã ãã£ãŒã«ãã«BLVLãšããååãä»ããŠãæ§é ã«å«ããŸãããã
@@ -1347,7 +1347,8 @@ Device (IGD0) Offset (0xB0), Offset (0xB1), CDVL, 5, - Offset (0xB2), + Offset (0xB4), + BLVL, 8, Offset (0xBC), ASLS, 32 }
ACPIããŒã ã·ã¹ãã ã¯éå±€æ§é ã§ããããããã®ãã£ãŒã«ãã¯
_SB.PCI0.IGD0.BLVL
ãšããååã§ã°ããŒãã«ã«ã¢ã¯ã»ã¹ã§ããããã«
_SB.PCI0.IGD0.BLVL
ïŒååã¯ãã¹ããããæ§é ã®DeviceãšScopeã§æ§æãããŸãïŒãèŒåºŠãå¶åŸ¡ããã¡ãœãããæžãæããŠBLVLãã£ãŒã«ãã«çŽæ¥ã¢ã¯ã»ã¹ã§ããããã«ãªããŸããïŒ
Method (_BCL, 0, NotSerialized) { /* â . */ Or (VDRV, 0x01, VDRV) /* PCI â 0x00 0xff. * , 16 . */ Return (Package (0x12) { 0xEE, /* */ 0x22, /* */ 0x01, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }) } Method (_BCM, 1, NotSerialized) { Store (Arg0, \_SB.PCI0.IGD0.BLVL) } Method (_BQC, 0, NotSerialized) { Return (\_SB.PCI0.IGD0.BLVL) }
æŽæ°ãããDSDTããªããžããªã«ãããŸã ã
倿Žããã¹ãããªãããDSDTã§ã³ãŒãããããã°ããå¿ èŠããããŸããã ãããã°åºåã¯ãStoreïŒäœãããããã°ïŒãšãã圢åŒã®ã³ãã³ãã§æ©èœããŸãã Linuxããã°ã«ã¡ãã»ãŒãžãéä¿¡ããã«ã¯ãã«ãŒãã«ãã©ã¡ãŒã¿ãŒ
acpi.debug_level=0x1f
ã远å ããå¿ èŠããããŸãã
倿Žããã³ã¢ã»ã³ãã«ãããïŒ
make
ãŸãã¯
iasl -tc dsdt.dsl
ïŒDSDTã¯ããããã€ããŒãæäŸããå Žæã«éä¿¡ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãBIOSããã©ãã·ã¥ããããšãã§ããŸãããBIOSã®å éšæ§é ããç¥ããŸããïŒãããŠãããã«ã€ããŠè©±ããŠããå Žåã¯ããã©ãã·ã¥ã®æ¹æ³ãïŒã ã·ã¹ãã ã®ä»£ããã«DSDTã䜿çšããããLinuxã«æç€ºããæ¹ãç°¡åã§å®å šã§ãã ãããè¡ãã«ã¯ãdsdt.hexãåéãïŒå¿ èŠã«å¿ããŠ-tcãªãã·ã§ã³ãiaslã«Cé åãçæããããæç€ºããŸãïŒãã«ãŒãã«ã®include / sourceãã£ã¬ã¯ããªã«é 眮ããCONFIG_ACPI_CUSTOM_DSDT_FILEãªãã·ã§ã³ããdsdt.hexãã«èšå®ããŸãã ïŒãæ±çšãã©ã€ããŒãªãã·ã§ã³ããªãã·ã§ã³ã®CONFIG_STANDALONEãªãã·ã§ã³ãã³ã³ãã€ã«æã®å€éšãã¡ãŒã ãŠã§ã¢ãå¿ èŠãšããªããã©ã€ããŒã®ã¿ãéžæããããæå¹ã«ãªã£ãŠããå Žåã¯äœ¿çšã§ããŸãããïŒ
ã«ãŒãã«ããã«ãããã€ã³ã¹ããŒã«ããŠåèµ·åã§ããŸãã åºæ¥äžããïŒããã¯ã©ã€ãã®æããã®å€æŽã¯ãæšæºã®ACPIãã©ã€ããŒã§åäœããŸãã ïŒããšãã°ã
echo 7 >/sys/class/backlight/acpi_video0/brightness
ïŒã
ãã®ä»ã®æ©èœ
SMMã®ã³ãŒãã«ãã£ãŠå€æŽãããä»ã®åæ§ã®ãã£ãŒã«ããèŠã€ããããã«ã ç°¡åãªã¹ã¯ãªãããæžããŸããã äžéšã®ããã€ã¹ãã€ãŸãPCI Expressããªããžãšãããã¯ãŒã¯ã¢ããã¿ã¯ãå€ãã®èªçºçãªå€æŽãåŒãèµ·ããããšã«æ³šæããŠãã ããã
æ®å¿µãªããšã«ãã¯ã€ã€ã¬ã¹ã¢ãžã¥ãŒã«ã®ãã¡ã³é床ãã¹ã€ããããæ§æã¹ããŒã¹ã®å€æŽã«é¢é£ä»ããããŠããŸããã§ããã ãããã¯ããããã Embedded ControllerãŸãã¯SMBusã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠè¡ãããŸããã€ãŸããã·ã¹ãã ã¡ã¢ãªã«æ°žç¶çãªå€æŽã¯ãããŸããã
ããã«ãããšãç¡ç·ã¢ãžã¥ãŒã«åæã€ã³ã¿ãŒãã§ãŒã¹ãçºèŠãããšããŠãããã®ãããªæ¹æ³ãæ¬è³ªçã«ãªããããã·ã¹ãã ã«ãããæç€ºããæšæºçãªæ¹æ³ã䜿çšããããšã¯ã§ããŸããã ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãACPIã§å®éã«å®çŸ©ãããŠããã©ãããããã«ã¯ããããåŠçããããã®ãã©ãããã©ãŒã åºæã®ãã©ã€ããŒããããŸãïŒããã¯ã©ã€ããšã¯å¯Ÿç §çã«ãå ±éã®æšæºããããŸãïŒã