一、配置
1、配置工具
在对内核进行配置前,需要运行命令“make clean | make mrproper”清除已经被编译好的可执行文件,并检查源代码树的完整性。
Linux提供了以下四种配置内核的工具,需要在源代码目录的顶层运行下列命令之一。
(1)make config:按照顺序依次询问所有的配置选项。
(2)make oldconfig:使用.config文件作为配置文件,仅仅询问在其中没有被配置的选项。一般用来升级内核到最新版本。
(3)make menuconfig:使用一个基于文本的菜单来提供配置帮助。这是使用最多的方式,但需要ncurses库的支持。
(4)make xconfig/gconfig:使用X-Windows界面菜单来提供配置帮助。前者需要qt库的支持,后者需要gtk库的支持。
在完成配置后,会在源代码目录顶层生成一个.config文件,其中包含了所有的配置选项。此外,还会在源代码的include/linux目录下生成一个autoconf.h文件,其中使用“CONFIG_*”定义了需要被C预处理器包含的选项。
2、提示
(1)总是打开“Prompt for development ... drivers.”选项。
(2)从2.6.8版开始,可以在“Local version - append to kernel release”处添加用来个性化内核的标识。对老版内核,则需要修改Makefile文件中的EXTRAVERSION项。
(3)关闭模块版本(module versioning);打开模块装载器、内核模块和模块卸载器。
(4)关闭不必要的选项,仅启用那些必要的项。
(5)确保选择了正确的CPU类型(/proc/cpuinfo)。
(6)找出已安装的PCI设备(lspci -v)。
(7)查看当前内核编译了那些选项(dmesg)。
(8)对于Kernel Hacking项,则打开除“Use 4Kb for kernel stacks instead of 8Kb”外的所有选项。如果机器性能不够,则还应该关闭“Debug memory allocations”选项。
二、编译
在配置好内核后,要进行的工作是对其进行编译,需要运行的命令如下:
(1)make -j[jobs] bzImage
这里,“-j”选项表明在Makefile中定义的命令被同时执行的条数。由于编译需要首先从磁盘读入源代码,故最好是在一个处理器上同时执行两条命令。如果在编译时发生错误,则最好使用单线程重新编译,以便更好的定位错误。编译好的内核模块会被放置在源代码的arch/i386/boot目录下,名为bzImage。
(2)make modules --> make modules_install
如果启用了模块,则应该使用这两条命令编译并安装模块。在安装新模块前,最好首先备份现用模块(命令为mv /lib/modules/'uname -r' /lib/modules/'uname -r'.bak)。编译好的模块会被安装在/lib/modules/[version]目录下([version]可以在include/linux/version.h文件中找到)。
如果仅仅修改了某个模块的源代码,则不必使用上述两条命令编译和安装全部的模块。例如,如果仅仅改变了文件drivers/char/foo.c,则可以在drivers/char目录下使用命令“make -C [源代码顶层目录] SUBDIRS=$PWD modules”编译该目录下的文件,并自动重编译所有必须的文件,然后使用命令“insmod foo.ko”来安装该模块即可(在编译和安装模块前需要使用命令“rmmod foo.ko”命令来移除已安装的模块)。
三、使用新内核引导
注意:至少保留一个可以使用和启动系统的Boot Loader和内核,以便在必要时进行恢复。
(1)使用“make install”命令安装内核到/boot目录下。
(2)修改/etc/grub.conf文件(使用GRUB进行引导)。该文件中,描述引导的选项的部分格式如下:
title Linux
root(hd0,0)
kernel /vmlinuz ro root=/dev/hda3
initrd /initrd.img
其中,title项指定在选择系统时显示的菜单项;root项指定/boot目录所在的硬盘编号及分区编号;kernel项指定内核的位置并提供相应选项,注意其路径是相对于root指定的根目录的路径而言的;initrd项是可选的,用来在挂接根文件系统前加载一些(通常只被特定发行版所识别的)内核模块。
cxqcxq0177 于 2006-12-11 16:52:45发表:
下下来,保存,以后学习
niuqian 于 2006-12-10 18:35:43发表:
FC6的引导信息在/boot/grub/grub.conf里面吧