温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是linux内核模块

发布时间:2026-09-11 06:36:09 来源:亿速云 阅读:89 作者:小樊 栏目:系统运维

Linux 内核模块(Linux Kernel Module,简称 LKM) 是一种可以在系统运行时动态加载和卸载到 Linux 内核中的代码片段。

简单来说:

内核模块 = 不重新编译内核,就能给 Linux 内核“加功能”的插件。


一、为什么需要内核模块?

Linux 内核本身非常庞大,如果所有功能都编译进内核:

  • 内核体积巨大
  • 修改功能要重新编译、重启
  • 不灵活

使用内核模块可以:

  • ✅ 动态扩展内核功能(如驱动、文件系统)
  • ✅ 不需要重启系统
  • ✅ 按需加载,节省资源

二、内核模块能做什么?

常见用途包括:

  • 设备驱动(网卡、USB、显卡等)
  • 文件系统支持(ext4、ntfs、overlayfs)
  • 网络功能(防火墙、桥接、隧道)
  • 系统监控与安全(SELinux、eBPF)

三、内核模块的特点

特点 说明
运行在内核态 权限高,出错可能导致系统崩溃
可动态加载 insmod / modprobe
可动态卸载 rmmod
依赖内核版本 不同内核一般不能混用
编译依赖内核源码 需匹配当前内核

四、常见命令

lsmod        # 查看已加载模块
insmod xxx.ko # 加载模块
modprobe xxx  # 智能加载(自动处理依赖)
rmmod xxx     # 卸载模块
modinfo xxx   # 查看模块信息

五、一个简单的例子(概念)

#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_init(void) {
    printk(KERN_INFO "Hello, kernel!\n");
    return 0;
}

static void __exit hello_exit(void) {
    printk(KERN_INFO "Goodbye, kernel!\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

编译后生成 .ko 文件,就是内核模块。


六、内核模块 vs 用户程序

对比项 内核模块 用户程序
运行空间 内核态 用户态
权限 最高 受限制
崩溃影响 系统可能宕机 只影响自己
调试难度 高 低

七、现代趋势

  • eBPF:更安全、灵活地扩展内核能力
  • 内置模块增多:很多功能直接编进内核
  • 模块签名:防止加载未授权模块(安全启动)

如果你愿意,我可以进一步讲:

  • 内核模块编译过程
  • 驱动开发入门
  • 内核模块与 eBPF 的区别
  • 常见内核崩溃排查

你想从哪一块开始?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手