CenOS内核编译

第一步:下载内核源码:

      wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.gz

然后解压进入到解压后的目录

   # tar -zxvf linux-2.6.29.tar.gz
  # cd /usr/src/linux-2.6.29

第二步:开始编译

 清理以前的编译痕迹
如果内核源码是刚解压缩出来的,可以跳过这一步,否则执行以下两条命令:
 
make mrproper
make clean

 设置内核编译选项
命令如下:

 
cp /boot/config-`uname -r` .config
make menuconfig

执行该命令需要ncurses库,如果执行出错则执行如下命令安装ncurses:

 
yum install ncurses-devel

编译内核压缩镜像

1
make bzImage

编译会生成bzImage文件,对应于/boot目录下的vmlinuz文件,是压缩过的内核文件。启动加载时将该文件解压缩到内存中之后才能执行操作系统。
编译内核模块

 
make modules

内核在运行过程中,除需要内核文件之外,还需要加载一些外围模块(例如驱动程序)等才能运行。
 安装内核模块

 
make modules_install

安装上一步中编译的内核模块,一般都会安装到/lib/modules目录下。
安装内核

 
make install

这句命令很简单,它会在/boot目录下生成vmlinux/System.map两个文件,并且在/boot/grub目录中生成menu.lst文件。有关menu.lst文件的修改方法请Google一下。

注:1. 若提示如下错误

sh /usr/src/linux-2.6.29/arch/x86/boot/install.sh 2.6.29 arch/x86/boot/bzImage \
        System.map "/boot"

 *** Missing file: arch/x86/boot/bzImage
 *** You need to run "make" before "make install".

make[1]: *** [install] Error 1
make: *** [install] Error 2

说明找不到内核模块的错误,执行以下两个命令

cp  arch/i386/boot/bzImage /boot/vmlinuz-2.6.29.1 

cp  System.map /boot/System.map-2.6.29.1


启动新的内核
修改/boot/grub/menu.lst文件,将新生成的默认启动项修改为刚生成的启动项,重启即可:reboot


新内核启动问题:
如果启动时报"insmod: error inserting '/lib/dm-region-hash.ko' : -1 File exists"错误,解决方法如下:
1.解压initrd文件

# cp /boo/initrd-2.6.32.60.img  /tmp/ # cd /tmp/ # ls initrd-2.6.32.60.img # mkdir newinitrd # cd newinitrd/ # zcat ../initrd-2.6.32.60.img |cpio -i 12629 blocks 释放之后看到如下内容 # ls bin  dev  etc  init  lib  proc  sbin  sys  sysroot

2.下边就是编辑init, 删掉其中重复的四行中的两行
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko
echo "Loading dm-region-hash.ko module"
insmod /lib/dm-region-hash.ko

3.重新打包initrd

[root@bogon newinitrd]# find .|cpio -c -o > ../initrd 12629 blocks [root@bogon newinitrd]# cd .. [root@bogon tmp]# gzip -9 < initrd > initrd.img [root@bogon tmp]# ls initrd-2.6.32.60.img      initrd       initrd.img            newinitrd

好了,initrd.img就是重新打包的initrd了,然后把initrd.img拷贝到/boot,更改/boot/grub/grub.conf里边的initrd-2.6.32.60.img为initrd.img就可以了

如果启动时出现如下的错误:
mount: could not find filesystem ‘/dev/root’
setuproot: moving /dev failed: No such file or directory
setuproot: error mounting /proc: No such file or directory
setuproot: error mounting /sys: No such file or directory
switchroot: mount failed: No such file or directory
Kernel panic – not syncing: Attempted to kill init!

解决方法:编译时修改.config文件中的“CONFIG_SYSFS_DEPRECATED_V2”,默认该选项为not set,被注释掉的,将其改为y。即修改为“CONFIG_SYSFS_DEPRECATED_V2=y”,修改后,再重新编译内核,重启即正常了。
具体操作:
       第一次打开.config时查找没有CONFIG_SYSFS_DEPRECATED_V2字段,先make menuconfig然后导入配置文件之后退出在打开.config修改或添加
"CONFIG_SYSFS_DEPRECATED_V2=y",然后在重新make menuconfig导入配置文件退出,编辑.config文件这时可以找到 CONFIG_SYSFS_DEPRECATED_V2字段了修改其为CONFIG_SYSFS_DEPRECATED_V2=y

               

本文转自“lchengcome的专栏

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值