安装内核
安装内核
安装内核
首先,我们不要将之前的配置人为地损坏,正确安装我们的新内核必须要保证安全。运行make modules_install模块来将模块安装到/lib/modules下,并将内核映像文件拷贝到/boot目录,包括redhat在内的许多发行版都基于这个目录启动的。但是在有的系统中可能是在/目录下,同时我们还要将System.map文件(内核连接表)文件拷贝到boot目录,最后编辑启动加载器配置文件。在安装模块之前,到/lib/modules下去检查与我们内核版本同名的目录不存在,如果你建立是一个新内核版本它往往是不存在的,在本文中,模块目录的名字将是2.4.22,这取决与你的内核主版本,补丁级别,子级别和在顶层Makefile中指定外部变量:
在你开始建立前一定要先做这件事情(现在已经太迟了),但是你可以在源文件里向外部变量增加内核版本字符串,模块目录名就依据这个来创建的。
好,开始安装模块,从现在开始我们需要使用root权限来完成后面的任务了,使用su(substitute user的缩写,替换用户的意思)目录切换到root用户,输入root密码,注意提示符会从$转为#,在bash下,敲入下面的命令:
屏幕又会滚动输出,当安装结束时,它象下图这样,最后一行展示了模块依赖信息。
现在我们的模块被安装到了/lib/modules/2.4.22下了,最终的内核映像被放放到内核构建树下的arch/i386/boot目录了,它的名字叫bzImage。安装它很简单,只需要将它拷贝到/boot目录命名为vmliuz-2.4.22即可,我喜欢遵守这个约定,虽然它可以是任何一个名字,只要在一起在启动加载器配置文件中一并修改即可。
System.map文件被放置在内核代码目录下的顶层目录,我们将其拷贝到/boot目录,并重命名为System.map-2.4.22,然后将符号连接重新指定到System.map文件,ln –sf 命令中的-f开关意味着“强制”的意思,它实际上是覆盖之前旧的符号连接,当你使用强制参数的时候,请记得仔细检查一下你输入的命令,如果你犯了一个错误,它不会给你提示和告警,在覆盖前先检查一下/boot/System.map确实是一个符号连接而不是一个实实在在的文件,如果你担心出什么以外,将它重命名是个好主意。
自此我们完成了构建树,如果你清楚并确信不会尝试在当前运行的内核上编译任何扩展的模块或软件,你可以将正在运行内核删除掉。一个例子是ALSA项目可能会需要它,除非你已经编译了它。在/lib/modules/2.4.22下有一个叫做build的符号链接,它指向了构建树的位置,这就是在编译扩展模块时配置脚本总是能找到合适的内核代码的原因所在。我在make clean后,留下构建树,当从构建树清除所有对象文件和二进制文件时,保留了.config文件和依赖信息,make clean命令是为再此编译做准备的。接下来的任务是配置启动加载器来启动新的内核。