|
让我们先来查看一下当前/usr/src的内容,注意到有一个linux-2.4的符号链接,指向
一个linux-2.4.7-10(以REDHAT7.2为例)的目录。这就是你所装linux的kernel源代码,
删除这个链接。
现在解压我们下载的源程序文件。如果所下载的是.tar.gz(.tgz)文件,请使用下面
的命令:
#tar -zxvf linux-2.4.18.tar.gz.tar.gz
如果你所下载的是.bz2文件,例如linux-2.4.0test8.tar.bz2,请使用下面的命令
#bzip2 -d linux-2.4.18.tar.bz2
#tar -xvf linux-2.4.18.tar
文件将解压到/usr/src/linux目录中,我们把它稍作修改:
#mv linux linux-2.4.18
#ln -s linux-2.4.18 linux
如果下载的是patch文件,就可以进行patch操作(下面假设patch-2.4.18已经位于
/usr/src目录下了,否则你需要先把该文件拷贝到/usr/src下):
#patch -p0 < patch-2.4.18
六、内核编译
通常要运行的第一个命令是:
#cd /usr/src/linux
#make mrproper
该命令确保源代码目录下没有不正确的.o文件以及文件的互相依赖。由于我们使用刚
下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编
译内核,那么最好要先运行一下这个命令。
确保/usr/include/目录下的asm、linux和scsi等链接是指向要升级的内核源代码的。
它们分别链向源代码目录下的真正的、该计算机体系结构(对于PC机来说,使用的体系结
构是i386)所需要的真正的include子目录。如:asm指向/usr/src/linux/include/asm-i386
等。若没有这些链接,就需要手工创建,按照下面的步骤进行:
# cd /usr/include/
# rm -r asm linux scsi
# ln -s /usr/src/linux/include/asm-i386 asm
# ln -s /usr/src/linux/include/linux linux
# ln -s /usr/src/linux/include/scsi scsi
这是配置非常重要的一部分。删除掉/usr/include下的asm、linux和scsi链接后,再
创建新的链接指向新内核源代码目录下的同名的目录。这些头文件目录包含着保证内核在
系统上正确编译所需要的重要的头文件。现在你应该明白为什么我们上面又在/usr/src下
多余地创建了个名为linux的链接了吧?
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后linux的运行直接相关,
有必要了解一下一些主要的且经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦)
这三个命令中,make xconfig的界面最为友好,如果你可以使用Xwindow,那么就推荐
你使用这个命令,界面如下:
如果你不能使用Xwindow,那么就使用make menuconfig好了。界面虽然比上面一个差
点,总比make config的要好多了,下图为make menuconfig的界面:
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
如果使用的是make xconfig,使用鼠标就可以选择对应的选项。如果使用的是
make menuconfig,则需要使用空格键进行选取。你会发现在每一个选项前都有个括号, 但
有的是中括号有的是尖括号,还有一种圆括号。用空格键选择时可以发现,中括号里要么
是空,要么是*,而尖括号里可以是空,*和M。这表示前者对应的项要么不要,要么
编译到内核里;后者则多一样选择,可以编译成模块。而圆括号的内容是要你在所提供的
几个选项中选择一项。
在编译内核的过程中,最烦杂的事情就是这步配置工作了,很多新手都不清楚到底该
如何选取这些选项。实际上在配置时,大部分选项可以使用其缺省值,只有小部分需要根
据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功
能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能
相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用
的部分功能代码直接编译到内核中。
|