关于 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库来管理内核模块
Post Views: 12