Linux内核基础

1、Linux内核剖析

1.1 什么是内核

内核指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等核心功能的系统软件,是整个操作系统的最底层。Linux内核的功能有:进程管理、文件系统、硬件驱动、内存管理、安全功能(SELinux)、网络子系统,内核结构如图1所示。

1.2 内核体系

(1)单内核体系

单内核是个很大的进程,它的内部又能够被分为若干模块。但是在运行的时候,它是作为一个整体的大进程;其模块间的通信时通过直接调用其他模块中的函数实现,而不是消息传递。

Linux内核:核心+外围模块

核心:/boot/vmlinuz-VERSION-release

模块:/lib/modules/VERSION-release

 

(2)微内核体系

在微内核中,大部分内核都作为单独的进程在特权状态下运行,他们通过消息传递进行通信,在典型情况下,每个概念模块都有一个进程,如Windows、Solaric。

1.3 内核模块

(1)内核模块

Linux内核具有模块化的特性,因此在编译核心时,无需将全部功能都放入内核本体,可将这些功能编译成一个个单独的模块,需要时在将分别载入:

编译仅内核本体[*]

编译成内核模块[M]

不选择使用[]

 

(2)内核模块管理

lsmod:显示内核已装载模块;

modprobe –l:显示可用模块

动态装载/卸载模块其操作命令如下所示。

//装载

# modprobe MOD_NAME 或 insmod /path/to/module_file

//卸载

modprobe -r MOD_NAME 或 rmmod MOD_NAME

查看某模块详细信息,其操作命令如下所示。

# modinfo MOD_NAME

模块之间也可能有依赖关系,装载某模块需要先装载其依赖的模块,“depmod”可分析加载模块的依赖关系,生成“modules.dep”文件和映射文件,这两个文件位于“/lib/modules/VERSION-release”目录下。

1.4 查看内核版本

 

uname:打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)。

语法

uname [选项] [参数]

uname命令的选项及说明,如表1所示。

2、内核参数配置

2.1 伪文件系统

Linux系统上有两个伪文件系统:分别是/proc和/sys。

/proc存储的是当前内核运行状态映射的一系列特殊文件,用户可通过这些文件查看硬件和进程的信息,还可更改某些文件来改变内核运行状态。

只读文件:输出统计信息;

读写文件:设定内核工作特性,一般位于/roc/sys目录下,不允许使用文本编辑器进行编写,而只能使用重定向的方式或使用专用的工具,例如“echo 1 > /proc/sys/vm/drop_cathes”。常用参数有:kernel.hostname(系统主机名)、vm.drop.caches(释放缓存)、net.ipv4.icmp_echo_ignore_all(可屏蔽别人PING本主机)、net.ipv4.ip_forward(决定主机是否可路由)。

查看伪文件系统的目录结果如图2所示(以CentOS 7为例)。

2.2 修改内核参数

常用修改内核参数的方法命令有以下三种,分别是:

①echo "XXX" > /proc/sys/

②sysctl -w VARAIABLE=VALUE

③vi /etc/sysctl.conf

其中,针对上述的三种方法具体描述如下。

①sysctl常用修改内核参数的命令有:“sysctl -a”(显示sysctl可控制的所有参数)、“sysctl VARAIABLE”(查看指定参数)、“sysctl -p”(重读配置文件并其生效)。

 

②修改sysctl配置文件,在该配置文件中修改内核参数不会立即生效,但会永久有效。

2.3 /sys

 

跟/proc一样也是一个伪文件系统,存放着由内核的驱动程序所探测到的硬件设备相关信息。

Linux内核2.4版本以下:/dev所有设备文件都是事先预置;

Linux内核2.6版本以下:/dev下所有设备文件能够按需创建;用户空间的某影院程序可根据/sys中信息来为每个设备按需创建设备文件。

3、内核更新

3.1 Ubuntu操作系统

在Ubuntu操作系统上更新内核,其操作过程如下所示(以Ubuntu Server 16.04为例)。

(1)查看当前安装的内核,其命令如下,查看结果如图3所示。

# dpkg -l | grep linux-image

(2)查看系统中可以更新的内核版本,其命令如下。

# apt-cache search linux-image

(3)从可以更新的内核版本中选择,相应的版本,进行安装新内核,如选择新内核版本为4.4.0-98,其命令如下。

# apt-get install linux-image-4.4.0-98-generic linux-image-extra-4.4.0-98-generic

(4)卸载不要的内核,其命令如下所示。

# apt-get purge linux-image-4.4.0-87-xx-generic linux-image-extra-4.4.0-87-xx-generic

(5)更新GRUB引导,其命令如下。

# update-grub

(6)重启系统,使用如下命令进行查看内核版本是否升级成功。

# uname –r

3.2 CentOS操作系统

 

在CentOS操作系统上更新内核,其操作过程如下所示(以CentOS 7为例)。

(1)查看当前内核信息,其命令如下,结果如图4所示。

# uname –sr

(2)在CentOS 7中升级内核

大多数现代发行版提供了一种使用yum等包管理系统和官方支持的仓库升级内核的方法。但是,这只会升级内核到仓库中可用的最新版本,而不是在https://www.kernel.org/中可用的最新版本。Red Hat只允许使用前者升级内核,CentOS允许使用ELRepo,这是一个第三方仓库,可以将内核升级到最新版本。

要在CentOS 7上启用ELRepo仓库,请运行如下命令。

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

仓库启用后,可以使用一下命令列出可用的内核相关包,结果如图5所示。

# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

安装最新的稳定内核(4.16.5-1)安装包,其命令如下所示。

# yum --enablerepo=elrepo-kernel install kernel-ml

(3)设置GRUB引导

为了让新安装的内核成为默认启动选项,你需要如下修改GRUB配置:

打开并编辑/etc/default/grub并设置GRUB_DEFAULT=0。意思是GRUB初始化页面的第一个内核将作为默认内核。

# vi /etc/default/grub

GRUB_TIMEOUT=5

GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"

GRUB_DEFAULT=0

GRUB_DISABLE_SUBMENU=true

GRUB_TERMINAL_OUTPUT="console"

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us rhgb quiet"

GRUB_DISABLE_RECOVERY="true"

使用如下命令重新创建内核配置。

# grub2-mkconfig -o /boot/grub2/grub.cfg

(4)重启验证

重启并验证最新的内核已作为默认内核,并查看新内核信息,如图6所示。

# uname -sr

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值