2009年6月12日

Updating Linux kernel to 2.6.30 & Lowing CPU Temperature

升级内核后 处理器核心温度大幅度下降

将系统的内核升级到了前几天刚发布的 linux-2.6.30, 也解决了笔记本CPU温度总是比较高的毛病. 这文章主要是用于做备份, 毕竟用了这么长时间的Linux, 这回才是第一次手工编译升级内核. 囧
主要的参考资料:
How to: Linux delete or remove kernel
How to: Compile Linux kernel 2.6
3.3. CPUfreq Governor Types
更为详细全面的资料(不过我没有研究, 实在是太详细了, 应该是写给系统管理员的, 也是写给那些想要对Linux做系统裁剪的同学的):
Linux Kernel Configuration - Linux Kernel in a Nutshell

下面是总结的摘要.
---------------------------------
安装内核
Installation:
#1 Download the source-code from linux-kernel site. linux-2.6.30.tar.bz2
#2 Unzip it to /usr/src/.
$ tar -xjf linux-2.6.30.tar.bz2 -C /usr/src/
$ cd /usr/src/linux-2.6.30/
#3 **** Configure the kernel ****
$ sudo make menuconfig
#4 Make and install.
$ sudo make -j4
$ su
root$ make modules_install
root$ make install
root$ cd /boot
root$ mkinitranfs -o initrd.img-2.6.30 2.6.30
root$ exit
#5 Update the "grub file" menu.lst.
$ sudo update-grub
#6 Reboot.
$ sudo reboot
---------------------------------
在安装过程中, 需要注意配置声卡和电源管理选项.

电源管理

CPU Frequency Scaling:

对于 CPUFreq governor 选项的含义, 可以参考 Redhat 的文档. 简单点说, 就是 cpufreq_performance 注重将CPU的能力发挥到极限, 总是以最高频率运行; cpufreq_powersave 将节能摆在优先位置, 总是以最低可能的频率运行; cpufreq_userspace 允许用户代码自动调节处理器频率; cpufreq_ondemand 允许内核根据当前CPU使用情况自动调节运行频率; cpufreq_conservativecpufreq_ondemand 差不多, 只是调节方式更加趋于保守.
默认的选项是 cpufreq_performance, 对于笔记本而言, 这是绝对错误的选择(当然, 如果处理器不支持动态调频, 那么这个选择也就无可厚非了). 对于使用Intel处理器的笔记本, 使用 cpufreq_ondemandcpufreq_conservative 更加合适, 尽管看上去后者更加适合. 具体的原因参考这两条邮件列表中的信息(来自一款Intel开源实验室开发的PowerTop工具):
Ondemand vs. conservative governor
Ondemand vs. conservative governor
另外, 如果你希望拥有休眠 Hibernation 和挂起 Suspend 的功能, 也要注意在配置中加以设置.
这里有一组命令, 是在某个页面上直接摘过来的, 可以用于查看硬件配置, 可以参考一下:
lspci ( lists pci device)
lsusb ( lists usb device)
lsscsi ( lists scsi device)
systool
fdisk -l ( lists hard drive)
dmidecode ( lists hardware model, serial number, cpu, memory. This command was handy when i needed to find serial number without a visit to data center)
cat /proc/cpuinfo ( more on cpu)
cat /proc/meminfo ( more on memory)
一般来讲, 使用 sudo lshwdmidecode 以及 lspci |grep xxx 就足够了.

声卡配置

这一点我开始忽视了, 导致内核编译安装后缺乏相应的声卡驱动模块, 结果配置了半天ALSA, 翻阅了无数BBS和maillist查找bug-report也没有搞定, 过了几个小时才恍然大悟可能是内核编译中缺乏声卡模块. -_-

这里有两个选项, 一般来讲选择第一个, Advanced Linux Sound Architecture, 也就是ALSA, 但是如果ALSA搞不定你的声卡, 你可以选择 Open Sound System, 也就是俗称的OSS, 来碰碰运气.
为了最小化驱动(要知道内核中最占空间的就是这一坨一坨的驱动), 我们要进入ALSA的自选项卡, 选择自己的声卡:

譬如我的就是 Intel HD Audio, 你可以运行 lspci |grep Audio 来得知自己的声卡类型.
---------------------------------
另外, 如果不是这次手工配置内核, 还真是没有感觉到传说中 Linux 强大的网络协议支持能力 囧:

---------------------------------
内核卸载

如果内核编译安装后, 发生了一些bug, 抑或是你感觉没有配置成功, 可以重新再 menuconfig -> compile -> install 一遍, 但是前提是你要先将安装好的内核卸载!
和一般的软件 make uninstall clean 不同, 内核卸载不是这么容易, 需要自己手工删除. 但是总体来讲工作量也很小, 这是由于Linux文件结构中良好的低耦合度所决定的.
需要删除的部分:
# /boot/vmlinuz*KERNEL-VERSION*
# /boot/initrd*KERNEL-VERSION*
# /boot/System-map*KERNEL-VERSION*
# /boot/config-*KERNEL-VERSION*
# /lib/modules/*KERNEL-VERSION*/
如果在 /boot 文件夹中还存在 vmlinuz System-map config 的软链接, 此时有可能会变成死链, 也要一并删除之.
删除完毕后重新 sudo update-grub 更新一下 menu.lst 就ok了.
---------------------------------
升级内核后, 可能是由于手工编译更加贴近硬件的实际状态, 处理器两个核心的温度大幅度降低(你可以通过安装 lm-sensors sensors-applet 检测硬件温度), 和视窗系统下的温度差不多, 都是30-35度之间. 波动大概10度, 可能会到达40-45度左右(对于编译内核这样的密集计算工作, 可能会使得处理器核心达到60-70度).

祝你内核配置之旅愉快.

ps1:
这里提供一个小技巧, 为了加快内核编译过程(从1-2小时压缩到20分钟甚至是10分钟左右), 一方面是要进行充分的配置, 将无用的驱动和模块统统删除, 另一方面可以使用 make -jnmake 进行分成n个并行作业, 一般来讲单个处理器核心可以分成2个, 如果是双核处理器, 拥有两个处理器核心, 使用 make -j4 就可以了.
ps2:
如何修改动态调频方式? 参考这份文档: How to make use of Dynamic Frequency Scaling - ThinkWiki

- EOF -

没有评论:

发表评论

不要使用过激的暴力或者色情词汇.
不要充当勇猛小飞侠 --- 飘过 飞过 扑扑翅膀飞走 被雷得外焦里嫩地飞走.
万万不可充当小乌龟 --- 爬过.
构建河蟹社会 责任你有 我有 大家有 -_-

Creative Commons License 转载请指明出处. 谢谢合作.
/***********************
author: jtuki
http://jtuki.blogspot.com/
***********************/