- 论坛徽章:
- 0
|
一、目标
将Fedora5 的内核从2.6.15升级到2.6.18
二、总结实践
1.Linux内核结构
首先我们介绍一下Linux内核的结构,Linux内核主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
1.1进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
1.2 内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
1.3 虚拟文件系统(Virtual FileSystem,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
1.4网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
1.5 进程间通讯(IPC) 支持进程间各种通信机制。
2.为什么要升级内核
从字面意思我们可以看出,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙。此外,它还提供程序和硬件之间的接口等功能。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
一般,内核的版本序列号使用三个数字表示,如2.4.8,版本号越高表示功能越强。版本号分为两个系列:一种是产品系列,以偶数命名,例如,1.2.x、2.0.x、2.2.x等,运行稳定,已经经过较为周密的测试;另外一种是开发测试系列,以奇数命名,用以进行最新功能的测试,不建议初学者和生产过程中使用。
3. 详细操作
3.1 利其器,首先我们的准备好要用的工具,有如下四个
module-init-tools
mkinitrd
lvm2
device-mapper
可以用rpm -qa *来查询,如果是fc8的话应该已经安装好了,版本嘛,不要太老的过分就好了
3.2下载你需要的内核源码
http://www.kernel.org/pub/linux/kernel/v2.6/
这里面找去吧
要查看你自己的版本可以uname -r
3.3处理源码
1》# cd /usr/src (进入到/usr/src目录下,如果已经在/usr/src目录下,可不执行该命令)
# rm –rf linux (删除linux文件夹。值得一提的是,如果内核先前从未编译过,则没有这个文件夹,此 命令行可略过)
# tar jvxf linux-2.6.18.tar.bz2 (解压新内核)
# ln -s linux-2.6.18 linux (重新生成linux文件夹)
Linux系统的核心代码存放于目录/usr/src/linux,实际上,该目录是一个链接,指向当前所用的核心版本的目录,例如如果当前使用的版本是 2.4,则该核心的实际目录应该是:/usr/src/linux-2.4,而新下载的内核中的目录是linux,这样,直接在/usr/src下解包会导致原来的内核目录被覆盖。所以稳妥的做法是,首先删除链接linux,然后解包、更名、重新链接。在解包前要确认在/usr/src目录下没有叫linux的目录,或者不再想保留该目录。
2》配置内核选项。
# cd linux-2.6.18(进入到/usr/src/linux-2.6.18目录下)
# make mrproper (该命令可确保源代码目录下没有不正确的.o文件)
# make menuconfig (配置内核各选项)
此时会出现一个图形界面,列出了所有的内核配置选项,有的选项下还有子选项,你可以用方向键来选择,用Y键来确定。经过我多次试验,大多数选项默认就行,以下几个选项必须选择(请认真核对下面每一个选项,否则编译很有可能前功尽弃):
(1)Loadable Module support选项中,选上“Module unloading”和“Automatic kernel module loading”这两项;
(2)Device Drivers--->Block Devices中选上“Loopback device support”;
Device Drivers--->Multi-device support(RAID and LVM)处要选上“device mapper support”;
Device Drivers--->Graphics support,一定要选上“ Support for frame buffer devices”;
Device Drivers --->USB support --->选上“USB Mass Storage support”(如果是在实环境中,想要更多USB支持,就全选吧。我的是在虚拟机中,用不着了)
Device Drivers --->;Network device support --->Ethernet (10 or 100Mbit) ---> AMD PCnet32 PCI support
(3)File system--->(以下9个选项是关于ext2和ext3文件系统配置,全部选上)
Second extended fs support
Ext2 extended attributes
Ext2 POSIX Access Control Lists
Ext2 Security Labels
Ext3 journalling file system support
Ext3 extended attributes
Ext3 POSIX Access Control Lists
Ext3 Security Labels
JBB (ext3) debugging support
File system--->DOS/FAT/NT Filesystems --->选上“NTFS file system support”;
(4)如果你在vmware下编译内核,硬盘用的是scsi的,以下三个选项必选:
Device Drivers --->SCSI device support (此项不选的话,下面两项就选择不上)
Device Drivers --->SCSI device support --->SCSI disk support
Device Drivers--->SCSI device support--->SCSI low-level drivers--->; BusLogic SCSI support
3》开始编译
在/usr/src/linux-2.6.18目录下,执行以下命令即可编译。编译需要一段时间
# make dep (建立编译时所需的从属文件。注意:如果内核从未编译过,此步可跳过)
# make clean (清除内核编译的目标文件。注意:如果内核从未编译过,此步可跳过)
# make bzImage (注意大小写。这一步才是真正编译内核)
内核编译成功后,会在/usr/src/linux/arch/i386/boot目录中生成一个新内核的映像文件bzImage。如果用make zImage编译,内核很大的话,系统会提示你使用make bzImage命令来编译,所以我直接用make bzImage来编译。
# make modules (编译可加载模块)
# make modules_install (安装可加载模块)
安装成功后,系统会在/lib/modules目录下生成一个2.6.18子目录,里面存放着新内核的所有可加载模块。
# make install (安装新内核)
上面的命令"make install"将:(1)把压缩内核映象拷贝到/boot目录下, 并创建相应的System.map符号链接; (2)修改bootloader的配置文件;(3)调用mkinitrd程序创建内核的initrd映象. 对于GRUB而言,将在/boot/grub/grub.conf配置文件增加如下类似的配置行:
title RedHat Linux (2.6.18)
root(hd0,1)
kernel/boot/vmlinuz-2.6.18 ro root=LABEL=/
initrd/boot/initrd-2.6.18.img
4. 启动新内核
1) 将新内核和System.map文件拷贝到/boot目录下,依次执行以下命令:(一般情况下可不用执行,因为在make install 步骤中已经自动完全了)
# cp /usr/src/linux-2.6.18/arch/i386/boot/bzImage /boot/vmlinuz-2.6.18
# cp /usr/src/linux-2.6.18/System.map /boot/System.map-2.6.18
# cd /boot (进入boot目录)
# rm –rf System.map (删除原来的连接)
# ln –s System.map-2.6.18 System.map (重新建立连接)
2) 修改Grub启动管理器
如果没有错误的话, 下面开始修改grub配置文件
# vi /grub/grub.conf
进入grub.conf文件,找到如下信息:
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.6.18)
root (hd0,0)
kernel /vmlinuz-2.6.18 ro root= LABEL=/
initrd /initrd-2.6.18.img
修改:
将default=1改为default=0(不改的话也可以,只不过重启之后会默认进入老内核)
3) 重启机器
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86532/showart_1674287.html |
|