Linux内核模块的深入探索与调试技巧
1. 内核模块的调用与加载
在处理内核时,警告往往意味着大麻烦。通过系统的 man 手册可以发现,对于头文件有一段奇怪的描述。例如, glibc 没有提供 init_module() 的头文件声明,也没有 finit_module() 的包装函数。但通过一系列命令查看标准C库时,会发现相关的库调用如 init_module 、 delete_module 等存在于库中,却不在头文件里。这是因为内核开发者不想在用户空间宣扬内核模块操作,系统命令 insmod 和 rmmod 使用这些操作,开发者移除了函数原型,但保留了函数本身。
在32位系统中,代码也能正常编译和执行。之前我们从应用程序代码动态加载和卸载 slave.ko 模块,现在要从调用模块 master.ko 的代码中实现相同功能。以下是 master.c 的代码:
#include <linux/version.h>
#include <linux/fs.h>
#include <linux/vmalloc.h>
#include "../common.c"
#include "../find.c"
static char* file = "./slave.ko";
mod
超级会员免费看
订阅专栏 解锁全文
930

被折叠的 条评论
为什么被折叠?



