Next Up Previous Contents Index


11.4 创建定制的核心

由于LINUX2.0.x内核引入了模组化的概念,创建定制的核心与以往有很大的不同。 在过去您要是想存取特定的硬件设备或文件系统,您得重新编译内核以把新增功能 加入其中。对于一些硬件配置,会使核心迅速增大到难以容忍的地步。其实一些功能 也只是偶尔用的着,将期编连入核心对系统资源来说是一种低效率的使用。LINUX 2.0.x以上的内核将支持按需的动态装载特定硬件或文件系统的模组化驱动程序。

有关内核模组的详细信息可以在第9, 章,第 9.6. 节找到

11.4.1 1 创建模组化的内核

只有红帽子LINUX/INTEL和LINUX/SPARC支持模组化内核;红帽子LINIX/ALPHA的 用户必须建立一个单一的系统内核(请查看11.4.3).

为获得模组化内核所带来的强大功能和可扩展性,下面将提供给您这方面的知识。 如果您不想利用模组化的优势,请看第11.4.3节有关创建和安装单一内核的说明。 我们这里假设您已经安装了核心的头文件和源代码,并假设所有的命令均在/usr/src/linux 目录下执行。

重新建立一个核心需要将源代码树置于一种完整和一致的状态。因此,我们推荐您首 先执行命令make mrproper。它将清除目录下所有配置文件和先前生成核心时产生的中 间文件。现在,您需要创建一个配置文件以决定将要生成的核心要包括哪些内容。 根据您的硬件和个人选择不同有三种方法来配置核心。

请注意:为了能够使用kerneld(详情请看第9.6节)和核心模组,您必须在配置时对“kerneld support”和“module version(CONFIG_MODVERSIONS)support”选择Yes.

请注意:如果您是在一台使用Intel兼容CPU芯片(例如由Cyrix, AMD生产的)的机器上建立核心,我们推荐您在“Processor type of”上选择386。

如果您想使用先前按照以上方法创建的配置文件(/usr/src/linux/.config)来建立核心, 那么您就不要执行make mrproper 和 make config命令而直接执行makedep再接着执行 make clean为最后编译来进行文件树的配置。

下一步要讲述源代码的编译,生成最终可以用以boot的核心。下面的方法将是在遇到 不当时最易恢复的方法。如果您对其它的方法感兴趣,可以在Kernel-HOWTO或/usr/src/linux目录下 的Makefile中找到详细的信息。

如果您有一块SCSI卡而且想以模组化的驱动程序访问它,就要建立一个新的initrd映相 文件(请看第11.4.2节; 注意在定制的核心中以模组化方式使用SCSI卡的 驱动程序是有实际的原因的)。

为了防止新建核心中可能出现的错误,应当准备一个冗余的内核以备。将一个核心 包括在LILO的选单中十分简单。您只需将/boot目录下的原来的核心文件重新命名, 把新生成的核心拷贝到/boot下,在/etc/lilo.conf中加入相应的几行信息,再执行/sbin/lilo 就可以了。下面是随红帽子LINUX而带的默认的/etc/lilo.conf:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz
        label=linux
        root=/dev/hda1
        read-only

现在您需要更新/etc/lilo.conf。如果您创建了新的initrd映相,就必须告诉LILO去使用它。 在这个例子中我们在/etc/lilo.conf后面添加了四行以表示新增的可以boot的核心。 我们将/boot/vmlinuz重新命名为/boot/vmlinuz.old并改变其标签为old。 我们同样也为新核心增加了initrd一行:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=100
image=/boot/vmlinuz
        label=linux
        initrd=/boot/initrd
        root=/dev/hda1
        read-only
image=/boot/vmlinuz.old
        label=old
        root=/dev/hda1
        read-only

现在,在系统boot时,当在LILO boot:您按下了[TAB]键,就会列出两项选择:

LILO boot:
linux    old

如要boot新建的核心(linux)就直接敲[ENTER],或等到LILO超时。而如果您要boot 老的核心(old),就需键入old并回车。

下面是一个简单的总结:

您现在可以用新创建的核心boot并注意观察屏幕信息看您的硬件是否被检测到。

11.4.2 创建initrd映相

我们需要一个initrd映相用以在boot时装载SCSI卡的模组化驱动程序。shell脚本文件 /sbin/mkinitrd可以用来创建initrd映相,但要满足以下条件:

带参数执行/sbin/mkinitrd就可以创建新的initrd映相::

        /sbin/mkinitrd /boot/newinitrd-image 2.0.12

/boot/newinitrd-image是新生成映相的文件名,而2.0.12表示您要在initrd中使用该版本核心 的相应的模组驱动程序(位于/lib/modules)(但并非得用与当前核心版本一致的模组 驱动程序)

11.4.3 创建单一的核心

要建立一个单一的核心,基本方法同建立模组化核心,但有几处不同:


Next Up Previous Contents Index