关于 create_module 和 delete_module 的内核版本历史
create_module 废弃时间
delete_module 变化时间
Linux 2.6 内核开始改变行为
从系统调用转变为更安全的模块管理机制
现代系统中仍然存在,但行为更加受限
详细历史说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| /* * 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() 保留但增加安全检查 * - 强制模块签名(某些发行版) */
|
现代替代方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #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库来管理内核模块