《linux内核设计与实现》实践之模块及深入

写在前面的话。

基础模块部分我已经做完了,设计到的知识点无非就是,编写模块代码,编写Makefile文件,加载模块和卸载模块部分。由于大家都写了这部分的博客,我也就不再赘述,我重点想写一下,页表模块的深入和改进。

一、编写代码

二、编写Makefile文件

三、加载模块,尝试运行

查看gedit进程号可知为pid = 18968

查看gedit的起始地址0x0804880c

转化为10进制数为134514700,即va = 134514700

出现问题

原因是没有在root权限下加载。

解决:

首先要写在之前的加载失败的模块scn(虽然失败,但是已经加载)

接着在root权限下重新加载。

检查是否加载成功

Tail查看相关信息,出现错误

错误原因是,我在解决第一个问题的时候,把gedit scn.c进程关闭了,所以pid号发生了改变。

解决方法:重新做一遍,先卸载scn模块。

为了方便起见,我之后的实验都在root权限下做。

Pid = 20101

edit的起始地址0x0804880c ,发现没有改变,即va = 134514700

结果还是失败了,所以我准备换一个进程看看是什么情况,这次用firefox

但是,我发现firefox并不是一个可执行文件,并不能反汇编,所以我还是回到了最初的起点。。。。。。。

这一次成功加载。

查看模块运行信息。

可以看到上一次失败的运行信息。

这一次的失败原因是

Va的值找的不对,应该看得是init处的起始地址,我找的是init@@Base处的起始地址。

在尝试多种修改后,还是不能解决问题。我又重新看了一遍原理。

由于一直失败,我猜测可能是我参考的学姐的代码并不适用于我的虚拟机,我仔细研究了一下原理后,发现可能是我的虚拟机虽然是32位,但是是可以进行地址扩展的。所以,不能只用页全局目录(Page Global Directory)、 页表(Page Table)两种页表就可以,还要加上页上级目录(Page Upper Directory)、页中间目录(Page Middle Directory)。所以修改后的源代码如下图所示。

因为makefile文件,已经写好了,就不需要更改了,直接make就可以了。可以成功生成5315.ko文件。

接下来就是加载模块了,我们需要获得pid的信息。

由上图知Pid = 24268

接着查看va的值,发现va的值不变,所以可以直接加载模块。成功加载后,查看相关信息。

使用dmesg命令查看详细信息的结果如下图所示。

发现结果是一致的,所以说明我们编写的模块功能可以正常实现。

下面尝试新的做法。

未完待续。。。。。。

《linux内核设计与实现》实践之模块及深入的更多相关文章

  1. linux内核设计与实现学习笔记-模块

    模块 1.概念:  如果让LINUX Kernel单独运行在一个保护区域,那么LINUX Kernel就成为了“单内核”.    LINUX Kernel是组件模式的,所谓组件模式是指:LINUX K ...

  2. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

    本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...

  3. 《Linux内核设计与实现》 第一二章学习笔记

    <Linux内核设计与实现> 第一二章学习笔记 第一章 Linux内核简介 1.1 Unix的历史 Unix的特点 Unix很简洁,所提供的系统调用都有很明确的设计目的. Unix中一切皆 ...

  4. 《Linux内核设计与实现》学习记录一

    chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...

  5. 初探内核之《Linux内核设计与实现》笔记下

    定时器和时间管理 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关 ...

  6. 《Linux内核设计与实现》CHAPTER17阅读梳理

    <Linux内核设计与实现>CHAPTER17阅读梳理 [学习时间:3.5hours] [学习内容:设备类型,模块,内核对象,sysfs] 个人思考部分见[]标出的部分 一.课堂讲解整理& ...

  7. 《Linux内核设计与实现》课本第四章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第四章自学笔记 进程调度 By20135203齐岳 4.1 多任务 多任务操作系统就是能同时并发的交互执行多个进程的操作系统.多任务操作系统使多个进程处于堵 ...

  8. 《Linux内核设计与实现》课本第十八章自学笔记——20135203齐岳

    <Linux内核设计与实现>课本第十八章自学笔记 By20135203齐岳 通过打印来调试 printk()是内核提供的格式化打印函数,除了和C库提供的printf()函数功能相同外还有一 ...

  9. 《Linux内核设计与实现》课本第五章学习笔记——20135203齐岳

    <Linux内核设计与实现>课本第五章学习笔记 By20135203齐岳 与内核通信 用户空间进程和硬件设备之间通过系统调用来交互,其主要作用有三个. 为用户空间提供了硬件的抽象接口. 保 ...

随机推荐

  1. python logging模块笔记

    1 ) 给logger定制了两个日志级别INFO和DEBUG,分别通过filehandler添加不同输出到不同文件,但如何让DEBUG里只有DEBUG的信息? 答案:可重写DEBUG对应的Fileha ...

  2. winfrom获取用户控件里的控件对象

    如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...

  3. union和union all 合并查询

    union联合查询 SELECT TOP ID,oTitle Title,oInfo Description,Pic Images AND UpTime > dateadd(day,-,UpTi ...

  4. 51nod1072(wythoff 博弈)

    题目链接: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1072 题意: 中文题诶~ 思路: 博弈套路是有的, 找np局 ...

  5. Win32中TreeView控件的使用方法,类似于资源管理器中文件树形显示方式

    首先是头文件,内容如下: #include <tchar.h> #include "..\CommonFiles\CmnHdr.h" #include <Wind ...

  6. Logging vs NoLogging

    You Asked My Prod environments is like this. Three Node RAC, Active Data guard enabled. There is a p ...

  7. 拉风的服务器监控工具,随时掌握服务器动态,AgileEAS.NET SOA 平台服务器监控工具集介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. 微信扫描打开APP下载链接提示代码优化(转)

    上一次我发了一篇文章叫“微信打开网址添加在浏览器中打开提示”,里面我发出来了三个代码,分别是纯JS.js+html.jQuery+HTML代码.今天来一个简化版带可以关闭的按钮操作.使用的是纯JS+H ...

  9. 【MyEcplise】build workspace卡死

    1.window-Perferences-MyEclipse-Validation 将Manual全部勾掉,Build只留Classpath DependencyValidator,其它全部勾掉. 2 ...

  10. IDF实验室:倒行逆施

    简单的PE文件逆向(.exe-IDA) 下载下来文件之后发现是一个exe文件,运行以后发现.