编译kubuntu8.04内核升级到2.6.30-4
这几天一直觉得kubuntu8.04用起来很不舒服。 firefox里开多几个标签风扇就呼呼的转,吵死了,速度也有些卡。 开一两个程序系统负载就超过1。于是决定重新编译一下内核,看能不能提高性能。 去linux.org下载了最新的2.6.30-4, 这个版本似乎修复了2.6.28在ext4上的一些问题。除此之外, 30版的内核支持一个新的文件格式nilfs. 这种格式转为固态硬盘(SSD)而设计。 我决定就用这个内核了。
下载这个30版本到/usr/src目录,然后解压缩:
cd /usr/src sudo tar xvf linux-2.6.30.4.tar.gz
如果是bz2文件可以用j参数解压缩:
sudo tar xvf linux-2.6.30.4.tar.gz
进入内核目录进行配置, 一共有3种配置方式:
sudo make config //文本方式 sudo make menuconfig //文本图形 sudo make xconfig //图形方式
如果选择文本方式。立刻就可以进入配置界面,但是menuconfig这需要安装ncurses支持。图形方式则需要qt3支持,躯体安转方式如下:
sudo apt-get install libncurses* //menuconfig support sudo apt-get install libqt3-headers libqt3-mt-dev //xconfig support
完成之后就能进入各种配置界面了。 具体的配置方法稍后介绍。 如果配置好了一定要储存为”.config”文件。这样编译的时候可以按照配置的来编译。 编译命令如下
make //编译 make install //安装 make modules_install //模块安装
这些都完成后会在/boot下看到新的vmlinuz内核文件和 system.map文件,另外/lib/modules/目录下有新的内核模块目录,我的目录名就叫”2.6.30.4″,这个名字是可以在内核配置是更改的,具体的配置方法稍后介绍 。 这时需要制作一个新内核的启动镜像initrd.img. 可以用如下命令:
cd /lib/modules
sudo mkinitramfs -o initrd.img-2.6.30.4 2.6.30.4
sudo mv initrd.img-2.6.30.4 /boot
这些都完成后, 需要在grub里面添加新内核的启动方式。 打开/boot/grub/menu.lst文件,在适当的位置,也就是末尾的地方加入:
title Ubuntu 8.04.3 LTS, kernel 2.6.30.4 root (hd0,2) kernel /boot/vmlinuz root=UUID=98f69044-be12-4dde-95df-358dca35c632 ro quiet splash initrd /boot/initrd.img-2.6.30.4 quiet
如果要重新编译一定要清除上次编译的东西,命令如下:
make clean make mrproper
重新启动后,在grub的启动选项里就能看到新的内核。 基本上只要配置得当,启动应该不成问题。主要问题是硬件的支持, 我第一次配置完成后声卡和无线网卡都不工作。 不得不重新编译,第二次还是没成功, 3次编译之后, 声卡可无线网卡才好用。
内核配置
内核配置里面有两种标记, 星号(*)标记为将特性编译到内核里面, 模块(M)标记为编译为外部模块。 一般不是常用特性都可以编译为模块, cpu, 内存,电源,和磁盘的文件系统都应该是编译到内核里面的,其余的比如usb,声卡什么的可以编译为外部模块,这样可以减小内核体积。
头3项”general setup”,”loadable module”和”block layer”基本上没有什么要改的默认就行了, “general setup”里面有个”local version”可以指定内核名称,比如设置为”liduan.cn”编译后的内核名称就为2.6.30.4liduan.cn. 同时/lib/modules目录下的模块目录名也是这个名字。
“processor type and features”里面的processor family一定要选择自己对应的cpu,尤其是笔记本电脑, 电耗负载什么的回有很大的改进。 如果不是服务器的话, 最大cpu数量(maximun number of cpus)可以改为2, 如果没有4G以上的内存可以关闭大内存支持(high memory support),如果有4G以上的内存还需要开启PAE support. 内存模式(memory model)基本都是flat memory. 其余的都不必改了。
“power management”里面一定要有acpi支持, apm支持可以选为模块。
“bus opeions (PCI)”里面,新的电脑需要加入”PCI express”和”PCI hotplug”支持 同时可以去掉”ISA”支持, 笔记本一定要加入”PCCard PCMCIA”支持。
“executable file formats”是可执行文件的格式支持, ELF是必须的。其余默认就行了。
“networking support”, 这里面就看个人的情况了,一般笔记本需要加入红外(irda),和蓝牙(bluetouth)的支持。 wireless可以考虑编译进内核。 如果在欧美等地方,也可以考虑WiMAX编译成模块支持。 如果不是高级的服务器的话,可以在”networking options”你去掉ipv6的支持。
“Device Drivers”里面需要根据自己的硬件情况。 容易忽略的是硬盘的ATA,DMA支持, 声卡(sound card),显卡(graphics card)和网卡(network device support)支持.
“firmware drivers”不用动。
“file systems”里面把现有的磁盘文件格式编译进内核,其余都编译成模块。
“kernel hacking”里面有个”Magic SysRq key”据说很好玩。 可以考虑加入。 另外”comple the kernel with debug info”一定要去掉, 不然编译后的内核会很大的。
剩下的都没什么好改的了,另外如果是较老的电脑或对虚拟机不敢兴趣的可以去掉”Virtualization”的支持。
全都配置完成后一定要保存配置文件(save an alternate configuration file)为”.config”. 同时把这个文件复制 一份到安全的地方备用。 一旦编译失败可以再次读取这个文件在原先的基础上修改,重新编译。
升级新内核后
我一共编译了3次, 每次基本都是一个半小时到2个小时。 前两次都是声卡和无线网卡的问题。 第三次编译中途不小心把电脑挂起了一次。 不过最后也编译成了。
新的内核在启动速度上确有提高。 在运行程序方面没有多大的变化,最大的改变是在系统的负载上, 同时看电影和上网再加几个其他程序,负载只有不到1.5, 由于专门优化了cpu和电源。 发热程度明显改善,不像以前动不动风扇就转不停, 现在由于发热降低,几乎不怎么转了。
无线网卡方面,新的内核使用了ath5k取代了原先的ath_pci驱动。 信号变的更好了。 但是只有一个问题。 休眠和挂起并唤醒后就不能上网了。 查阅了很多资料,都没有解决。 似乎问题在。 ath5k不再依赖hal特性了。 在一些英文的网站上, 大家干脆在等31版本的内核,据说新的内核有改善。

通过定制内核就可以降低系统散热么?以前就是因为开FF风扇转个不停就没用UBUNTU了,
内核里面有风扇的驱动。 但是如果你的电脑进行大量运算时,CPU温度较高, 风扇就会不停的转。