手动安装新内核

[Note]注意

本节中的内容仅适用于 x86 架构。如果您的架构不同,则文件的位置以及要安装的文件都可能有所不同。

内核位于 arch/i386/boot/bzImage。标准内核安装目录是 /boot。您还需要复制 System.map 文件以确保某些程序(比如 top)能够正确工作。建议您将这些文件按照内核版本号命名。假设您内核的版本号是 2.6.8-foo,请键入以下命令:

$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-foo
$ cp System.map /boot/System.map-2.6.8-foo

然后,您需要通知引导程序(GRUBLILO)有新的内核了。注意,Mandrakelinux 的默认引导程序是 LILO

更新 LILO

更新 LILO 最简单的方式是使用 DrakBoot (参见初学者指南中的更改您的引导配置)。不过,您也可以如下手工编辑配置文件:

LILO 的配置文件是 /etc/lilo.conf。标准的 lilo.conf 如下:

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only
other=/dev/fd0
        label="floppy"
        unsafe

文件 lilo.conf 由一个主要小节以及每个操作系统一小节组成。在上述示例中,主要小节包括以下指令:

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw

指令 boot= 指示 LILO 安装引导扇区的位置,在此为第一个 IDE 硬盘的 MBR (主引导记录(Master Boot Record))。如果您想要制作一张 LILO 软盘,您只需将 /dev/hda 替换为 /dev/fd0。指令 prompt 要求 LILO 在启动时显示菜单。设置了时限之后,LILO 将在 5 秒(timeout=50)之后启动默认映像。如果您删除了 timeout 指令,LILO 将一直等候您的输入。

接下来是 linux 小节:

image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only

引导 GNU/Linux 内核的小节开始通常为 image= 指令,它指出了正确的 GNU/Linux 内核的完整路径。同其他小节一样,它也使用 label= 指令指定一个唯一标识符(在此为 linux)。指令 root= 通知 LILO 该内核的根文件系统所在的分区。在您的配置文件中该项可能有所不同。指令 read-only 要求 LILO 在启动时以只读方式挂载根文件系统:如果没有该指令,将会出现一条警告信息。append 一行指定了引导时传递给内核的参数。

然后是软盘引导小节:

other=/dev/fd0
        label="floppy"
        unsafe

实际上,以 other= 开始的小节通知 LILO 启动其他非 GNU/Linux 操作系统:该指令的参数指出该系统引导扇区的位置。在此,它指定从软盘启动。

好,现在可以添加您的新内核了。您可以在主要小节之后的任何位置添加这一小节,不过别把它放到别的小节之中。比如:

image=/boot/vmlinuz-2.6.8-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"

啰嗦一句:请按照您系统的实际情况修改。

