什么是Linux内核模块?

Linux内核模块是能够被动态加载到内核中的代码片段,用于扩展系统功能。通过模块,开发者可以在不重新编译整个内核的情况下添加新特性,如硬件驱动、系统调用等。

Linux_内核模块基础

开发环境准备 🛠

  • 安装Linux系统(推荐Ubuntu 20.04或CentOS 7)
  • 配置内核头文件:sudo apt install linux-headers-$(uname -r)
  • 安装编译工具链:sudo apt install build-essential
  • 检查内核版本:uname -a

第一个内核模块示例 📄

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

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Your Name");

void hello_module(void) {
    printk(KERN_INFO "Hello, Linux kernel module!\n");
}

void goodbye_module(void) {
    printk(KERN_INFO "Goodbye, Linux kernel module!\n");
}

module_init(hello_module);  // 模块加载时调用
module_exit(goodbye_module); // 模块卸载时调用

模块加载与卸载 ⚙

  1. 编译模块:make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
  2. 安装模块:sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install
  3. 加载模块:sudo insmod hello.ko
  4. 查看日志:dmesg | tail
  5. 卸载模块:sudo rmmod hello

调试技巧 🔍

  • 使用printk输出调试信息
  • 通过/var/log/kern.log查看日志
  • 添加MODULE_INFO宏记录模块信息
Linux_内核模块调试

进阶学习推荐 📚

提示:开发内核模块需要谨慎操作,建议在虚拟机或测试环境中进行实验。