Linuxkernel26内核升级完全配置详解Word下载.docx
《Linuxkernel26内核升级完全配置详解Word下载.docx》由会员分享,可在线阅读,更多相关《Linuxkernel26内核升级完全配置详解Word下载.docx(83页珍藏版)》请在冰豆网上搜索。
采用了双树系统。
一个树是稳定树(stabletree),另一个树是非稳定树(unstabletree)或者开发树(development
tree)。
一些新特性、实验性改进等都将首先在开发树中进行。
如果在开发树中所做的改进也可以应用于稳定树,那么在开发
树中经过测试以后,在稳定树中将进行相同的改进。
一旦开发树经过了足够的发展,开发树就会成为新的稳定树。
开发数就
体现在源程序的版本号中;
源程序版本号的形式为x.y.z:
对于稳定树来说,y是偶数;
对于开发树来说,y比相应的稳定
树大一(因此,是奇数)。
到目前为止,稳定树的最高版本是2.6.5;
开发树的最新版本是2.6.12。
下载内核版本请访问
http:
//www.kernel.org/
三、为什么重新编译内核
Linux作为一个自由软件,在广大爱好者的支持下,内核版本不细隆P碌哪诤诵薅┝司赡诤说腷ug,并增加了许多
新的特性。
如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中
发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
为了正确的合理地设置内核编译配置选项,从而只编译系统需要的功能的代码,一般主要有下面四个考虑:
l自己定制编译的内核运行更快(具有更少的代码)
l系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中)
l不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞
l将某种功能编译为模块方式会比编译到内核内的方式速度要慢一些
四、内核编译模式
要增加对某部分功能的支持,比如网络之类,可以把相应部分编译到内核中(build-in),也可以把该部分编译成模
块(module),动态调用。
如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度
快,机器一启动,你就可以使用这部分功能了;
缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,
这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。
如果编译成模块,就会生成对应的.o
文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。
五、新版本内核的获取和更新
Linux内核版本发布的官方网站是http:
//www.kernel.org新版本的内核的发布有两种形式,一种是full/Source
版本,另外一种是patch文件,即补丁。
完整的内核版本比较大,一般是tar.gz或者是.bz2文件,二者分别是使用gzip
或者bzip2进行压缩的文件,使用时需要解压缩。
patch文件则比较小,一般只有几十K到几百K,但是patch文件是针对
于特定的版本的,你需要找到自己对应的版本才能使用。
编译内核需要root权限,以下操作都假定你是root用户。
请把你需要升级的内核拷贝到/usr/src/下(下文中以
2.6.5的内核的linux-2.6.5.tar.gz为例),命令为
#cplinux-2.6.5.tar.gz/usr/src
让我们先来查看一下当前/usr/src的内容,注意到有一个linux-2.4的符号链接,指向一个linux-2.4.7-10(以
REDHAT7.2为例)的目录。
这就是你所装linux的kernel源代码,删除这个链接。
现在解压我们下载的源程序文件。
如果所下载的是.tar.gz(.tgz)文件,请使用下面的命令:
#tar-zxvflinux-2.6.5.tar.gz.tar.gz
如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令
#bzip2-dlinux-2.6.5.tar.bz2
#tar-xvflinux-2.6.5.tar
文件将解压到/usr/src/linux目录中,我们把它稍作修改:
#mvlinuxlinux-2.6.5
#ln-slinux-2.6.5linux
如果下载的是patch文件,就可以进行patch操作(下面假设patch-2.6.5已经位于/usr/src目录下了,否则你需
要先把该文件拷贝到/usr/src下):
#patch-p0<
patch-2.6.5
六、内核编译
通常要运行的第一个命令是:
#cd/usr/src/linux
#makemrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
由于我们使用刚下载的完整的源程序包进行编译,
所以本步可以省略。
而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令。
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。
它们分别链向源代码目录下的
真正的、该计算机体系结构(对于PC机来说,使用的体系结构是i386)所需要的真正的include子目录。
如:
asm指向/
usr/src/linux/include/asm-i386等。
若没有这些链接,就需要手工创建,按照下面的步骤进行:
#cd/usr/include/
#rm-rasmlinuxscsi
#ln-s/usr/src/linux/include/asm-i386asm
#ln-s/usr/src/linux/include/linuxlinux
#ln-s/usr/src/linux/include/scsiscsi
这是配置非常重要的一部分。
删除掉/usr/include下的asm、linux和scsi链接后,再创建新的链接指向新内核源代码
目录下的同名的目录。
这些头文件目录包含着保证内核在系统上正确编译所需要的重要的头文件。
现在你应该明白为什么我
们上面又在/usr/src下"
多余"
地创建了个名为linux的链接了吧?
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且
经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#makeconfig(基于文本的最为传统的配置界面,不推荐使用)
#makemenuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#makexconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
这三个命令中,makexconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令,界面如
下:
如果你不能使用Xwindow,那么就使用makemenuconfig好了。
界面虽然比上面一个差点,总比makeconfig的
要好多了,下图为makemenuconfig的界面:
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
如果使用的是makexconfig,使用鼠标就可以选择对应的选项。
如果使用的是makemenuconfig,则需要使用空
格键进行选取。
你会发现在每一个选项前都有个括号,但有的是中括号有的是尖括号,还有一种圆括号。
用空格键选择时可
以发现,中括号里要么是空,要么是"
*"
,而尖括号里可以是空,"
和"
M"
这表示前者对应的项要么不要,要么编译到内
核里;
后者则多一样选择,可以编译成模块。
而圆括号的内容是要你在所提供的几个选项中选择一项。
在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该如何选取这些选项。
实际上在配置
时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。
选择的原则是将与内核其它部分关系较远且
不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境
改变时对内核的影响;
不需要的功能就不要选;
与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。
配置完后,存盘退出,当然你也可以把现在的配置文件保存起来,这样下次再配置的时候就省力气了。
接下来是编译,输入以下命令。
#makedep
#makeclean
#makebzImage或makezImage
#makemodules
#makemodules_install
#depmod-a
第一个命令makedep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编
译而那些不需要;
第二命令makeclean完成删除前面步骤留下的文件,以避免出现一些错误;
makezImage和make
bzImage则实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,它们的区别在于使用
makebzImage可以生成大一点的内核。
建议大家使用makebzImage命令。
后面三个命令只有在你进行配置的过程中,在回答Enableloadablemodulesupport(CONFIG_MODULES)时
选了"
Yes"
才是必要的,makemodules和makemodules_install分别生成相应的模块和把模块拷贝到需要的目录中。
严格说来,depmod-a命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用
modprobe命令加载模块时就能正确地定位模块。
更新
经过以上的步骤,我们终于得到了新版本的内核。
为了能够使用新版本的内核,我们还需要做一些改动:
#cp/usr/src/linux/System.map/boot/System.map-2.6.5
#cp/usr/src/linux/arch/i386/bzImage/boot/vmlinuz-2.6.5
以上这两个文件是我们刚才编译时新生成的。
下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内
核的文件:
#cd/boot;
rm-fSystem.mapvmlinuz
#ln-svmlinuz-2.6.5vmlinuz
#ln-sSystem.map-2.6.5System.map
七、修改启动管理器
如果用LILO,修改/etc/lilo.conf,添加以下项:
image=/boot/vmlinuz-2.6.5
label=linux240
read-only
root=/dev/hda2
其中root=/dev/hda2一行要根据需要自行加以修改。
运行:
#/sbin/lilo-v
确认对/etc/lilo.conf的编辑无误,现在重新启动系统:
#shutdown-rnow
如果是用Grub启动管理器,则添加如下几项即可。
titleRedHatLinux(2.6.5)
root(hd0,0)
kernel/vmlinuz-2.6.5roroot=/dev/hda2
或者也可以这么写
titleGentooLinux2005.0(2.6.5)
kernel(hd0,0)/kernel-2.6.5roroot=/dev/hda2
Grub不需再次调用命令,自动生效。
重启以后就可以用新内核了。
从这里开始进入内核完全配置选项
1Codematurityleveloptions--->
应该选择
[*]Promptfordevelopmentand/orincompletecode/drivers
默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.你应该选择它,因为有许多设备可
能必需选择这个选项才能进行配置,实际上它是安全的。
[*]Selectonlydriversexpectedtocompilecleanly应该选择
选择这个选项你将不会看到一些已知的存在问题的驱动程序选项,默认的情况下也是选择的。
如果你有设备没有找到驱动选
项,你可以将这一项去掉,或许就可以找到相关驱动了,不过它可能是有BUG的。
[*]Selectonlydriversthatdon'
tneedcompile-timeexternalfirmware应
该选择
如果你不需要在内核对一些外部设备的固件作map支持就选择它,这也是默认选项。
2Generalsetup--->
[*]Supportforpagingofanonymousmemory(swap)应该选择
这个选项将使你的内核支持虚拟内存,也就是让你的计算机好象拥有比实际内存更多多的内存空间用来执行很大的程序。
默认是选择的。
[*]SystemVIPC应该选择
为进程提供通信机制,这将使系统中各进程间有交换信息与保持同步的能力。
有些程序只有在选Y的情况下才能运行,所
以不用考虑,这里一定要选。
[*]POSIXMessageQueues应该选择
[*]BSDProcessAccounting应该选择
这里选择Y将会让内核为用户层的进程建立一个帐目(进程通过一个特殊的系统调用来通知内核),当程序退出时内核会将
进程的相关信息记录到帐目文件中,主要包括进程的创建时间、创建者,内存占用等信息。
如果你需要就Y吧:
)
[*]Sysctlsupport应该选择
这将提供一个接口让你可以动态的更改一些核心参数与变量,而不需要重新启动系统。
打开这个选项将会增加内核的体积至
少8KB。
如果你的内核仅用制作安装与恢复系统系统盘那么可以不选,以减少对内存的占用。
[*]Auditingsupport审核的,一般不用选择了
[*]Enablesystem-callauditingsupport不用选择了
(17)Kernellogbuffersize(16=>
64KB,17=>
128KB)不用选择了
[*]Supportforhot-pluggabledevices支持热插拔的,最好选择
[*]KernelUserspaceEvents用户空间时间,可以不用选择
[*]Kernel.configsupport不用选择
这会把内核的配置信息与相关的文档说明编译进内核中,以后可以使用一些工具来提取它用来重新构建内核,一般不用选
它。
[*]Enableaccessto.configthrough/proc/config.gz不用选择
这个和上面的那个一样把说明文档放在/proc中,所以可以不用选它
[*]Configurestandardkernelfeatures(forsmallsystems)--->
为小系统设计的,不用选择了吧
---Configurestandardkernelfeatures(forsmallsystems)不用选择
[*]Loadallsymbolsfordebugging/kksymoops(NEW)不用选择
[*]Enablefutexsupport(NEW)不用选择
Futex(fastuserspacemutex)不用选择
[*]Enableeventpollsupport(NEW)不用选择
[*]No-opI/Oscheduler(NEW)不用选择
[*]AnticipatoryI/Oscheduler(NEW)不用选择
[*]DeadlineI/Oscheduler(NEW)不用选择
[*]CFQI/Oscheduler(NEW)不用选择
[*]Optimizeforsize内核尺寸最优化,一般不用选择吧(如果是为小系统设计的,就不用选择了)
3Loadablemodulesupport--->
[*]Enableloadablemodulesupport应该选择
这个选项可以让你的内核支持模块,模块是什么呢?
模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从
而为内核增加一些特性或是对某种硬件进行支持。
一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。
在运
行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。
一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一
些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。
(当然还有一些
变通的方法,我以后会提到)
[*]Moduleunloading应该选择
这个选项可以让你卸载不再使用的模块,如果不选的话你将不能卸载任何模块(有些模块一旦加载就不能卸载,不管是否选
择了这个选项)。
不选择这个选项会让你的内核体积减小一点
[*]Forcedmoduleunloading这个有点危险,可能导致内核不能启动,不要选择了
[*]Moduleversioningsupport(EXPERIMENTAL)不用选择
这个选项将让你可以使用其它版本内核中编译的模块,不过并不可靠,所以一般我们不选择它
[*]Sourcechecksumforallmodules可以选择
[*]Automatickernelmoduleloading应该选择
一般情况下,如果我们的内核在某些任务中要使用一些被编译为模块的驱动或特性时,我们要先使用modprobe命令来加
载它,内核才能使用。
不过,如果你选择了这个选项,在内核需要一些模块时它可以自动调用modprobe命令来加载需要
的模块,这是个很棒的特性,当然要选Y喽:
4Processortypeandfeatures--->
SubarchitectureType(PC-compatible)--->
这是一个比较新的特性,主要的目的是使Linux可以支持多种PC标准,一般我们使用的PC机是遵循所谓IBM兼容结构
(pc/at)。
这个选项可以让你选择一些其它架构。
我们一般选择PC-compatible就可以了。
(X)PC-compatible
()AMDElan
()Voyager(NCR)
()NUMAQ(IBM/Sequent)
()Summit/EXA(IBMx440)
()Supportforothersub-archSMPsystemswithmorethan8CPUs
()SGI320/540(VisualWorkstation)
()Genericarchitecture(Summit,bigsmp,default)
()SupportforUnisysES7000IA32series
Processorfamily(Pentium-Pro)--->
这个就不用说了吧,你是什么cpu就选什么了
()386
()486
()586/K5/5x86/6x86/6x86MX
()Pentium-Classic
()Pentium-MMX
(X)Pentium-Pro
()Pentium-II/Celeron(pre-Coppermine)
()Pentium-III/Celeron(Coppermine)/Pentium-IIIXeon
()PentiumM
()Pentium-4/Celeron(P4-based)/Pentium-4M/Xeon
()K6/K6-II/K6-III
()Athlon/Duron/K7
()Opteron/Athlon64/Hammer/K8
()Crusoe
()Winchip-C6
()Winchip-2
()Winchip-2A/Winchip-3
()CyrixIII/VIA-C3
()VIAC3-2(Nehemiah)
[*]Genericx86support不用选择
这个选项提供了对X86系列CPU最大的兼容性,用来支持一些很少见的x86体系的CPU,它可能会降低一些系统性能。
所以如果你的CPU能够在上面的列表中找到就不要选这个吧。
[*]4GBkernel-spaceand4GBuser-spacevirtualmemorysupport应该选择
[*]HPETTimerSupport应该选择
这也是一个新的特性,HPET是intel制定的新的用以代替传统的8254(PIT)中断定时器与RTC的定时器,全称叫作高
精度事件定时器。
如果你有一台较新的机器就选它吧,一般它是一个安全的选项,即使你的硬件不支持HPET也不会造成
问题,因为它会自动用8254替换。
[*]Symmetricmulti-processingsupport不用选择
这个也不用多讲了吧,如果你使用多处理器系统就选吧,如果你和我一样使用一个单CPU系统还是把它请出去吧。
(8)MaximumnumberofCPUs(2-255)