以下就是经过修改后的 lilo.conf,并且在其中添加了注释行(以 # 开头的那些行,会被 LILO 忽略):

#
# 主要小节
#
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
# 默认启动新内核:
default="foo"
# 显示启动菜单...
prompt
# ... 并等候 5 秒
timeout=50
#
# 新内核:默认映像
#
image=/boot/vmlinuz-2.6.8-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# 原先的内核
#
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# 软盘启动
#
other=/dev/floppy
        label="floppy"
        unsafe

以上是 lilo.conf 的一个很好的范本。不过请记住,按照您的实际情况修改。

GRUB 不同,在适当地修改了配置文件之后,您必须通知 LILO 更改其启动扇区。

$ lilo
Added foo *
Added linux
Added floppy
$

这样,您就可以按照需要编译任意数量的内核,并添加相应的小节。您只须重新启动您的机器并测试您的新内核。请注意,如果在安装过程中 LILO 显示错误,那就表示它未作任何改变。LILO 仅当没有发现错误时才会更改您的配置。

更新 Grub

显然,您需要保留当前内核的启动选项!最简单的方式是使用 DrakBoot (参见初学者指南中的更改您的引导配置)。不过,您也可以如下手工编辑配置文件:

您需要编辑 /boot/grub/menu.lst 文件。以下是一个安装了 Mandrakelinux 发行版之后修改之前的标准 menu.lst 文件示例:

timeout 5
color black/cyan yellow/cyan
i18n (hd0,4)/boot/grub/messages
keytable (hd0,4)/boot/fr-latin1.klt
default 0

title linux
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5

title failsafe
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5  failsafe

title Windows
root (hd0,0)
makeactive
chainloader  +1

title floppy
root (fd0)
chainloader +1

该文件由两部分组成:包括通用选项的首部(前五行),以及映像部分(其中每一行对应一个不同的 GNU/Linux 内核或其他 OS)。timeout 5 指定 GRUB 加载默认映像(由通用选项部分中 default 0 指定,即上例中的第一个映像)之前需要等候的时间(以秒为单位)。如果有 keytable 指令,则它指定键盘映射的位置。上例中指定了一个法语布局。如果没有该指令,将假定为 QWERTY 键盘。以上所有的 hd(x,y) 是指 BIOS 中第 x 个磁盘的第 y 个分区。

然后就是各个映像。在上例中一共定义了四个映像:linuxfailsafewindowsfloppy

  • linux 小节开头就通知 GRUB 需要加载的内核(kernel hd(0,4)/boot/vmlinuz),接着是需要传递给内核的选项。在上例中,root=/dev/hda5 通知内核根文件系统的位置是 /dev/hda5。实际上,/dev/hda5GRUB 中的 hd(0,4) 指的是一个地方。不过您也可以把根文件系统存放到另一个地方。

  • failsafe 小节同上一个非常相似,只不过它还将向内核传递另一个参数(failsafe)以通知内核进入“单用户(single)”或“恢复(rescue)”模式。

  • Windows 小节通知 GRUB 加载第一个分区的启动扇区,而那很可能包含 Windows® 启动扇区。

  • floppy 小节让您能从系统的软盘驱动器中使用软盘启动,而不论其中安装了什么系统。它可能是 Windows® 的启动盘,甚或一张包含 GNU/Linux 内核的软盘。

[Note]注意

根据您系统上安全级别的不同,上述某些项目可能不存在于您的文件中。

此处,我们需要添加一个新的小节以通知 GRUB 加载新内核。在此例中,我们将其放置于其他项目之前,不过您也可以将其放到其他地方:

title foo
kernel (hd0,4)/boot/vmlinuz-2.6.8-foo root=/dev/hda5

别忘了,要按照您的实际情况修改文件!例子中 GNU/Linux 的根文件系统是在 /dev/hda5,不过它也可以在其他任何地方。

万事俱备。与 LILO 不同,不用再作什么别的了。您只须重新启动您的计算机,然后就会看到您新添加的条目了。从菜单中选中您的新内核,它就会启动。

如果您在编译内核时加入了帧缓冲支持,可能您会需要使用它:在本例中,您需要添加一个指令通知内核它需要在怎样的分辨率下启动。可用模式列表请参见 /usr/src/linux/Documentation/fb/vesafb.txt 文件(仅适用于 VESA 帧缓冲的情形!其他的请参考相应文件)。对 800x600 在 32 位[36]模式,相应的模式序号是 0x315,因此您需要添加如下指令:

vga=0x315

这样,上文提到的条目现在就变成了:

title foo
kernel (hd0,4)/boot/vmlinuz-2.6.8-foo root=/dev/hda5 vga=0x315

更详细的信息请参考 GRUB 的 info 页面(info grub)。



[36] 8 位表示 28 种颜色,即 256 种;16 位表示 216 种颜色,即 6.4 万种,或 65536 种;24 位和 32 位一样,每种颜色由 24 位编码,即 224 种可能的颜色,正好 16M 种,也就是说比 1 千 6 百万种要稍稍多一些。