第24章:openEuler 内核与模块管理

Linux 内核是操作系统的"心脏",负责管理硬件、进程、内存和文件系统。openEuler 基于长期支持的 Linux 内核,并针对企业级场景进行了优化。本章将带你深入内核世界,掌握如何查看内核信息、管理内核模块、理解模块依赖,并了解内核升级的基本流程,让你从"系统使用者"迈向"系统理解者"。

🌟 本章目标

  • 查看内核版本、编译信息与运行时参数
  • 理解内核模块(Kernel Module)的作用与工作原理
  • 使用 lsmodmodprobeinsmodrmmod 管理模块
  • 探查模块依赖关系与加载顺序
  • 实战:加载一个内核模块(如 vfatiptable_nat
  • 了解内核升级与补丁管理基础

24.1 查看内核基本信息

✅ 1. 查看内核版本

bash 复制代码
uname -r

输出示例:

复制代码
5.10.0-216.0.0.115.oe2203sp4.x86_64
  • 5.10.0:主版本
  • 216.0.0.115.oe2203sp4:openEuler 定制补丁版本
  • x86_64:架构

✅ 2. 查看完整内核信息

bash 复制代码
uname -a

输出:

复制代码
Linux localhost.localdomain 5.10.0-216.0.0.115.oe2203sp4.x86_64 #1 SMP ...
  • SMP:支持多处理器

✅ 3. 查看内核编译信息

bash 复制代码
cat /proc/version

显示内核编译时的 GCC 版本、编译时间等。


✅ 4. 查看内核日志(启动信息)

bash 复制代码
dmesg | head -20

或使用 journalctl

bash 复制代码
journalctl -k --no-pager | head -20

查看硬件检测、驱动加载等启动过程。


24.2 什么是内核模块?

内核模块(Kernel Module) 是可以动态加载到内核的代码单元(.ko 文件),用于扩展内核功能,而无需重新编译整个内核。

✅ 模块的优势

  • 灵活性:按需加载,节省内存
  • 可维护性:驱动更新无需重启
  • 安全性:隔离故障模块

常见模块类型

  • 设备驱动:网卡、显卡、USB 设备
  • 文件系统ext4xfsvfatnfs
  • 网络协议iptable_natip_vs(LVS)
  • 加密模块:国密算法支持

24.3 内核模块管理命令

🔍 1. lsmod ------ 列出已加载模块

bash 复制代码
lsmod

输出:

复制代码
Module                  Size  Used by
vfat                   24576  0
fat                    73728  1 vfat
iptable_nat            16384  0
nf_conntrack          151552  1 iptable_nat
...
  • Module:模块名
  • Size:大小(字节)
  • Used by:被多少个其他模块引用

🔌 2. modprobe ------ 智能加载/卸载模块(推荐)

modprobe 会自动处理依赖关系。

加载模块
bash 复制代码
sudo modprobe vfat

自动加载 vfat 及其依赖 fat

卸载模块
bash 复制代码
sudo modprobe -r vfat

-r 表示递归卸载未被引用的依赖模块。


🧩 3. insmod / rmmod ------ 手动加载/卸载(不推荐)

不处理依赖,需手动操作。

手动加载
bash 复制代码
sudo insmod /lib/modules/$(uname -r)/kernel/fs/fat/fat.ko
sudo insmod /lib/modules/$(uname -r)/kernel/fs/fat/vfat.ko
手动卸载
bash 复制代码
sudo rmmod vfat
sudo rmmod fat

⚠️ 顺序错误会导致 Device or resource busy


🔎 4. modinfo ------ 查看模块信息

bash 复制代码
modinfo vfat

输出:

复制代码
filename:       /lib/modules/5.10.0-216.0.0.115.oe2203sp4.x86_64/kernel/fs/fat/vfat.ko.xz
version:        2.0
license:        GPL
description:    VFAT filesystem support
author:         Gordon Chaffee
depends:        fat
...

✅ 查看依赖、作者、描述等元数据。


24.4 模块依赖关系

内核模块之间存在依赖关系,必须按顺序加载。

查看依赖

bash 复制代码
modinfo vfat | grep depends
# 输出:depends:        fat

查看谁依赖我

bash 复制代码
modinfo fat | grep "used by"

或从 lsmodUsed by 列查看。


24.5 实战:加载 VFAT 文件系统模块

场景

你的 openEuler 系统需要挂载一个 U 盘(FAT32 格式),但 vfat 模块未加载。

步骤1:检查是否已加载

bash 复制代码
lsmod | grep vfat

若无输出,说明未加载。

步骤2:加载模块

bash 复制代码
sudo modprobe vfat

步骤3:验证

bash 复制代码
lsmod | grep vfat
# 应看到 vfat 和 fat 模块

步骤4:挂载 U 盘

bash 复制代码
sudo mkdir /mnt/usb
sudo mount -t vfat /dev/sdb1 /mnt/usb

✅ U 盘成功挂载!


24.6 内核升级与补丁管理

openEuler 通过 DNF 提供内核更新。

查看可用内核版本

bash 复制代码
dnf list kernel --showduplicates

安装新内核

bash 复制代码
sudo dnf install -y kernel

查看已安装内核

bash 复制代码
rpm -q kernel

查看 GRUB 启动项

bash 复制代码
awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg

设置默认启动内核

bash 复制代码
# 查看内核顺序(从0开始)
sudo grub2-editenv list

# 设置默认为最新内核(假设是第0个)
sudo grub2-set-default 0

重启生效

bash 复制代码
sudo reboot

⚠️ 升级前建议备份重要数据,保留旧内核以防新内核无法启动。


24.7 内核参数与运行时调优

内核运行时参数可通过 /proc/sys/sysctl 调整(详见第21章)。

查看所有可调参数

bash 复制代码
sysctl -a

临时修改

bash 复制代码
sudo sysctl net.ipv4.ip_forward=1

永久修改

bash 复制代码
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

✅ 本章小结

命令 用途 示例
uname -r 查看内核版本
lsmod 列出已加载模块 `lsmod
modprobe 加载/卸载模块(推荐) modprobe vfat
modinfo 查看模块信息 modinfo iptable_nat
insmod/rmmod 手动加载/卸载 不处理依赖
dnf install kernel 升级内核
sysctl 调整内核参数 sysctl net.ipv4.ip_forward=1

📝 课后练习

  1. 使用 uname -rcat /proc/version 查看内核信息。
  2. 使用 lsmod 查看当前加载的模块,找出 xfs 是否已加载。
  3. 使用 modinfo 查看 xfs 模块的描述和作者。
  4. 尝试加载 vfat 模块,并验证是否成功。
  5. 使用 modprobe -r 卸载 vfat 模块(如果未被使用)。
  6. (挑战)查找 iptable_nat 模块的依赖,并手动使用 insmod 加载(注意顺序)。

🔜 下一章预告:第25章《openEuler 项目实战:搭建 LAMP/LEMP 服务器》

我们将综合运用前24章所学知识,完成一个完整的项目:

  • 在 openEuler 上安装 Apache/Nginx、MySQL/MariaDB、PHP
  • 配置虚拟主机与 HTTPS(Let's Encrypt)
  • 部署一个简单的 PHP 应用(如 WordPress 前身)
  • 进行安全加固(防火墙、SELinux、权限)
  • 实现自动化备份

准备好将所有技能融会贯通了吗?

相关推荐
sayang_shao12 小时前
ARM架构运行模式学习笔记
arm开发·学习·架构
坤坤藤椒牛肉面13 小时前
arm基础IMX6ULL----点亮led
arm开发
Flamingˢ13 小时前
基于ARM的裸机程序设计和开发(四):硬件编程原理与GPIO控制思路
arm开发
aseity16 小时前
Debian10 ARM KVM 虚拟机安装记录
arm开发
li星野18 小时前
RTOS面试完整模拟题(嵌入式系统方向)
arm开发·面试·职场和发展
路溪非溪21 小时前
BLE的广播、扫描和连接等工作机制总结
linux·arm开发·驱动开发
忆和熙1 天前
AArch64异常指令与异常表(ARMv8异常机制——AArch64异常调用指令与异常表)
arm开发·arm异常
szxinmai主板定制专家1 天前
基于 STM32 + FPGA 船舶电站控制器设计与实现
arm开发·人工智能·stm32·嵌入式硬件·fpga开发·架构
Flamingˢ1 天前
基于ARM的裸机程序设计和开发(三):C编程基础与Zynq裸机开发常用方法
c语言·arm开发·单片机