1. Linux内核结构
首先我们介绍一下Linux 内核的结构,Linux内核主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
1 进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
2内存管理(MM)允许多个进程安全的共享主内存区域。Linux 的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
3虚拟文件系统(Virtual File System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
4网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
5进程间通讯(IPC) 支持进程间各种通信机制。
2.为什么要升级内核
从字面意思我们可以看出,Linux的内核承担着Linux操作系统的最为核心的任务,是其它程序和硬件等运行过程中的仲裁者:它要管理所有进程的内存,保证它们都能平等得到处理器的时隙。此外,它还提供程序和硬件之间的接口等功能。
通常,更新的内核会支持更多的硬件,具备更好的进程管理能力,运行速度更快、更稳定,并且一般会修复老版本中发现的许多漏洞等,经常性地选择升级更新的系统内核是Linux使用者的必要操作内容。
一般,内核的版本序列号使用三个数字表示,如2.4.8,版本号越高表示功能越强。版本号分为两个系列:一种是产品系列,以偶数命名,例如,1.2.x、2.0.x、2.2.x等,运行稳定,已经经过较为周密的测试;另外一种是开发测试系列,以奇数命名,用以进行最新功能的测试,不建议初学者和生产过程中使用。
本文的后面部分将分别以内核2.4到2.6的升级过程介绍内核升级用到的步骤、概念、注意事项以及可以参考的更多文档
3.当前2.6版内核的获取
1,下载:
选择相对快速并且具有权威性的站点下载最新的内核源代码包,例如条件允许的话可以到下面的站点下载:
http://ftp.linuxaid.lkams.kernel.org/
2.解压缩
Linux系统的核心代码存放于目录/usr/src/linux,实际上,该目录是一个链接,指向当前所用的核心版本的目录,例如如果当前使用的版本是 2.4,则该核心的实际目录应该是: /usr/src/linux-2.4,而新下载的内核中的目录是linux,这样,直接在/usr/src下解包会导致原来的内核目录被覆盖。所以稳妥的做法是,首先删除链接linux,然后解包、更名、重新链接。在解包前要确认在/usr/src目录下没有叫linux的目录,或者不再想保留该目录。
另外,随着Linux内核功能的增强及对更多外设的支持,文件包也越变越大,当前最新的稳定版2.6.9内核压缩包的大小约为20多MB,但实际上解压缩及编译等环节,要求/usr/src目录所在的分区的空闲空间大于100MB字节。
4.升级系统内每个change文件的版本
新的2.6内核的升级工作涉及到许多实用程序的升级。对于某些change文件中列出的实用程序也不必担心,它们或许只是某种文件系统的特殊例子而已。但是,下面的文件还是必须至少要满足到下表给出的的最低版本:
Name: Minimum version: How to find version:
Gnu C Compiler 2.95.3 gcc--version
Gnu Make 3.78 make--version
binutils 2.12 ld-v
util-linux 2.10o fdformat--version
module-init-tools 0.9.9 depmod-V
procps 2.0.9 ps--version
[procps 2.x] [procps .x]
下面的实用程序是文件系统中的特殊程序。若运行ext2 或ext3,那么就必须升级e2fsprogs。若运行jfs,就必须升级jfsutils,等等。如:
Name: Minimum version: How to find version:
e2fsprogs 1.29 tune2fs
jfsutils 1.0.14 fsck.jfs -V
reiserfsprogs 3.6.3 reiserfsck–V 2>&1| grep reiserfsprogs
xfsprogs 2.1.0 xfs_db -V
nfs-utils 1.0.5 showmount --version
另外,少数实用程序当你用到它时才需要升级的有:
Name: Minimum version: How to find version:
pcmcia-cs 3.1.21 Cardmgr -V quota-tools 3.09 Quota -V
PPP 2.4.0 ppd--version
isdn4k-utils 3.1pre1 Isdnctrl 2>&1 | grep version
oprofile 0.5.3 oprofiled--version
如果首次运行ALSA,请访问http://www.alsa-project.org/获取最新的alsa-lib 和 alsa-utils。
5.内核的配置与编译
1.内核的配置
Linux当前支持的CPU类型包括x86、ARM、DEC Alpha、SUN Sparc、M68000、MIPS、PowerPC等,应该说上述类型已经包括绝大多数用户使用的CPU型号。在安装与配置过程中,Linux会自动识别这些型号。
通常要运行的第一个命令是:#cd /usr/src/linux;make mrproper。确保源代码目录下没有不正确的.o文件以及文件的互相依赖。
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后Linux的运行直接相关,有必要了解一下一些主要的且经常用到的选项的设置。
2.6内核配置包括:
#make config (基于文本的最为传统的配置界面)
#make menuconfig (基于文本选单的配置界面)
#make xconfig (基于图形窗口模式的配置界面)
#make oldconfig (如果只想在原来内核配置的基础上修改一些小地方,会省去)
#ALSA:{从2.4版本到2.6版本的升级,这就要使用到ALSA(Advanced Linux Sound Architecture即:新的 Linux 音频体系结构)。它取代了OSS(Open Sound System)。配置内核时,选定ALSA的OSS API效法选项(SND_OSSEMUL、SND_MIXER_OSS和SND_PCM_OSS)和适当的声音驱动(PCI 驱动)。最后,下载和安装最新的alsa-lib和alsa-utils。}
进行配置时,大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。例如,如果需要内核支持DOS分区的文件系统,则要在文件系统部分选择FAT或DOS系统支持;系统如果配有网卡、PCMCIA卡等,需要在网络配置中选择相应卡的类型。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
“Y”- 将该功能编译进内核
“N”- 不将该功能编译进内核
“M”- 将该功能编译成可以在需要时动态插入到内核中的模块。
将与核心其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响。许多功能都可以这样处理,例如像上面提到的网卡的支持、对FAT等文件系统的支持。
2.编译新内核
配置完内核,接下来需要对内核源代码文件的依赖性和完整性进行检验,并且进行编译,此时要保证系统所使用的gcc版本在gcc-2.95.3以上:
#make clean (确保所有有关文件都处于最新版本状态)
#make zImage (编译压缩形式的内核)
在需要内核支持较多的外设和功能时,内核可能变得很大,此时可以编译大内核:
#make bzImage
如果选择了可加载模块,编译完内核后,要对选择的模块进行编译:
#make module (编译选择的模块)
#make module-install (将编译后的模块转移到系统标准位置)
模块在系统中的标准目录位于/lib/modules/x.y.z,后面的x.y.z是版本号,为安全起见,在运行#make modules-install之前最好对/lib/modules进行备份。模块通常是带有扩展名.o的文件,使用命令#lsmod可以对当前内核的模块进行列表。
6.启用新内核
将编译好的新内核拷贝到系统目录/boot下,例如
#cp /usr/src/linux/arch/i386/boot/zImage /boot/zImage-2.6.9
然后,编辑系统引导配置文件/etc/lilo.conf,仿照原有选项添入新内核选项,给它起一个明显好记的标签(label),记住此时最好保留原有内核以及相应的选项,这样不用害怕升级失败而机器启动不了,至少还可以使用旧的内核引导自己的计算机。保存编辑后退出,此时要记住运行命令:#lilo,更新系统引导映象,这样对lilo.conf的修改才能起作用。
重启机器后,在LILO的提示符下按“Tab”键,则应该看到加入的新内核选项。
这样,我们就完成了linux的升级