ACPI规范定义了一台兼容ACPI的计算机系统可以有七个状态:

  • G0(S0):下常工作状态。
  • G1:睡眠状态,这个状态又分为S1~S4四个睡眠状态
  • G2(S5,也有叫作:Soft Off):有些部件仍然带电,以便被键盘等设备唤醒,唤醒时需要运行启动程序来启动操作系统。

G1中S1~S4睡眠状态:

  • S1:电耗电睡眠模式,处理器的所有寄存器被刷新,CPU停止执行指令。CPU和内存电源一直维持,一些设备如果没被使用就停止供电。这种模式通常指上电待机或POS
  • S2:比S1更深的睡眠状态,不给CPU供电,通常这种模式不被采用
  • S3: BIOS中叫做『Suspend to RAM/STR』,在Windows和Linux一些发行版本中叫做『待机(Standby)』,在Windows Vista和Mac OS X则叫做『睡眠(Sleep)』。在此状态下RAM仍然有电源供应,也是几乎唯一有电源供应的组件。也就是将睡眠前系统的状态保存在内存中,这样唤醒恢复快,但有资料丢失风险。
  • S4: Windows中叫『休眠(Hibernate)』,Mac OS X中叫安全睡眠。其原理和上面的S3类似,只是睡眠前把状态信息存入硬盘等非易失性设备上。

设备状态

设备状态划分相关因素

  • 电源消耗:设备用电量
  • 设备上下文:设备从D0进入其它状态时需要保存多少信息,操作系统负责保存设备的上下文信息
  • 设备驱动:让设备恢复到D0,驱动应该做什么

设备状态

  • D0(Full-On):工作状态,即电源消耗最多,设备被完全应用,设备保留了全部设备上下文。
  • D1~D2:中间电源状态,根据不同的设备有所不同。
  • D3(Off):设备电源关闭,设备上下文信息全部丢失,设备重新加电时操作系统会重新初始化设备。

处理器电源状态

处理器电源状态(C0~C3,后面还有Cn)是指在G0状态下,处理器电源状态的处理器电能消耗和温度管理的状态。在C1~Cn状态下,CPU都处于各种不同的睡眠状态下,CPU都有一个恢复到C0的唤醒时间,恢复时间越短,耗电越高,反之亦然。

  • C0:正常工作状态
  • C1(Halt):拥有最短的唤醒时间,这个延时必须短到操作系统软件使用CPU的时候不会考虑到唤醒时间方面的因素。
  • C2(Stop-Clock):这个状态下处理器维持着所有的软件所见的状态信息,但是需要更长的时间来恢复到C0。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C1而不是C2状态,C2比C1更省电。
  • C3(Sleep):相比C1和C2更省电了。这个状态下情况最坏的硬件唤醒时间是由ACPI固件提供,并且操作系统软件可以利用这些信息来决定是采用C2而不是C3状态,当处于C3状态时,处理器缓存保留了所有的状态信息,但是忽略所有的侦听。操作系统软件负责保证缓存数据的一致性。

设备和处理器性能状态

设备和处理器性能状态(Px状态)是在C0(对于处理器)和D0(对于设备)下定义的电源消耗和能力的状态。性能状态允许OSPM在性能和能源消耗之间获取平衡。P0是最高性能状态,从P1到Pn是连续的低性能状态,最高限制n为16。

  • P0:使用最大性能并且消耗的电能最多。
  • P1:性能比前者要小,但是消耗电能也相应少一些。
  • Pn:n是的大小是依赖于处理器和设备的,处理器和设备可以定一个任意的不超过16的数字。
  • 这个状态在Intel处理器中称为SpeedStep,

SpeedStep不陌生吧,参见:为什么要检查CPU Speedstep

