实验二:Linux 内核模块编程
16051532 叶文炜
目录
实验二:Linux 内核模块编程...........................................................................................................................1
一、项目设计方案...................................................................................................................................... 2
1. 本实验总体设计思路.................................................................................................................. 2
2. 本实验中主要函数的接口设计................................................................................................2
3. 主要函数程序设计思路、程序设计流程图........................................................................ 3
4. 对设计方案的创新性分析......................................................................................................... 4
二、项目实现过程...................................................................................................................................... 4
1. 实现过程中遇到的问题、原因及解决方法........................................................................ 4
2. 分析程序运行结果.......................................................................................................................8
3. 分析程序实现中的创新性;.................................................................................................... 8
三、对项目的进一步思考........................................................................................................................ 8
1. 分析你所实现的程序的性能、优缺点..................................................................................8
2. 考虑的改进思路............................................................................................................................8
3. 对实验的建议................................................................................................................................ 8
四、参考文献................................................................................................................................................9
五、完整代码................................................................................................................................................9
一、项目设计方案
1. 本实验总体设计思路
实现两个模块,第一个模块列出系统中所有内核线程的程序名、PID、进程状态、进程优先
级、父进程的 PID。通过`for_each_process`来遍历进程列表;用`task_struct->mm`判断是否
为内核线程;用`get_task_parent`来获得父进程;
第二个模块输入一 PID 输出该进程的家族信息、包括父进程、兄弟进程和子进程的程序名、
PID、进程状态。
2. 本实验中主要函数的接口设计
第一个模块,无需输入;
第二个模块,输入 PID。
3. 主要函数程序设计思路、程序设计流程图
Figure 1 模块一流程
Figure 2 模块二流程
4. 对设计方案的创新性分析
二、项目实现过程
1. 实现过程中遇到的问题、原因及解决方法
i. 编写第一个模块的代码
编写 Makefile
ii. 尝试编译,报错,如下
查阅资料,得知需要引入 init_task.h
引入 init_task.h 头文件,并且初始化变量。
iii. 再次编译,出现两个 warning
很明显是类型的问题,进行修正后再次编译。
没有报错。
iv. 使用 insmod 加载模块
发生错误找不到模块
查看当前目录发现确有 list.ko 文件
尝试使用 sudo insmod list.ko,成功加载。
使用 lsmod | grep list 确认是否成功加载:
v. 使用 dmesg 查看输出信息:
符合预期!
vi. 编写模块二代码
vii. 编写模块二 Makefile
viii. 使用 sudo insmod query.ko pid=320 加载模块
得到输出、符合预期
2. 分析程序运行结果
3. 分析程序实现中的创新性;
三、对项目的进一步思考
1. 分析你所实现的程序的性能、优缺点
2. 考虑的改进思路
3. 对实验的建议