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) initrdinitramfs
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显示模块参数-aauthor-ddescription-llicense-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 命令
装载或卸载内核模块