为了编译内核,前前后后断断续续共花了4,5天。总算老天开眼,昨天让我编译成功了。
我的linux版本是FC4-i386的,在vmware虚拟机环境下编译,原内核是:2.6.11-1,升级后内核为2.6.15.4
因为版本的不同,编译内核的过程也不同,特别是从内核2.4到2.6。有很大不同。

照着下面的步骤依样花葫芦,我把自己遇到的问题写下来了。

一、备份重要文件
备份以下这些文件可以在系统发生错误或崩溃时,能较快速的恢复系统原来的状态。
1、备份内核和启动文件
# cd /
# tar cvzf boot.tar.gz boot
2、备份系统函数头文件
# cd /usr/include
# tar cvzf linux.tar.gz linux
# tar cvzf scsi.tar.gz scsi
# tar cvzf asm.tar.gz  asm 
3、备份模块中的库文件
# cd /lib/modules
# tar cvzf 2.6.11-1.1369_FC4.tar.gz  2.6.11-1.1369_FC4
5、备份重要配置目录
# cd /
# tar cvzf etc.tar.gz etc
-------------
(说明:这些步骤如果你很有把握的话,就不需要做了。不过对我来说,幸亏我照着做了,否则因为下面的步骤,我差点编译没成功。)

二,下载和解压缩内核源代码
1.内核源代码下载网站:http://www.kernel.org/  到该网站找最新的内核文件,点“F”(F=full source)即可下载全部源代码的压缩包。

2.用tar命令释放内核源代码
  如果你是用vmware虚拟机来玩linux的话,可以通过设定共享文件夹来访问windows下的下载的源代码压缩包。(如果不成功,方法见以前的bolg。)
  将压缩包拷贝至  /usr/src  中,然后解压缩
# cd /usr/src
# tar zxvf linux-2.6.15.4.tar.gz
文件释放成功后,在/usr/src目录下会生成一个linux-2.6.15.4子目录。其中包括了源代码。
(原文章中,还要有一步“将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到/usr/src/linux/include目录下的对应目录中。”的过程,但是,我照着做之后,出现错误“/usr/include/asm/errno.h:4:31:error:asm-generic/errno.h:没有这个文件或目录”,之后,上网求救,终于有幸斑竹指点,不需要做这一步。)
三.配置内核
1、删除源代码目录中残留的.o文件和其它从属文件。(如果以前没有编译过内核,这一步可以省略。)
  # cd /usr/src/linux-2.6.15.4
    #make mrproper
2. 启动内核配置程序 (如果上面都没有问题的话)
    # cd /usr/src/linux-2.6.15.4
     # make xconfig (这一步,我出了问题,一直提示
“HOSTCC scripts/basic/split-include
In file included from /usr/include/linux/errno.h:4,
          from /usr/include/bits/errno.h:25,
          from /usr/include/errno.h:36,
          from scripts/basic/split-include.c:26:
/usr/include/asm/errno.h:4:31: asm-generic/errno.h: No such file or directory
make[1]: *** [scripts/basic/split-include] Error 1
make: *** [scripts_basic] Error 2

后来,又是斑竹告诉我,用#make menuconfig。终于进入我梦寐以求的配置界面,虽然有点丑陋。^_^)
3. 配置内核
    Linux的内核配置程序提供了一系列配置选项。对于每一个配置选项,用户可以回答"y"、"m"或"n"。其中"y"表示将相应特性的支持或设备驱动程序编译进内核;"m"表示将相应特性的支持或设备驱动程序编译成可加载模块,在需要时,可由系统或用户自行加入到内核中去;"n"表示内核不提供相应特性或驱动程序的支持。不合理的配置可能造成内核编译失败。
关于配置内核参数的文章比比皆是。如:http://www.linuxmine.com/1132.html,搜索一下即可找到。
五. 编译内核(下面两步花的时间比较多,建议你倒杯茶慢慢浏览网页吧。我就是用了差不多2个小时的时间才编译好。)
  2.6 的编译内核只需要#make install 就可以了,省事多了。
它包括了如下几个步骤:
1、建立编译时所需的从属文件
# cd /usr/src/linux-2.4
# make dep
2、清除内核编译的目标文件
# make clean
3、编译内核
# make bzImage (注意大小写)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译。

六、编译可加载模块
如果用户在配置内核时设置了可加载模块,则需要对这些模块进行编译,以便将来使用insmod命令进行加载。
  # make modules
# make modules_install
编译成功后,系统会在/lib/modules目录下生成一个2.6.15.4子目录,里面存放着新内核的所有可加载模块。


七、启动新内核
  FC4是用grub启动的。修改grub的配置无须自己手动修改,刚才的过程中已经修改好。

#vi /boot/grub/grub.conf 你会看到多了一个选项:title Fedoro Core(2.6.15.4),说明你内核升级成功了。
这时默认启动还是旧内核,可将hiddenmenu注释,即#hiddenmenu ,然后将default=1改成default=0,即2.6.15.4内核版本的选项号。
这样默认启动就是新内核了,在启动时可以选择新内核和旧内核启动。


以上就是我编译内核的过程,编译环境不同,过程不同。其中艰辛,可想而知,呵!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