Linux进阶之内核与模块管理
Linux 内核是操作系统的核心,负责硬件管理、系统资源分配及系统调用等功能。内核模块(Kernel Modules)是内核的可加载组件,用于动态扩展功能。本章将详细讲解如何查看内核信息、管理内核模块,以及编译和安装自定义内核。
一、查看内核信息
1、uname
查看系统与内核信息
uname
是用于显示系统信息的命令,可以通过不同参数获取详细信息。
常用选项与示例
uname -a
输出示例:
Linux ubuntu 5.15.0-84-generic #93-Ubuntu SMP Thu Mar 23 16:00:00 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
参数说明:
-a
:显示所有信息。-r
:仅显示内核版本。-v
:显示内核发布版本信息。-m
:显示系统架构。
仅查看内核版本
uname -r
输出示例:
5.15.0-84-generic
2、dmesg
查看启动日志与内核消息
dmesg
用于查看内核环缓冲区中的消息,包括系统启动日志和内核事件。
显示所有内核消息
dmesg
输出示例(部分):
[ 0.000000] Linux version 5.15.0-84-generic (buildd@lcy02-amd64-066) ...
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-84-generic ...
过滤特定关键字
dmesg | grep -i error
输出示例:
[ 5.123456] [ERROR] Disk read failure.
二、加载与卸载内核模块
内核模块是动态加载到内核中的组件,用于添加驱动程序或功能。
1、列出已加载模块
使用 lsmod
查看当前加载的模块。
lsmod
输出示例:
Module Size Used by
snd_hda_codec_generic 73728 1
snd_hda_intel 57344 3
2、加载模块
modprobe
加载模块
modprobe
是加载模块的常用工具,会自动处理依赖关系。
sudo modprobe module_name
insmod
加载模块
insmod
是另一个加载模块的工具,但不会自动加载依赖模块。
sudo insmod /lib/modules/$(uname -r)/kernel/drivers/example.ko
3、卸载模块
rmmod
卸载模块
rmmod
用于从内核中卸载模块。
sudo rmmod module_name
modprobe
卸载模块
也可使用 modprobe
来卸载模块。
sudo modprobe -r module_name
4、查看模块信息
使用 modinfo
查看模块的详细信息。
modinfo module_name
输出示例:
filename: /lib/modules/5.15.0-84-generic/kernel/drivers/example.ko
description: Example module
author: YourName
license: GPL
三、编译与安装自定义内核
编译自定义内核需要完整的内核源码和适当的开发工具。
1、下载内核源码
从 kernel.org 下载所需版本的内核源码。
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.125.tar.xz
解压源码:
tar -xvf linux-5.15.125.tar.xz
cd linux-5.15.125
2、配置内核
通过 make menuconfig
配置内核。
make menuconfig
说明:
- 提供交互式界面以启用或禁用内核模块和选项。
- 默认配置文件位于
/boot/config-$(uname -r)
。
3、编译内核
编译内核及其模块:
make -j$(nproc)
make modules_install
make install
说明:
-j$(nproc)
:利用多核 CPU 加速编译。
4、更新引导加载程序
安装完成后,更新 grub
配置以加载新内核。
sudo update-grub
5、重启系统
完成内核安装后重启,选择新内核启动。
sudo reboot
四、小结
通过本章学习,你已掌握以下内容:
-
查看内核信息:
- 使用
uname
和dmesg
查看内核版本和日志。
- 使用
-
加载与卸载内核模块:
- 使用
modprobe
、insmod
加载模块。 - 使用
rmmod
卸载模块。 - 使用
modinfo
查看模块详细信息。
- 使用
-
编译与安装自定义内核:
- 下载内核源码。
- 使用
make
编译内核和模块。 - 配置并更新引导程序。
内核与模块管理是 Linux 系统高级管理的核心技能,通过动态模块和自定义内核,可以根据需求灵活调整系统功能和性能。