编译Linux内核:基于Fedora 10的Linux内核编译

来源:互联网 发布:金伯利钻石怎么样 知乎 编辑:程序博客网 时间:2024/05/11 02:42

编译Linux内核是内核开发的基本功,如果我们通过直接修改Linux内核代码来增加内核功能,那么修改后的内核代码必须要重新编译生成新的映像文件,然后加载该映像文件便可以启用新内核。

 不同的Linux发行版本,其内核编译过程会有所不同。这里所用平台是Fedora 10,Linux kernel为2.6.27.5,待编译的Linux kernel为2.6.27.39。此处仅仅是编译一个干净的内核并且加载成功,而并不对内核进行修改。

第一步:下载内核

一般情况下,待编译的内核(即新内核)的版本不能低于正在运行的版本,如果两者版本差距较大,则可能需要更新如gcc,binutils之类的编译工具。这里只采用Linux发行版所对应的内核版本进行编译,这样所有内核编译工具都是现成的,无须更新。

1)、先查看当前环境下的内核版本号

#uname –r

2.6.27.5-117.fc10.i686

2)、下载相应的内核压缩包

网址:http://www.kernel.org/pub/linux/kernel/v2.6/(笔者选择的是2.6.27.39.tar.bz2)。将内核压缩包复制到Linux下某个目录,如/usr/src。

笔者是在XP系统中先下载压缩包,然后将其复制到Linux的目录中。这样操作不能直接将压缩包复制到Linux的/usr/src目录下,只能先将其复制到Linux桌面,然后用cp命令将压缩包复制到Linux的/usr/src目录下。

3)、解压缩包生成代码树/usr/src/linux-2.6.27.39

指令如下:

 #cd /usr/src

 #tar jxvf linux-2.6.27.39.tar.bz2

#cd linux-2.6.27.39

说明:如果选择的压缩包后缀是.gz,上3)中的第二条指令中的jxvf应换成zxvf。

第二步:生成内核配置文件.config

Linux内核代码非常庞大,使用于许多体系结构,包含大量驱动程序。在生成内核的时候要根据实际情况进行配置,所有的配置将保存在内核代码树顶级目录下的一个名为.config的配置文件中。

 1)、复制配置文件模板

配置文件可以从头开始生成,一般没这必要,因为当前正在运行的内核已经有对应的配置文件,在/boot目录下。将其做模板复制到/usr/src/linux-2.6.27.39目录下:

#make mrproper

#cp /boot/config-‘uname –r’ ./.config

命令“make mrproper”用来保证内核树是干净的,如果内核树已经编译过,该命令有效;如果内核树第一次编译,则可以省略该命令。命令“cp /boot/config-‘uname –r’ ./.config”中“‘uname –r’”代表2.6.27.5-117.fc10.i686,“./.config”中前一点表示将拷贝放置在开头进入的默认目录(即/usr/src/linux-2.6.27.39)中,并将其命名为.config的隐含文件。

2)、生成新内核的.config配置文件

拷贝后虽然有了模板,但是.config文件的配置并不一定囊括了新内核的所有编译选项,可以使用下面的命令:

 #make oldconfig或#make silentoldconfig

命令“#make oldconfig”读取.config文件并根据新内核版本更新它。具体是:该命令输出新内核所有的配置值,如果配置项在.config中有设置,则输出设置值;如果是新项,程序会暂停要用户输入设置值。命令“#make silentoldconfig”和命令“#make oldconfig”功能相似,但他不输出信息,除非是新选项要求用户输入的时候。

到此,生成的.config文件就可以使用了。

第三步:编译和安装新的内核

1)、可以定义自己的内核版本号

在编译内核之前,用户可以定义自己的内核版本号,这样做目的是为了便于识别。在内核代码树的根目录下有文件Makefile,它的前4行的最后一行“EXTRAVERSION=.39”中的值.39可以修改。(当然可以对Makefile文件不做任何处理)

2)、编译新内核

执行下面三个命令:

#make all

#make modules_install

#make install

命令“make all”用于生成期望的内核映像及模块;“make modules_install”将安装模块到“默认目录/lib/module/<内核版本号>”下面;“make install”最终将内核映像等几个文件复制到“/boot”目录,并修改引导程序的配置以启用该新内核。这三个命令一定要执行成功。

说明:对于双核处理器,命令“make all”可改用“make -j2 all”以加快速度。

3)、可以修改引导程序GRUB

如果上述三个命令均执行成功,用户可以观察到引导程序grub的配置文件/boot/grub/menu.lst并将其进行合理修改配置。打开menu.lst的方法之一是:

#gedit /boot/grub/menu.lst

说明:1、命令“gedit /boot/grub/menu.lst”只是用gedit打开配置文件menu.lst,其他还可以用eamcs,vim,cat,tail等。

           2、为了以后能直接操作菜单,可把menu.lst文件中hiddenmenu那一行注释掉(前加#)或删除,并且可以根据需要设置其中的default和timeout的值,分别表示默认启动项及等待时间。

4)、重启查看

用命令#reboot重启系统就可以看到GRUB菜单已经包含了新编译的内核。

原创粉丝点击