Linux内核的功能

Linux内核的功能

启动管理:在系统初始化过程中检测硬件,加载驱动并引导系统。

进程调度:负责控制进程对CPU的使用。

进程通信:提供了进程之间的各种通信机制。

内存管理:负责管理多个进程对内存的使用。

文件系统:使用虚拟文件系统中间层支持多种不同类型的文件系统。

设备管理:为设备提供缓冲和缓存以提高硬件的访问速度。

网络接口:对各种网络标准的存取和各种网络硬件的支持。

安全管理:校验文件系统权限,SELinux环境和防火墙规则。

REEL/CentOS下的内核

内核的RPM包

kernel:一般用途的普通版内核,支持单核或多核CPU,最多支持4G物理内存。

kernel-PAE:支持大内存的内核,支持多核CPU,最多支持64G物理内存。

kernel-xen:支持Xen虚拟化(hypervisor)的内核。

内核文档

kernel-doc

显示内核相关的信息

显示系统内核信息

uname -srvmo

cat /proc/version

显示系统架构

arch

显示LSB(Linux Standard Base)和发布信息(Distribution information)

isb_release -a # 适用于所有的Linux发行版

显示Linux发布版本(仅用于RedHat系列)

cat /etc/redhat-release

rpm -q {redhat,centos}-release

内核的重要组件

内核映像文件

文件保存在/boot/vmlinux-$(uname -r)

由启动加载器(GRUB)直接加载到内存以便启动内核

内核模块

可根据需要装载或者卸载的内核扩展

包括驱动程序、文件系统,防火墙等等

初始化内存盘(Bootloader Initialized RAM Disk)

内核模块

内核的功能可以编译到内核映像文件,也可以编译为独立的模块。

可以在系统运行期间动态地加载或卸载内核模块以改变系统功能。

所有的内核模块保存在/lib/modules/$(uname -r)目录中。

/lib存在根文件系统中,因此所有内核模块必须在根文件系统挂载后才能使用。

为特定的内核版本编译,以kernel的RPM提供。

可添加第三方模块

内核模块工具

lsmod:列出已装载的模块

lsmod |grep usb

modprobe:装载和卸载模块

modprobe usb_storage

modprobe -r usb_storage

modinfo:显示模块的信息

modinfo usb_storage

初始化内存盘

初始化内存盘提供在引导初期装载的模块

用于内核映像文件中没有提供的其他设备的内核驱动模块

文件保存在/boot/initrd-$(uanme -r).img

由启动加载器(GRUB)直接加载到内存

在引导初期,根文件系统挂载之前使用

是Linux安装盘、Linux启动盘(CD、USB)、LiveCD的必备部件

虚拟文件系统/proc

虚拟文件系统/proc是在Linux启动是挂载到根文件系统上的,它是内存的一部分而非真正存储在硬盘上

重启系统后上次的修改会被重新初始化

使用/proc的目的就是将Linux的内核数据以目录或文件的形式呈现给用户或应用程序,以便查看内核信息或临时修改内核功能。

显示过程信息、内存资源、硬件设备、内核内存等

修改网络、内存子系统等内核属性,修改立即生效

/proc示例

只读文件

/proc/1/*

/proc/cpuinfo

/proc/meminfo

/proc/partitions

/proc/sys/下的读写文件

/proc/sys/kernel/hostname

/proc/sys/net/ipv4/ip_forward

/proc/sys/vm/drop_caches

/proc/sys/vm/swappiness

sysctl:持久的内核配置

sysctl使/proc/sys设置具有持久性

重新引导后,在/etc/sysctl.conf中添加的配置会自动体现在/proc中

使用sysctl命令进行配置维护或监控:

列出所有当前设置:

sysctl -a

从sysctl.conf中重新装载:

sysctl -p

设定一个动态/proc值:

sysctl -w net.ipv4.ip_forward=1

使用rpm命令升级内核

安装新版内核

rpm -i kernek*

不要使用rpm -U 或 rpm -F!

重新启动系统,在GRUB中选择新版内核启动系统

测试新版内核,若有任何问题发生可以使用旧版内核重新启动系统

当确信新版内核无任何问题时,删除旧版内核

rpm -e kernel-oldversion

使用yum命令升级内核

使用yum命令升级内核

yum -y update kernel

主要包含如下操作:

(1)下载最新版的内核RPM文件

(2)安装新版的内核RPM文件

(3)根据/etc/sysconfig/kernel的设置自动配置GRUB

测试新版内核,若有任何问题发生可以使用旧版内核重新启动系统

当确信新版内核无任何问题时,删除旧版内核

yum remove kernel-oldversion

内核源代码的结构

Linux源代码文件名一般为:

Linux-2.6.10.tar.gz | Linux-2.6.10.tar.bz2

安装目录:/usr/src/linux

Linux源代码子目录及功能(1)

/include:建立内核代码时所需的大部分包含文件

/init:内核的初始化代码,内核工作的起点

/arch:所有与硬件体系结构相关的内核代码

/drivers:内核中所有的设备驱动程序

/fs:所有的文件系统的代码

/net:Linux应用的网络协议代码

/mm:所有与硬件体系结构无关的内存管理代码

/ipc:进程间通信代码

/kernel:主内核代码,如进程调度及进程创建、撤销的代码

1.为什么要编译内核?

学习、体验

使用新内核中的功能

修补安全漏洞和程序缺陷

提高系统性能

调整硬件设备的变动

2.编译内核前的准备

做好心理上的准备O(∩_∩)O哈哈~

失败是正常的!

下载内核

本章使用2.6.10内核

下载地址:

http://www.kernel.org

文件:

Linux-2.6.10.tar.gz

Linux-2.6.10.tar.bz2

内核源代码存放位置

/usr/src

源代码解压缩

tar xzvf Linux-2.6.10.tar.gz

tar xjvf Linux-2.6.10.tar.bz2

此时,在/usr/src下生成Linux-2.6.10子目录

区别:2.4版本的内核生成的子目录名为Linux

3.内核配置

方法

make config

不推荐,除非你愿意在命令行回答成千上百个问题

make xconfig

常用方法之一,需要QT工具支持

make gconfig

需要GTK开发库支持

make menuconfig

常用方法之一,文件模式的图形用户界面

在源目录中,生成.config文件!

内核配置选项

符号说明

—>有子菜单

*/空白(编进内核/不选改项)

<> */M/空白(编进内核/以动态模块方式编译/不选该项)

() 多选一

选项说明

4.安装新内核

编译

make (make bzimage、make modules)

安装模块文件

make module_install

将模块安装到/lib/modules/2.6.10/下

安装内核文件

make install

在/boot下生成bzimage、system.map和initrd

检查GRUB是否已经配置完毕!

vi /etc/grub.conf

注意:这个是软链接文件!

编译内核3.0以上版本

整个编译过程类似于内核2.6的编译

RHEL6之后用dracut来创建initramfs镜像文件,不在是以前的mkinitrd

make的使用,可以加上-jN(指定多少核进行编译,根据系统的内核数情况,加快编译速度,N就是指核数)

make clean只删除编译好的文件

make mrproper把包还原成解压出来时的样子

注意:关于后两点,可以直接把文件删除,再重新解压

练习

在你的机器上,下载并安装2.6.10版本的内核。

Linux内核的功能

相关推荐