Linux编译内核
-
准备工作
通常要运行的第一个命令是:
#cd/usr/src/linux;makemrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖
配置
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#makeconfig(基于文本的最为传统的配置界面,不推荐使用)
#makemenuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#makexconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#makeoldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
这三个命令中,makexconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐你使用这个命令.
在繁杂的配置工作完成以后,下面你就可以自己到杯茶耐心等候了。与编译有关的命令有如下几个:
#makedep
#makeclean
#makezImage
#makebzImage
#makemodules
#makemodules_install
#depmod-a
第一个命令makedep实际上读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要;
第二命令makeclean完成删除前面步骤留下的文件,以避免出现一些错误;
第三个命令makezImage和第四个命令makebzImage实现完全编译内核,二者生成的内核都是使用gzip压缩的,只要使用一个就够了,
它们的区别在于使用makebzImage可以生成大一点的内核,比如在编译2.4.0版本的内核时如果使用makezImage命令,那么就会出现systemtoobig的错误提示。
建议大家使用makebzImage命令。
后面三个命令只有在你进行配置的过程中,在回答Enableloadablemodulesupport(CONFIG_MODULES)时选了"Yes"才是必要的,
makemodules和makemodules_install分别生成相应的模块和把模块拷贝到需要的目录中。
严格说来,第七个命令和编译过程并没有关系,它是生成模块间的依赖关系,这样你启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块。
更新
经过以上的步骤,我们终于得到了新版本的内核。为了能够使用新版本的内核,我们还需要做一些改动:
#cp/usr/src/linux/System.map/boot/System.map-2.4.0test8
#cp/usr/src/linux/arch/i386/bzImage/boot/vmlinuz-2.4.0test8
以上这两个文件是我们刚才编译时新生成的。下面修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件:
#cd/boot;rm-fSystem.mapvmlinuz
#ln-svmlinuz-2.4.0test8vmlinuz
#ln-sSystem.map-2.4.0test8System.map
#shutdown-rnow
正常启动.您的机器现在就使用你的新内核了.
下面是RH推荐的编译方式.注意editMakefile
老话新说,RedHat公司推荐编译内核方法
本文部分取自于RH300(RHCERapidTrackCourse)课本.
本文假定你用的是Redhat7.2,用grub管理启动.准备编译7.2自带的内核
cd/usr/src/linux-2.4
makemrproper
editMakefile文件
把EXTRAVERSION=改成有你特色的文字,比如:
EXTRAVERSION=-10me
makemenuconfigormakexconfig
makedep
makebzImage
makemodules
makemodules_install
cpSystem.map/boot/System.map-2.4.7-10me
cparch/i386/boot/bzImage/boot/vmlinuz-2.4.7-10me
new-kernel-pkg--install--mkinitrd--depmod2.4.7-10me