Linux Kernel Upgrade

实验题目

升级linux系统的内核之centos。

实验描述

在centos6.5 final上, 内核版本为2.6.32, 内核版本使用uname命令查看 uname -r 要升级到的内核版本为2.6.38.6

环境准备

  • centos 6.5 Final系统
  • 安装编译环境
yum groupinstall "Development Tools" "Development Libraries" -y
  • 使用root用户登录系统操作

命令说明

通过文本菜单对要使用的模块进行配置,并生成配置文件.config,保存到当前目录。

make menuconfig

编译

make

安装内核模块到/lib/modules目录

make modules_install

安装内核

make install

开始编译

  • 将内核解压至/usr/src/目录下并建立软链接到linux目录
# tar -jxvf linux-2.6.38.6.tar.bz2 -C /usr/src
# cd /usr/src
# ln -sv linux-2.6.38.6
# ls -l
lrwxrwxrwx. 1 root root 15 Aug 24 19:06 linux -> linux-2.6.38.6/
drwxrwxr-x. 24 root root 4096 Aug 24 21:44 linux-2.6.38.6
# make menuconfig
# make modules_install
# make install
# reboot

系统重启后,在启动界面选择新内核启动就可以。 至此内核升级完成。

分析总结

make modules_install命令安装了什么?

会在/lib/modules目录下创建一个目录2.6.38.6,并将内核模块等放在此目录中,下面来详细查看一下。

[root@dev24 modules]# pwd
/lib/modules
[root@dev24 modules]# ls
2.6.32-431.el6.x86_64 2.6.38.6
[root@dev24 modules]# cd 2.6.38.6/
[root@dev24 2.6.38.6]# ls
build modules.builtin modules.ieee1394map modules.order modules.symbols.bin
kernel modules.ccwmap modules.inputmap modules.pcimap modules.usbmap
modules.alias modules.dep modules.isapnpmap modules.seriomap source
modules.alias.bin modules.dep.bin modules.ofmap modules.symbols
[root@dev24 2.6.38.6]# ls kernel/
Documentation arch crypto drivers fs kernel lib mm net sound
[root@dev24 2.6.38.6]# ls kernel/kernel/
trace
[root@dev24 2.6.38.6]# ls kernel/kernel/trace/
ring_buffer_benchmark.ko
[root@dev24 2.6.38.6]# ls kernel/drivers/
acpi cdrom edac hwmon isdn mfd pci rtc uio watchdog
ata char firewire i2c leds misc pcmcia scsi usb xen
atm cpufreq firmware idle md mmc platform ssb uwb
auxdisplay crypto gpio ieee802154 media mtd power staging vhost
block dca gpu infiniband memstick net pps target video
bluetooth dma hid input message parport regulator tty virtio
[root@dev24 2.6.38.6]# ls kernel/fs
autofs4 cifs dlm ext2 fat gfs2 jffs2 nfs nls udf
btrfs configfs ecryptfs ext3 fscache jbd lockd nfs_common squashfs xfs
cachefiles cramfs exportfs ext4 fuse jbd2 mbcache.ko nfsd ubifs

make install 命令安装了什么?

通过find命令,查看一下/boot目录新建(修改)了那些文件。

[root@dev24 boot]# find . -ctime -2
.
./System.map-2.6.38.6
./System.map
./vmlinuz-2.6.38.6
./vmlinuz
./grub
./grub/grub.conf
./initramfs-2.6.38.6.img

其实Linux启动主要依赖于2个文件,vmlinuz(内核文件)和initramfs(init file system) 还有grub文件是系统的引导程序,grup.conf中配置有引导信息。

[root@dev24 boot]# cat grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_ctos-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.38.6)
root (hd0,0)
kernel /vmlinuz-2.6.38.6 ro root=/dev/mapper/vg_ctos-lv_root rd_NO_LUKS rd_LVM_LV=vg_ctos/lv_root LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_ctos/lv_swap rd_NO_DM rhgb quiet
initrd /initramfs-2.6.38.6.img
title CentOS (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=/dev/mapper/vg_ctos-lv_root rd_NO_LUKS rd_LVM_LV=vg_ctos/lv_root LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_LVM_LV=vg_ctos/lv_swap rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img

我们看到grup.conf文件中新增了2.6.38的启动信息,所以在开机的时候会有两个选项,是使用2.6.32内核还是2.6.38内核来启动系统。至此升级完成。