惊异的发现我的 2.6.22/23/24(-rc4) 内核上的 speedstep-centrino 模块不好用了,几经尝试,发现
modprobe speedstep-centrino
的结果是找不到设备,
modprobe acpi-cpufreq
可以加载,之后加载 speedstep-centrino 就是资源忙了,正当一筹莫展的时候,发现 /sys/devices/system/cpu/cpu0/cpufreq 已经又存在了,难道是 acpi-cpufreq 取代了 speedstep-centrino 的位置?哪个更好一些呢?
Google 了一下,找到了 Intel 的 Len Brown 的文章 —— ACPI in Linux – Myths vs. Reality ,以及 Albcamus <albcamus(at)gmail.com> 翻译的中文版,发现确有其事,根据其中第九节描述,依照 Intel 新发布的 Intel Processor Vendor-Specific ACPI Interface Specification 规范,对于那些遵循规范的设备,acpi-cpufreq 也可以直接访问 MSR 寄存器,从而提高了效率;同时,speedstep-centrino 因为带有一个用于查询的码表,维护比较复杂,也加入了 acpi 查询的方式,这样,这两者有些共通之处,也就是说,对于较高版本的内核(多高算高?这个问题需要考古,时间有限,先不考古了),两者都是可用的。
那什么时候开始 speedstep-centrino 对某些计算机不可用的呢?注意 lkml 的这个 thread:
http://lkml.org/lkml/2007/7/1/102
也就是说,要把 speedstep-centrino 的 acpi 方式去掉,这个补丁生效的时候是:
http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.22-git6.log
也就是说,从大约 2.6.22 内核开始,speedstep-centrino 就不读取 acpi 了,换句话说,从这时起,如果需要读 acpi 才能确定 speedstep 的码表的话,就必须使用 acpi-cpufreq 模块而不是 speedstep-centrino 了。
以前一直没有注意过这个问题,呵呵,不知道从什么时候就出现了,不过,目前基本算是水落石出,真相大白了,可以放心的使用 acpi-cpufreq 模块了。