linux启动时怎么选择新旧内核

linux启动时怎么选择新旧内核,第1张

已安装内核的新版本(例如,实现 SMP 支持),那不需要下载任何代码 -- 跳过此部分继续下一屏。

您可以在 上找到内核代码。当您进入到那后,您将发现内核的源代码按内核版本(v2.2、v2.3 等),被组织到多个不同的目录中。在每个目录中,您将发现文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。这些就是 Linux 内核的源代码。您也将看到冠以 "patch-x.y.z.gz" 和 "patch-x.y.z.bz2" 的文件。这些是用来更新前面完整的内核源代码的补丁包。如果您希望编译一个新的内核版本,您将需要下载这些"linux"文件其中之一。

内核解包

如果您已从 kernel.org 下载一个新的内核,现在是要将其解包时候了。首先,cd /usr/src。如果这里有一个存在的"linux"目录,将其改名为"linux.old" ("mv linux linux.old",以 root 权限)。

现在,可以解开新的内核包了。仍然在 /usr/src 目录下,输入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf -,根据您下载的源代码是用 gzip 或 bzip2 压缩的。在输入完此命令后,您下载的内核源代码会被释放到一个新的"linux"目录下。注意 -- 全套内核源代码通常将在硬盘上占用超过 50 兆空间!

讨论配置问题

在您编译内核前,您需要配置它,配置是您精确控制在新内核中启用(禁止)哪些内核功能的机会。您也将控制哪些会被编译到内核的二进制映像(在启动时被载入)而哪些被编译到需要时载入的内核模块文件。

老式配置内核的方法是极为痛苦的过程,并涉及到进入 /usr/src/linux 目录并输入 make config 命令。请放弃这种配置内核的方式 -- 除非您想在命令行上回答几百个(对!几百个)“yes/no”的问题。

配置的新途径

我们是现代人类,我们不在输入 make config,而是输入 make menuconfig 或者 make xconfig。如果您想要配置您的内核,使用上述选择之一。如果您输入 make menuconfig,您将使用一个漂亮的基于文本的彩色菜单系统来配置内核。如果您输入 make xconfig,您将使用一个更漂亮的基于 X-Window 的 GUI 界面来配置内核的各种选项。这里有一个使用 "make menuconfig" 的屏幕截图:

当使用 "make menuconfig" 时,在左面出现一个 "< >" 的选项能被编译成为一个模块。当选项被选中,按下空格键来循环选择选项是被选中或未选中, ("<*>")表示将被编译成内核映像而("<M>")表示将被编译成模块。

配置技巧

在这里有极其多的内核选项,而且我们无法在此一一解释 -- 所以请利用内核内置的帮助功能。基本上每个选项都至少有一些描述,而且每个通常都有一行"如果您不知道这个选项的含义,输入 Y。(或者 N)"。这些提示在您不知道一个特定选项的含义时能帮助您。要使用帮助,选中您有疑问的选项然后按 "?" 键。

编译和安装内核

make dep make clean

一旦您的内核配置完毕,就可开始编译它了。在我们能编译它前,我们需要生成依赖(dependency)信息并清除任何老的"编译结果"。这可以通过在 /usr/src/linux 下输入 make dep make clean 完成。

make bzImage

现在是编译真正的二进制内核映像时候了。输入 make bzImage。过几分钟后,编译会结束而且您在 /usr/src/linux/arch/i386/boot(x86 PC 内核)目录下找到 bzImage 文件。我们将待会告诉您如何安装这个新内核,但是现在我们要看看模块编译了。

编译模块

现在我们有了 bzImage,下面要编译模块了。即使您在配置内核时没有使用任何模块,也不要跳过此步骤 -- 在编译完 bzImage 后立刻编译模块是个好习惯。而且,如果您真的没有模块需要编译,这个步骤也非常快就结束了。输入 make modules make modules_install。这将导致模块被编译而且被安装到 /usr/lib/<内核版本号> 目录下。

祝贺您!您的内核已经被编译完成了,您的内核模块也编译完成并被安装。现在是要重新配置 LILO,这样您能使用新的内核。

启动配置

LILO 入门

现在是最后来重新配置 LILO 的时候了,它将负责载入新的内核。LILO 是最流行的 Linux 引导工具,而且为所有的主流 Linux 发行商所采用。您要作的第一件事是察看您的 /etc/lilo.conf 文件。它将包含一行看似 "image=/vmlinuz" 的语句。该语句告诉 LILO 到何处找到内核。

启动配置, 第二部分

要配置 LILO 来使用新的内核,您有两种选择。第一个是覆盖您现有的内核 -- 除非您手头上有一些紧急启动措施如还有此内核的引导盘,这很危险的方法。

更为安全的选择是配置 LILO 是得它能从新的或旧的内核引导。LILO 可配置成从新内核缺省启动,但仍提供一种方法让您遇上问题时能选择旧的内核来启动。这是推荐的作法,也是我们将随后介绍的方法。

启动配置, 第三部分

您的 lilo.conf 文件有可能看起来如下:

boot=/dev/hda

delay=20

vga=normal

root=/dev/hda1

read-only

image=/vmlinuz

label=linux

要在您的 lilo.conf 文件中增添新的项目,参见下列步骤。首先,拷贝 /usr/src/linux/arch/i386/boot/bzImage 到您的根(root)分区上的一个文件,例如 /vmlinuz2。一旦拷贝完毕,复制您 lilo.conf 文件的最后三行并将它们添加到该文件的最后... 我们即将结束整个步骤了...

启动配置, 第四部分

现在,您的 lilo.conf 文件应该看起来如下:

boot=/dev/hda

delay=20

vga=normal

root=/dev/hda1

read-only

image=/vmlinuz

label=linux

image=/vmlinuz

label=linux

首先,将第一个 "image=" 行改为 "image=/vmlinuz2"。其次,将第二个 "label=" 行改为 "label=oldlinux"。然后,确定在文件的开始有一行 "delay=20" -- 如果没有,增添一行。如果它已经存在,将数字至少设为 20。

启动配置, 第五部分

您最后的 lilo.conf 文件将看起来如下:

boot=/dev/hda

delay=20

vga=normal

root=/dev/hda1

read-only

image=/vmlinuz2

label=linux

image=/vmlinuz

label=oldlinux

作完这些修改后,您将需要以 root 身份运行 "lilo"。这非常重要!如果您不执行此步,启动的过程无法继续。运行 "lilo" 将给 lilo 一个机会来更新它的启动映射。

启动配置, 详解

现在我们详细地解释一下我们所作的改动。这个 lilo.conf 文件可以用来允许您启动两个不同的内核。它允许您启动您原来的内核,位于 /vmlinuz 目录下。它也允许您启动新的内核,位于 /vmlinuz2 目录下。在缺省情况下,它将尝试启动您的新内核(指向新内核的 image/label 行首先出现在配置文件中)。

如果,出于某种原因,您需要启动旧内核,只需在重新启动计算机时按住 Shift 键。LILO 将会监测到此 *** 作,然后允许您输入要启动的映像标签名。要启动旧内核,您需要输入 "oldlinux",然后按回车键。要看到有哪些选择,您可按 TAB 键。

kernel_init -->run_init_process -->kernel_execve -->do_execve

这个do_execve 就是类似 execve函数了。

开机--加电自检--读取CMOS设置--从硬盘引导记录查找系统所在位置--读取GRUB配置文件(/boot/grub/grub.conf),加载内核,驱动硬件--开启init进程,读取相应配置文件(/etc/inittab),打开默认运行级别,加载相应服务,开机启动项--完成启动过程


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7523467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存