CentOS6.5升级内核从2.6.32到3.2.14
由于最近想要在服务器上跑IOU,但是在部署VMware后发现不能正常启动,总是提示内核无法载入,什么C header files matching your running kernel were not found.之类的,网上google了各种方法,两天没有解决,后来觉得可能是内核版本太低或者真的是需要重新编译一下现有的内核,没办法,只能尝试升级内核。
目前的内核版本 uname -r 为2.6.32,在这里先mark一下官方内核下载的网址:
https://www.kernel.org/pub/linux/kernel/ (很强大好用)
我用的是3.2.14,看了别人的博客,有提到在内核2.0的大版本中,以第二个数字序号的奇偶来区分是稳定版还是开发版,偶数代表稳定版,奇数代表开发版,但在内核3.0中,就和这个没关了。
首先,wget -c http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.2.14.tar.bz2 随便选了个3.0的大版本,然后解压到/usr/src/kernel/目录下,tar -xvf linux-3.2.14.tar.gz -C /usr/src/kernels
进入解压的目录,yum install ncurses-devel (升级ncurses,用于提供字符终端处理库,由于ncurses的其他依赖项我都有装,如gcc,make,sed,glibc等等,此处不再说明)
#make mrproper 用来消除原来编译的影响,对之前没编译过内核的可以跳过此步,但建议使用一下这条命令 。
# cp /boot/config-‘uname -r’ /usr/src/kernels/linux3.2.14/.config #把原来的配置文件
# make menuconfig #通过菜单配置内核,在此有几点需要注意的:
一定要勾选(输入y选中,M编译为模块)
a、General setup→[*] enable deprecated sysfs features to support old userspace tools
b、Processor type and features→HighMemory Support。
c、找到以下选中选项并选中:
networking support → networking options → network packet filtering framework(netfilter)
(1)Corenetfilter configuration
. 勾中"Netfilter connection tracking support" -m state相关模块是依赖它的,不选则没有。
. 将netbios name service protocal support(new) 编译成模块,不然后面升级iptables后启动时会出错
. 勾中"Netfilter Xtables support (required for ip_tables)"
(2)IP: Netfilter Configuration
. 将 "IPv4 connection tracking support (require for NAT)" 编译成模块。
. 勾中IP tables support (required for filtering/masq/NAT) 。
. 将 "Full NAT" 下的 "MASQUERADE target support" 和 "REDIRECT target support" 编译成模块
这里貌似是每个不同的版本进入菜单的画面以及选项有所不同,看了网上其他版本进入菜单的画面,发现和我这个3.2.14版本内核的画面完全不同。可能类似于不同型号的笔记本进入的BIOS有所差别吧。
然后,终于可以编译安装了:
# make clean //清除下内核编译的目标文件
# make bzImage // 生成内核文件
# make modules // 编码模块 (以上三部分耗时较长) 也可以用make完全编译代替这三条命令
# make modules_install // 安装模块
# make install // 安装
其中,在make install时可能会提示一些ERROR,有一些模块无法载入,记得有vsock,power什么之类的,网上有人说一般只要遇到某某模块没找到,就修改.config文件找到相应的CONFIG_XX_XX=y改为CONFIG_XX__=m,但是添加之后,然并卵,在此我先忽略了它们。
去修改grub.conf
#vim /etc/grub.conf
将default的值改为0(原来为1),默认情况下,新编译的内核的default值为0
#reboot
ok!!!! 完成!
在查看uname -r 可以看到内核版本变为3.2.14
我们也可以移除掉之前的内核:
yum remove kernel-2.6.32-642.1.1.el6.x86_64 (不移除也ok)
最后附上内核的主要模块组件:
. 进程管理(process management)
. 定时器(timer)
. 中断管理(interrupt management)
. 内存管理(memory management)
. 模块管理(module management)
. 虚拟文件系统接口(VFS layer)
. 文件系统(file system)
. 设备驱动程序(device driver)
. 进程间通信(inter-process communication)
. 网络管理(network management
. 系统启动(system init)等操作系统功能的实现。
参考博客:http://blog.chinaunix.net/uid-26000296-id-4208526.html
http://blog.163.com/chengwei_1104/blog/static/5364527420126992015682/