linux 内核

发布时间 2023-06-01 17:24:56作者: 凡人半睁眼

1、内核的作用

Linux 内核是 Linux 操作系统的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。之所以称为内核,是因为它在操作系统中就像果实硬壳中的种子一样,并且控制着硬件的所有主要功能。内核的用途主要有以下 4 项工作:

  • 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
  • 进程管理:确定哪些进程可以使用中央处理器、何时使用以及持续多长时间
  • 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
  • 系统调用和安全防护:从流程接受服务请求

在正确实施的情况下,内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。

 Interactive map of Linux kernel (makelinux.github.io)

2、内核简介

Linux 内核的重要组成部分,主要有以下几部分:

  • kernel

    • 内核核心,一般为 bzImage
    • 通常在 /boot 目录下,名称为 vmlinuz-VERSION-RELEASE
  • kernel object

    • 内核对象,一般放置于 /lib/modules/VERSION-RELEASE/
    • [ ] ==> N ==> 不编译进内核
    • [M] ==> M ==> 编译为模块文件
    • [*] ==> Y ==> 编译进内核
  • 辅助文件(ramdisk)

    • initrd
    • initramfs

3、内核模块

1、uname 命令

使用格式

  • uname [OPTION]...

参数解释

  • -n 显示节点名称
  • -r 显示VERSION-RELEASE
  • -s 内核名称
  • -v 内核版本
  • -n 节点名
  • -m 硬件名称
  • -i 硬件平台
  • -p 处理器类型
  • -o 操作系统

2、lsmod 命令

显示由核心已经装载的内核模块

命令定义

  • 显示的内容来自于: /proc/modules 文件。
  • 使用 lsmod 命令时,常会采用类似 lsmod | grep -i ext4 这样的命令来查询系统是否加载了某些模块。
# cat /proc/modules
iptable_filter 2173 0 - Live 0xed9b2000
ip_tables 9567 1 iptable_filter, Live 0xed9a9000
ext3 203718 1 - Live 0xed962000
jbd 65315 1 ext3, Live 0xed904000
xenfs 4360 1 - Live 0xed8e6000
ipv6 271097 14 - Live 0xed88e000
xen_netfront 15871 0 - Live 0xed7d9000
ext4 339812 2 - Live 0xed764000
jbd2 75927 1 ext4, Live 0xed6d9000
mbcache 6017 2 ext3,ext4, Live 0xed6b7000
xen_blkfront 19209 5 - Live 0xed69f000
dm_mirror 11969 0 - Live 0xed68d000
dm_region_hash 9644 1 dm_mirror, Live 0xed67e000
dm_log 8322 2 dm_mirror,dm_region_hash, Live 0xed672000
dm_mod 84711 11 dm_mirror,dm_log, Live 0xed64e000

字段含义

  • 第 1 列:表示模块的名称
  • 第 2 列:表示模块的大小
  • 第 3 列:表示依赖模块的个数
  • 第 4 列:表示依赖模块的内容
# lsmod
Module                  Size  Used by
iptable_filter          2173  0
ip_tables               9567  1 iptable_filter
ext3                  203718  1
jbd                    65315  1 ext3
xenfs                   4360  1
ipv6                  271097  14
xen_netfront           15871  0
ext4                  339812  2
jbd2                   75927  1 ext4
mbcache                 6017  2 ext3,ext4
xen_blkfront           19209  5
dm_mirror              11969  0
dm_region_hash          9644  1 dm_mirror
dm_log                  8322  2 dm_mirror,dm_region_hash
dm_mod                 84711  11 dm_mirror,dm_log

3、modinfo 命令

显示模块的详细描述信息

命令定义

  • modinfo 列出 Linux 内核中命令行指定的模块的信息。
  • modinfo 能够查询系统中未安装的模块信息。
  • 若模块名不是一个文件名,则会在 /lib/modules/version 目录中搜索,就像 modprobe 一样。
  • modinfo 默认情况下,为了便于阅读,以下面的格式列出模块的每个属性:fieldname : value

语法

  • modinfo [选项] [ modulename|filename... ]

选项

  • -n 只显示模块文件路径
  • -p 显示模块参数
  • -a author
  • -d description
  • -l license
  • -0 使用’\0’字符分隔 field 值,而不是一个新行,对脚本比较有用
# modinfo ext4
filename:       /lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/ext4/ext4.ko
license:        GPL
description:    Fourth Extended Filesystem
author:         Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore and others
srcversion:     CB1B990F5A758DFB0FB12F1
depends:        mbcache,jbd2
vermagic:       2.6.32-573.22.1.el6.i686 SMP mod_unload modversions 686

# modinfo btrfs
filename:       /lib/modules/2.6.32-573.22.1.el6.i686/kernel/fs/btrfs/btrfs.ko
license:        GPL
alias:          devname:btrfs-control
alias:          char-major-10-234
srcversion:     B412C18B0F5BF7F1B3C941A
depends:        libcrc32c,zlib_deflate,lzo_compress,lzo_decompress
vermagic:       2.6.32-573.22.1.el6.i686 SMP mod_unload modversions 686

4、modprobe 命令

装载或卸载内核模块

 

 

Linux 系统内核概述 (qq.com)