HDU网安操作系统课程设计 实验二

一 题目介绍

本实验通过编写Linux内核模块,加载内核模块,并测试结果,了解Linux 内核模块的概念、编译方法、安装和测试方法。

任务描述: 

  1. Linux 内核模块的基本概念 
  2. Linux 内核模块的编写方法 
  3. Linux 内核模块的加载和移除 
  4. Linux 内核模块的测试方法

实验目的: 

  1. 学习掌握 Linux 内核模块的编写 
  2. 学习掌握 Linux 内核模块的加载和移除 
  3. 学习掌握测试 Linux 内核模块

二 实验思路

图1:使用Linux内核模块流程图

三 遇到问题及解决方法

  1. 对于task_struct结构体的一知半解,不明白父子进程、兄弟进程的关系,最后通过学习知道了拥有同一个父进程的所有进程被称为兄弟,每个 task_struct都包含一个指向其父进程 task_struct的指针 parent,还有一个被称为 children 的子进程链表的关系。
  2. task_struct结构体中state的含义: 
  3. 对list_for_each和list_entry两个宏的学习,list_for_each相当于一个for循环去遍历链表,list_entry负责获取链表表头。
  4. 为什么list_entry的第3个参数要用sibling,children.next指向的是sibling成员,因此在使用list_entry()获得task_struct指针时,参数要用sibling而不是children。

四 核心代码及实验结果展示

图1:编写模块代码

图2:编写对应模块的Makefile文件

图3:编译文件夹内的文件并加载编译出来的.ko模块文件

图4:使用lsmod命令 看到我们的模块已经加载上了

图5:模块在日志中打印了系统名和版本号,与uname命令得到的内容相同

图6:编写模块代码

图7:编写对应模块的Makefile文件

图8:编译加载模块后使用dmesg查看日志

图9:如果输入一个不存在的pid,则无法正常输出

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值