ãã®èšäºã§ã¯ãææ°ã®ãããããã¯ã®BIOSã§èŠãããå
žåçãªèšèšãšã©ãŒãšããããã®æ€åºã調æ»ãä¿®æ£ã®æ¹æ³ã«ã€ããŠèª¬æããŸãã
ãšã³ããªãŒ
ãã®ããã
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è¡ç®ã§å®çŸ©ãããŠããŸãã ã³ã¡ã³ãããããœãŒã¹ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
Method (_BCL, 0, NotSerialized) { Or (VDRV, 0x01, VDRV) Return (Package (0x08) { 0x64, 0x05, 0x0F, 0x18, 0x1E, 0x2D, 0x3C, 0x50 }) } Method (_BCM, 1, NotSerialized) { Divide (Arg0, 0x0A, Local0, Local1) If (LEqual (Local0, 0x00)) { BRTW (Arg0) } } Method (_BQC, 0, NotSerialized) { Divide (BRTL, 0x0A, Local0, Local1) If (LEqual (Local0, 0x00)) { 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) 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ã§å®éã«å®çŸ©ãããŠããã©ãããããã«ã¯ããããåŠçããããã®ãã©ãããã©ãŒã åºæã®ãã©ã€ããŒããããŸãïŒããã¯ã©ã€ããšã¯å¯Ÿç
§çã«ãå
±éã®æšæºããããŸãïŒã