如何更新Linux系统的内核
本文面向Linux新手,尽可能详细的讲解如何更新Linux系统的内核
一 获取新内核的源码包
我们想要更新系统内核,就先要有新内核的源码包,你可以登录 [] 来下载你所需要的Kernel源码包。
在这里,您会发现内核源代码文件被标为 ar.gz 和 ar.bz2 的形式,这些文件是 Linux 内核源代码 tar 包。您还会看到标为 和 bz2 的文件,这些文件是补丁程序,用来更新完整内核源代码的较早版本。如果要编译新的内核,则要下载以“linux“开头的文件。
二 解开内核源码包
先以root身份登录系统,然后将源码包文件复制到/usr/src目录下,在这个目录中可能已经有了一个 linux 子目录,如果是这样的话,我们应该先给这个子目录改个名字,用如下命令
mv linux linux-old
也许你的/usr/src目录下并没有linux子目录,而是一个名为linux符号链接,这时只需把这个链接删除就可以了,如下
rm -f linux
进行完上面的操作,就可以开始解包了。我们下载得到的一般有两种 tar 包,分别以 gz 和 bz2 为文件名结尾(只用下载其中之一)。两种文件的解压方法如下
tar ar.gz(用于 gz 文件)
tar ar.bz2(用于 bz2 文件,有时需要使用下面的命令
ar.bz2 | bzip2 -d | tar -xvf)
这样解包操作就完成了,我们会得到一个新的linux文件夹。
如果你还下载了相应的patc件,此时你就可以给内核打补丁了(补丁文件同样要放在/usr/src目录下,并且也要解压),方法如下
patch -p0 <
三 配置内核
编译内核以前,需要先配置它。用配置来精确控制在新内核中启用(禁用)哪些内核特性。还可以控制将哪些部分编译到内核二进制映象(将在引导时装入)中,而将哪些部分编译到“按需装入”的内核模块文件中。
老式的配置内核的方法是非常痛苦的,包括进入 /usr/src/linux 并输入 make config。尽管 make config 仍然有效,但最好不要尝试用这种方法配置内核,除非您喜欢在命令行回答数百个 yes/no 问题。
(小知识:所有较新的 Linux 内核都支持内核模块。它们是内核的组成部分,驻留在磁盘上相对较小的二进制文件中。每当内核需要一个特定模块的功能时,就会从磁盘装入这个特定模块并自动将它与自身结合,这样便动态扩展了内核的能力。
如果装入的内核模块的特性在几分钟内未被使用,则内核会自动将它与内核其余部分分离并从内存中卸装它,这被称为自动清除(autocleaning)。若没有内核模块,则需要确保运行的内核完全包含所有可能需要的功能。若没有模块,则
需要构建一个全新内核,以将新的重要功能添加到其中。
通常,用户构建一个包含所有基本功能的内核映象,然后再构建一组模块,这些模块对应着用户未来
可能需要的功能。以后要使用时,则按照需要,将适当的模块装入内核。值得一提的是,不能将所有东西都放入模块中。因为模块存储于磁盘上,可引导的内核映象需要拥有对磁盘控制器、驱动器和根文件系统的内编译(compiled-in)支持。如果没有将这些基本组件编译到内核映象中,也就是说,如果试图将它们作为模块编译,那么内核将没有从磁盘装入这些模块所必需的能力,这会产生一个很令人讨厌的问题,就是不能引导系统的内核!)
(小提示:如果你以前曾经编译过源码包,那么当你再次编译这些源码包时,最好先运行
make mrproper
该命令确保源代码目录下(/usr/src/linux)没有不正确的.o文件(即object文件,编译c语言时生成的,目的是下一步编译成可执行码时link之用)以及文件的互相依赖。如果我们使用的是刚下载的源程序包,本步可以省略。而如果你多次使用这些源程序编译内核,那么最好先运行一下这个命令。)
(小提示2:当你使用同一内核源码多次编译后,再运行
uname -a
时,会发现系统记录了你编译内核的次数,表达方式是在 # 号后面跟了一个数字,如果我们想将它改为一该怎么办呢?你可以在最后一次编译内核前将源码目录下的 .version 文件删除。那它又是如何记
录编译次数的呢?这个你可以看一下源码目录中scripts子目录下的mkversion文件中的内容。
本方法应当感谢CU论坛的joint和platinum两位大侠。)
好在现在有了新的配置方法,不用再输入 make config ,新的方法是输入 make menuconfig 或 make xconfig 来配置内核。如果输入 make menuconfig ,则会得到一个基于控制台的彩菜单系统,可以用它配置内核。如果输入 make xconfig ,则会得到一个基于 X 的 GUI,可以用它配置各种内核选项。
使用 make menuconfig 时,左边有< >的选项可以被编译为模块。当选项被突出显示时,按空格键可以进行设置,分别为:取消该选项“< >”、将该选项编译到内核映象中“<*>”和选择编译为模块“<M>”。也可以按“y”键启用选项,按“n”禁用该选项或按“m”键以在可能的情况下将它编译为模块。幸运的是,大多数内核配置选项都有详细的帮助信息,可以通过输入 h 查看这些信息。
好了,现在进入整个更新内核过程的关键环节-配置内核
实际在配置时,大部分选项可以使用缺省值,只有小部分需要根据不同情况进行选择。选择的原则是将与内核关系较远且不经常使用的功能编译为可加载模
块,不需要的功能就不选;与内核关系紧密且经常使用的功能直接编译到内核中。(你也许可以参考/
boot目录中的一个config文本文件,但是这个建议我拿不准,还望各位大侠指点一下,可不可以按照这个文件中的内容来配置新内核)
下面让我们对常用的选项分别加以介绍。
1.Code maturity level options
代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers
linux内核文件放在哪如果你要试验现在仍处于实验阶段的功能,比如khttpd、IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。
2.Loadable module support
对模块的支持。这里面有三项:
Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项是必选的。
Set version information on all module symbols:可以不选它。
Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。
3.Processor type and features
CPU类型,选项很多,不一一介绍了,有关的几个如下:
Processor family:根据你自己的情况选择CPU类型。
High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。
Math emulation:协处理器仿真,协处理器是在386时代的宠儿,现在早已不用了。
MTTR support:通常应该启用,因为它可以在现代系统上的 X 中产生更好的性能。
Symmetric multi-processing support:对称多处理支持。除非你有多个CPU,否则就不用选了。
4.General setup
这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项:
Networking support:网络支持。必须,没有网卡也建议你选上。
PCI support:PCI支持。如果使用了PCI的卡,当然必选。
PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any吧。
Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。
PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。
System V IPC / BSD Process Accounting / Sysctl support:
以上三项是有关进程处理/IPC调用的,主要就是System V和BSD两种风格。如果你不是使用BSD,就按照缺省吧。(有的文章建议启用)
Power Management support:电源管理支持。
Advanced Power Management BIOS support:高级电源管理BIOD支持。
还应启用 Kernel support for ELF binaries 将它构建到内核中,而不是构建为模块。建议启用a.out 和 MISC 二进制选项,不过将它们构建为内核模块通常更有意义。
5.Memory Technology Device(MTD)
MTD设备支持。可不选。
6.Parallel port support
并口支持。如果不打算使用并口,就别选了。拥有并口设备(打印机)的人可能会对 Parallel port support 感
兴趣。请注意:为了获得完整的打印机支持,除了启用此处适当的并行端口支持以外,还必须启用 Character devices 节下的 Parallel printer support。
7.Plug and Play configuration
即插即用支持。虽然Linux对即插即用目前支持的不如Windows好,但是还是选上吧,这样你可以体验一下Linux下即插即用的感觉。
8.Block devices
块设备支持。这个就得针对自己的情况来选了,简单说明一下吧:
Normal PC floppy disk support:普通PC软盘支持。
Mulex DAC960/DAC1100 PCI RAID Controller support:RAID镜像用的。
Network block device support:网络块设备支持。如果想访问网上邻居的东西,就选上。
Logical volume manager(LVM)support:逻辑卷管理支持。
Multiple devices driver support:多设备驱动支持。
RAM disk support:RAM盘支持。
9.Networking options
这里配置的是网络协议。如果你对网络协议有所了解的话,应该可以看懂的。如果懒得看,使用缺省选项(肯定要选中TCP/IP networking哦)就可以了。让我们看看,TCP/IP、ATM、IPX、DECnet、Appletalk……支持的协议好多哦,IPv6也支持了,Qos and/or fair queueing(服务质量公平调度)也支持了,还有kHTTPd,不过这些都还在实验阶段。
10.Telephony Support
Linux下可以支持电话卡,这样你就可以在IP上使用普通的电话提供语音服务.详细情况请看help.
11.ATA/IDE/MFM/RLL support
这是有关各种接口的硬盘/光驱/磁带/软盘支持的,内容太多了,使用缺省的选项吧,如果你使用了比较特殊的设备,比如PCMCIA等,就到里面自己相应的选项吧。(如果系统有 IDE 磁盘,则请启用 Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support 、Include IDE/ATA-2 DISK support 以及适合特殊主板的芯片组(构建到内核中,而不是构建为模块,这样系统才能引导)。如果有 IDE CD-ROM,则请启用 Include IDE/ATAPI CD-ROM support。注:若没有特定芯片组支持,IDE 仍可工作,但可能无法利用特别的主板的所有性能增强功能。还有,对几乎所有的系统,都极力推荐 Enable PCI DMA by default if available 选项。若没有缺省地启用 DMA(直接内存存取),则 IDE 外围设备将以 PIO 方式运行,并且性能可能比正常情况下慢 15 倍!通过以 root 用户身份在 shell 提示符上输入 hdparm -d 1 /dev/hdx,可以验证是否在特别的磁盘上启用了 DMA,其中 /dev/hdx 是与要启用 DMA 的磁盘对应的块操作特殊设备。)
12.SCSI support
SCSI设备的支持。如果有基于 SCSI 的系统,请根据需要启用 SCSI support、SCSI disk support、SCSI CD-ROM support 和 SCSI tape support。如果从 SCSI 磁盘引导,则要确保将 SCSI support 和 SCSI disk support 都内编译到内核中。为使 SCSI 正确地工作,还需执行额外的步骤:进入 SCS
I low-level drivers 子类别,启用对特别的 SCSI 卡的支持并将其配置为直接编译到内核中。
13.IEEE 1394(FireWire)support
是要Fireware硬件来提高串行总线的性能。
14.I2O device support
在智能Input/Output(I2O)体系接口中使用,用缺省吧.
15.Network device support
网络设备支持。上面选好协议了,现在该选设备了,可想而知,内容肯定多得很。还好,里面大概分类了,有ARCnet设备、 Ethernet(10 or 100 Mbit)、Ethernet(1000Mbit)、Wireless LAN(non-hamradio)、Token Ring device、Wan interfaces、PCMCIA network device support几大类。还是10/100M的以太网设备,为了免得麻烦,编译到内核里面好了。耐心点,一般说来你都能到自己用的网卡。如果没有,你只好自己到厂商那里去要驱动了。
16.Amateur Radio support
不懂,应该是配置无线广播的吧,没有,不要了。
17.IrDA(infrared)support
这个要红外支持,免了。
18.ISDN subsystem
如果你使用ISDN上网,这个就必不可少了。
19.Old CD-ROM drivers(not SCSI、not IDE)
专门为非SCSI/IDE口的光驱做的,但谁还在用那么老的东东啊。
20.Input Core Support
这个选项很重要,除了joystick(游戏遥控杆)建议都选"m"。
21.Character devices
这是各种内核驱动程序的大杂烩。请确保启用 Virtual terminal 和 Support for console on virtual terminal,内核引导后出现的标准的基于文本的控制台需要它们。很有可能还需要启用
21.Character devices
这是各种内核驱动程序的大杂烩。请确保启用 Virtual terminal 和 Support for console on virtual terminal,内核引导后出现的标准的基于文本的控制台需要它们。很有可能还需要启用 Unix98 PTY support。如果您希望使用并行打印机,请记住还要启用 Parallel printer support。其它所有选项通常是可选的。推荐采用“Enhanced real-time clock support”;通常需要 /dev/agpgart (AGP support) 和 Direct Rendering Manager 以利用 X 下丰富的 Linux 3D 加速功能(当您有ATI Rage 128、ATI Radeon 或 Matrox 等显卡时)。要想使 X 在加速方式中工作,除了简单地启用这些选项外还需要额外的配置步骤。
22.Multimedia devices
为捕捉audio/video用。
23.File systems
文件系统。内容太多了,建议在缺省选项的基础上进行修改。
介绍以下几项:
Quota support:Quota可以限制每个用户可以使用的硬盘空间的上限,在多用户共同使用一台主机的情况中十分有效。
DOS FAT fs support:DOS FAT文件格式的支持,可以支持FAT16、FAT32。
ISO 9660 CD-ROM file system support:光盘使用的就是ISO 9660的文件格式。
NTFS file system support:ntfs是NT使用的文件格式,你要在linux下mount ntfs分区的话,就要选上它。记得在mount的时候,只有iocharset=cp936可以
加上,codepage=936不能加。
/proc file system support:/proc文件系统是Linux提供给用户和系统进行交互的通道,建议选上,否则有些功能没法正确执行。
还有另外三个大类都规到这儿了:Network File Systems(网络文件系统)、Partition Types(分区类型)、Native Language Support(本地语言支持)。值得一提的是Network File Systems里面的两种:NFS和SMB分别是Linux和Windows相互以网络邻居的形式访问对方所使用的文件系统,根据需要加以选择。
24.Console drivers
控制台驱动。一般使用VGA text console就可以了,标准的80*25的文本控制台。
25.Sound
声卡驱动。
26.USB supprot
USB支持。很多USB设备,比如鼠标、调制解调器、打印机、扫描仪等,在Linux都可以得到支持,根据需要自行选择。
至此,我们的配置工作就基本完成了。另外别忘了将你的配置保存到一个文件里,否则下次编译时又要重新配置。
四 编译和安装
现在就可以开始编译我们自己的内核了,不过这是一个比较耗时的过程,你可以准备一本自己喜欢的书或者一些好听的MP3来打发这些时间。
1.make dep
在编译内核之前,需要生成相关信息。在 /usr/src/linux 中通过运行 make dep 可以做到这一点。其任
务是读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译哪些不需要。
2.make clean
作用是删除前面步骤留下的文件,以避免出现一些错误。这步不是必需的。
3.make zImage / make bzImage
这两个操作都可以实现完全编译内核,二者生成的内核都是使用gzip压缩的,使用其中之一就可以了,它们的区别在于 make bzImage 可以生成小一点的内核(因为其压缩率较高),而使用 make zImage 编译内核时有可能会出现system too big的错误提示。所以建议使用 make bzImage 命令。
编译完成后,新的内核也许会存放在/usr/src/linux/arch/i386/boot目录中。
4.make modules / make modules_install
这两个命令只有在前面的配置过程中回答 Enable loadable module support (CONFIG_MODULES) 时选了"Yes"才是必要的,但是即使在配置内核时没有启用任何模块,最好也不要省略这一步,养成编译 bzImage 后立即编译模块的习惯很有益处。make modules和make modules_install分别生成相应的模
块并把模块拷贝到需要的目录中。(注意,这两步都是必需的)如果确实无模块编译,这个步骤会一闪而过。 编译完的模块你可以在/usr/lib/<kernelversion>目录中看到他们。
5.depmod -a
这个命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
编译工作到此结束。
五 为用新内核引导系统作

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。