最近,我一直用x220做为主力机,经过我的折腾,这个机型基本完美了,只是无线网卡(Intel Centrino Advanced-N 6205)无解。出门还要带个USB WIFI,这实在是让我不爽!逛淘宝时无意中找到一块原装联想专用版AR9285,才19块,果断拿下!AR9285虽然不能做到免驱,但是相对来说,这货在Hackintosh领域也不是新面孔了,我还是有信心搞定它得!

查了些资料,要支持这东东有四种方法:

  • 方法一:借助Clover的config.plist打补丁(这当然是首选,既简单,又方便升级)
  • 方法二:制作或下载驱动注入包(即:Injector)
  • 方法三:直接下载修改过的原装驱动包,即:IO80211Family.kext。(这个是我最不喜欢的方式,直接排除!)
  • 方法四:打DSDT补丁(这个我没搞定,还在研究中)

经过实验,方法一死活搞不定(现在正在研究中)。方法二则是我唯一能接受的方案。于是,为节省时间,直接从网上找到了个现成的驱动注入包:AtherosWiFiInjector.kext,安装好后,马上就可以用WIFI了,开始还挺高兴,用一会儿发现问题来了,蓝牙鼠标不正常了,具体表现也挺怪异:鼠标只要一磕碰,哪怕是很轻微地那种,鼠标立即跑到左上角。鼠标多指操作也不灵的,甚至是上下滑屏翻页也不成了(我的鼠标是苹果原装,本来是支持多指操作的)。

后来,又在网上找到了toledaARPT.kext,用这个一切正常了!打开这个其中的Info.plist,发现这货其实原理上和AtherosWiFiInjector.kext是一样的,只是细节上有些不同(具体差异研究中),并且,这个文件中居然还有蓝牙模块的定义,仔细看了看,蓝牙模块定义和x220原生蓝牙模块只是差了一点一点,只需将toledaARPT.kext中的idProduct改为8575(原值8573)即可。接下来就简单了,删除原来的蓝牙驱动注入文件,安装编辑好的toledaARPT.kext,修复权限与重建缓存,最后重启。一切正常了!

另外,我还尝试了使用FakePCIID,只需要将FakePCIID_AR9280_as_AR946x.kext/Contents/Info.plist中的『pci168c,34』换成『pci168c,2b』即可。记得安装FakePCIID.kext与FakePCIID_AR9280_as_AR946x.kext(当然,如果你觉得别扭,也可以改个名子)。这个方法虽然也能成,但是还要为蓝牙单独安装Injector,并且,分别安装驱动鼠标总是不正常,和AtherosWiFiInjector.kext问题一样,估计是我的蓝牙Injector有问题,有时间再研究具体啥原因。

总之,还是安装改造过的toledaARPT.kext最简单,虽然最后搞定了,但是不明白的地方还是挺多,有时间研究下再写!

如果使用双系统,尤其是双系统中有Windows,那么就会出现问题不一致的问题。即:在Windows中把时间设置正确了过后,在Mac 中的时间又不一样了,在Mac中把时间设置正确后进入Windows后,时间又不一致了。出现这种情况的原因是Windows 、 Mac 在默认情况下看待硬件时间(主板上的BOIS显示的时间)的方式不一样。 知道了问题存在的原因,我们就来解决这个问题。 注:各种Linux与Mac情况是一样的,所以,此文也适用于各种Linux与Windows双系统环境。

这个是一个关于时间的问题,我们就先来了解一下关于时间的概念

  • UTC即Universal Time Coordinated,协调世界时
  • GMT即Greenwich Mean Time,格林尼治平时

Windows 与 Mac/Linux 缺省看待系统硬件时间的方式是不一样的:

  • Windows把系统硬件时间当作本地时间(local time),即操作系统中显示的时间跟BIOS中显示的时间是一样的。
  • Linux/Unix/Mac把硬件时间当作 UTC,操作系统中显示的时间是硬件时间经过换算得来的,比如说北京时间是GMT+8,则系统中显示时间是硬件时间+8。

