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版本的内核。