create_module系统调用及示例

关于 create_module 和 delete_module 的内核版本历史

create_module 废弃时间

  • Linux 2.6 内核(2003年左右)开始逐步废弃
  • Linux 2.6.8 版本后完全移除
  • 最后支持的内核版本:Linux 2.4.x

delete_module 变化时间

  • Linux 2.6 内核开始改变行为
  • 从系统调用转变为更安全的模块管理机制
  • 现代系统中仍然存在,但行为更加受限

详细历史说明

/*
 * Linux 内核模块管理演进历史:
 * 
 * Linux 2.0-2.4 (1996-2003):
 * - 使用 create_module() 分配内核内存
 * - 使用 delete_module() 卸载模块
 * - 相对简单的模块加载机制
 * 
 * Linux 2.6+ (2003年至今):
 * - 引入 init_module() 替代 create_module()
 * - delete_module() 仍然可用但更加安全
 * - 模块签名验证机制
 * - 更严格的权限控制
 * 
 * 现代 Linux (3.0+):
 * - 模块加载通过 finit_module() 系统调用
 * - delete_module() 保留但增加安全检查
 * - 强制模块签名(某些发行版)
 */

现代替代方案

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("=== 现代内核模块管理 ===\n");
    printf("Linux内核版本演进:\n");
    printf("- 2.4及以前: create_module/delete_module\n");
    printf("- 2.6开始: init_module/delete_module\n");
    printf("- 3.0+: fini_module/delete_module\n\n");
    
    printf("create_module废弃时间: Linux 2.6.8 (2004年)\n");
    printf("最后支持版本: Linux 2.4.37 (2009年停止维护)\n\n");
    
    printf("现代替代方案:\n");
    printf("1. 用户空间工具:\n");
    printf("   - insmod: 加载模块\n");
    printf("   - rmmod: 卸载模块\n");
    printf("   - lsmod: 列出模块\n\n");
    
    printf("2. 系统调用:\n");
    printf("   - init_module(): 加载模块\n");
    printf("   - finit_module(): 文件描述符版本的init_module\n");
    printf("   - delete_module(): 卸载模块(仍在使用)\n\n");
    
    printf("3. 程序化使用:\n");
    printf("   - libkmod库提供高级API\n");
    printf("   - modprobe命令处理依赖关系\n");
    
    return 0;
}

总结

  • create_module: Linux 2.6.8 (2004年) 后完全废弃
  • delete_module: 仍在使用,但在现代内核中有更多安全限制
  • 对于现代Linux系统编程,应该使用用户空间工具或libkmod库来管理内核模块
此条目发表在linux文章分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注