这样,当PC中同时有多系统共存时,就出现了问题。假如你的Mac和WindowsXP中设置的时区都为北京时间东八区,而你在Mac中把当前系统 时间更改为9:00AM。则此时硬件中存储的实际是UTC时间1:00AM。这时你重启进入Windows后,你会发现windows系统中显示的时间是 1:00AM,比Mac中慢了八个小时。同理,你在Windows中更改或用网络同步了系统时间后,再到Mac中去看,系统就会快了8小时。在实行夏令时的地区,情况可能会更复杂些。

解决这个问题的方法也有几种,可让Mac和Linux不使用UTC时间与 Windows 保持一致。但这样改就相对复杂,而且要修改Mac和 Linux两个系统(Linux/Unix/Mac都是把硬件时间当作UTC)。建议修改 Windows 对硬件时间的对待方式,这样只在Windows 上修改后就无需在 Mac和Linux上设置了。

解决方法

让Windows把硬件时间当作UTC 开始->运行->CMD,打开命令行程序(Vista则要以管理员方式打开命令行程序方可有权限访问注册表),在命令行中输入下面命令并回车 Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

虽然HD3000可以支持VGA模式(参见:在Yosemite中为HD3000显卡开启VGA,但是在实际使用过程中发现,其对部分外置显示器或投影仪支持不好,尤其是对于Dell的显示器,例如:我的外置Dell显示器显示就不正常,严重的屏幕偏移,一半显示正常,另一外黑屏。我在网上查了些资料,发现很多网友碰到同样的问题,甚至是一些白苹果用户,这些用户多是使用Dell显示器出问题(买显示器还是不要碰Dell),看来这个问题并不是黑苹果特有的。经过研究,终于到到了解决办法,步骤如下:

解决这个问题要借助两个应用软件:

首先,用DarwinDumper得到EDID数据。然后运行FixEDID,在界面中选择你的外置显示器(这里有个小技巧,你如何分辨是外置显示器还是内置显示器呢?办法是看Display Class,外置是AppleDisplay,内置是AppleBacklightDisplay),然后选择刚才生成的EDID数据,例如:edid.bin。下面有两项: IODisplayPrefs check in the display” 与 “Add/Fix Monitor Ranges”全勾上。点击『Make』,此软件将生成一个kext文件DisplayMergeNub.kext与一个名为DisplayVendorID-xxxx(XXXX是根据你的设备信息生成的)文件夹。接下来,安装生成的DisplayMergeNub.kext,将DisplayVendorID-xxxx文件夹中的文件复制到/System/Library/Displays/Overrides/DisplayVendorID-xxxx目录下。最后,重新修复权限与重建缓存。

另外,随FixEDID一起的还有一个叫作RetinaDisplayMenu的应用软件,这个是在顶栏上加入分辨率(选项比系统提供得更多)选项菜单,这个也挺好用的,推荐使用。

每次写博文都要查这东东,干脆放自己这儿!

List of lexers/highlighters supported by pygments:

Format Short names for highlight tag
Debian Sourcelist sourceslist, sources.list
Delphi delphi, pas, pascal, objectpascal
JavaScript+Mako js+mako, javascript+mako
Elixir iex session iex
PostgreSQL console (psql) psql, postgresql-console, postgres-console
Brainfuck brainfuck, bf
Ceylon ceylon
JavaScript+Django/Jinja js+django, javascript+django, js+jinja, javascript+jinja
HTML+Evoque html+evoque
NumPy numpy
Modula-2 modula2, m2
LiveScript live-script, livescript
Nimrod nimrod, nim
Bash bash, sh, ksh
HTML+Django/Jinja html+django, html+jinja
CSS+PHP css+php
XML+Lasso xml+lasso
VimL vim
CSS+Genshi Text css+genshitext, css+genshi
Fancy fancy, fy
Coldfusion HTML cfm
cfstatement cfs
Scalate Server Page ssp
Smarty smarty
XML+Evoque xml+evoque
haXe hx, haXe
PowerShell powershell, posh, ps1
Tea tea
HTML+Cheetah html+cheetah, html+spitfire
Ruby irb session rbcon, irb
Mason mason
Django/Jinja django, jinja
JAGS jags
ApacheConf apacheconf, aconf, apache
DTD dtd
Dylan session dylan-console, dylan-repl
Lighttpd configuration file lighty, lighttpd
Java java
JavaScript+Genshi Text js+genshitext, js+genshi, javascript+genshitext, javascript+genshi
Scheme scheme, scm
Nemerle nemerle
RHTML rhtml, html+erb, html+ruby
Ragel in Java Host ragel-java
Darcs Patch dpatch
Puppet puppet
Octave octave
CoffeeScript coffee-script, coffeescript
Ragel in D Host ragel-d
Scilab scilab
Monkey monkey
HTML+Myghty html+myghty
Erlang erl session erl
CSS css
JavaScript+Smarty js+smarty, javascript+smarty
Io io
COBOLFree cobolfree
Asymptote asy, asymptote
vhdl vhdl
Python 3 python3, py3
CSS+Ruby css+erb, css+ruby
Fortran fortran
d-objdump d-objdump
MySQL mysql
REBOL rebol
C++ cpp, c++
ERB erb
CBM BASIC V2 cbmbas
Befunge befunge
Julia julia, jl
MoonScript moon, moonscript
Ruby rb, ruby, duby
XML+Smarty xml+smarty
Dylan dylan
Groovy groovy
MoinMoin/Trac Wiki markup trac-wiki, moin
autohotkey ahk
C c
HTML html
Felix felix, flx
CMake cmake
NSIS nsis, nsi, nsh
SourcePawn sp
Mako mako
VGL vgl
Velocity velocity
Koka koka
CUDA cuda, cu
Gnuplot gnuplot
IRC logs irc
Prolog prolog
Python python, py, sage
CSS+Django/Jinja css+django, css+jinja
verilog verilog, v
Smalltalk smalltalk, squeak
JavaScript+Myghty js+myghty, javascript+myghty
YAML yaml
ANTLR With ActionScript Target antlr-as, antlr-actionscript
XML+Mako xml+mako
XSLT xslt
UrbiScript urbiscript
Scaml scaml, SCAML
S splus, s, r
DylanLID dylan-lid, lid
MAQL maql
sqlite3con sqlite3
Boo boo
OCaml ocaml
eC ec
ActionScript as, actionscript
VB.net vb.net, vbnet
SquidConf squidconf, squid.conf, squid
XQuery xquery, xqy, xq, xql, xqm
D d
Fantom fan
Gettext Catalog pot, po
Logos logos
Julia console jlcon
Lasso lasso, lassoscript
SCSS scss
BBCode bbcode
Haml haml, HAML
FoxPro Clipper, XBase
Python 3.0 Traceback py3tb
MuPAD mupad
XML+Ruby xml+erb, xml+ruby
Dart dart
IDL idl
dg dg
Evoque evoque
Jade jade, JADE
c-objdump c-objdump
Kconfig kconfig, menuconfig, linux-config, kernel-config
Java Server Page jsp
reg registry
ABAP abap
XML+Velocity xml+velocity
JavaScript+Cheetah js+cheetah, javascript+cheetah, js+spitfire, javascript+spitfire
HTML+Mako html+mako
Ragel in Ruby Host ragel-ruby, ragel-rb
RobotFramework RobotFramework, robotframework
Protocol Buffer protobuf
CFEngine3 cfengine3, cf3
Ragel ragel
GLSL glsl
COBOL cobol
TypeScript ts
Ada ada, ada95ada2005
PostgreSQL SQL dialect postgresql, postgres
Xtend xtend
Logtalk logtalk
objdump objdump
CSS+Mako css+mako
ca65 ca65
Objective-C++ objective-c++, objectivec++, obj-c++, objc++
Gherkin Cucumber, cucumber, Gherkin, gherkin
HTML+PHP html+php
Makefile make, makefile, mf, bsdmake
PostScript postscript
Hxml haxeml, hxml
Kotlin kotlin
PL/pgSQL plpgsql
Vala vala, vapi
Haskell haskell, hs
Bro bro
Lua lua
POVRay pov
Sass sass, SASS
ANTLR With Java Target antlr-java
Tcl tcl
ANTLR With ObjectiveC Target antlr-objc
JavaScript+Ruby js+erb, javascript+erb, js+ruby, javascript+ruby
Racket racket, rkt
AspectJ aspectj
Base Makefile basemake
ANTLR With Python Target antlr-python
cpp-objdump cpp-objdump, c++-objdumb, cxx-objdump
Genshi Text genshitext
Ioke ioke, ik
PyPy Log pypylog, pypy
Croc croc
Objective-J objective-j, objectivej, obj-j, objj
GAS gas
Batchfile bat
Snobol snobol
Python console session pycon
XML xml
ANTLR antlr
Opa opa
XML+Cheetah xml+cheetah, xml+spitfire
Go go
Diff diff, udiff
MiniD minid
Cython cython, pyx
Ragel in C Host ragel-c
Erlang erlang
Debian Control file control
aspx-vb aspx-vb
BUGS bugs, winbugs, openbugs
Ragel in CPP Host ragel-cpp
aspx-cs aspx-cs
Matlab session matlabsession
Properties properties
Groff groff, nroff, man
Clojure clojure, clj
Modelica modelica
QML qml, Qt Meta Language, Qt modeling Language
JavaScript+Lasso js+lasso, javascript+lasso
ANTLR With Perl Target antlr-perl
Genshi genshi, kid, xml+genshi, xml+kid
BlitzMax blitzmax, bmax
Treetop treetop
Matlab matlab
Myghty myghty
HTML+Genshi html+genshi, html+kid
Duel duel, Duel Engine, Duel View, JBST, jbst, JsonML+BST
Perl perl, pl
FSharp fsharp
reStructuredText rst, rest, restructuredtext
NewLisp newlisp
Scala scala
CSS+Lasso css+lasso
XML+PHP xml+php
Stan stan
INI ini, cfg
MOOCode moocode
Shell Session shell-session
RPMSpec spec
Newspeak newspeak
Bash Session console
Coq coq
Raw token data raw
Tcsh tcsh, csh
HTML+Lasso html+lasso
C# csharp, c#
Gosu Template gst
RConsole rconsole, rout
MXML mxml
TeX tex, latex
CSS+Smarty css+smarty
Text only text
ANTLR With C# Target antlr-csharp, antlr-c#
OpenEdge ABL openedge, abl, progress
Cheetah cheetah, spitfire
Smali smali
CSS+Myghty css+myghty
Rd rd
LLVM llvm
Standard ML sml
Elixir elixir, ex, exs
Nginx configuration file nginx
GoodData-CL gooddata-cl
AppleScript applescript
HTML+Smarty html+smarty
Objective-C objective-c, objectivec, obj-c, objc
JavaScript js, javascript
Rust rust
Common Lisp common-lisp, cl
Embedded Ragel ragel-em
ActionScript 3 as3, actionscript3
systemverilog systemverilog, sv
Literate Haskell lhs, literate-haskell
Python Traceback pytb
PHP php, php3, php4, php5
ANTLR With CPP Target antlr-cpp
Gosu gosu
Hybris hybris, hy
JavaScript+PHP js+php, javascript+php
Factor factor
HTML+Velocity html+velocity
Mscgen mscgen, msc
Ooc ooc
SQL sql
HTTP http
ECL ecl
Redcode redcode
Ragel in Objective C Host ragel-objc
XML+Django/Jinja xml+django, xml+jinja
Awk awk, gawk, mawk, nawk
JSON json
NASM nasm
ANTLR With Ruby Target antlr-ruby, antlr-rb
XML+Myghty xml+myghty
AutoIt autoit, Autoit