20135218 Linux 实践二 编译模块
20135218 姬梦馨
1、编写模块代码
模块构造函数:执行insmod或modprobe指令加载内核模块时会调用的初始化函数。函数原型必须是module_init(),括号内是函数指针
模块析构函数:执行rmmod指令卸载模块时调用的函数。函数原型是module_exit()
头文件module.h,必须包含此文件;
头文件kernel.h,包含常用的内核函数;
头文件init.h包含宏_init和_exit,允许释放内核占用的内存。
写一个简单的代码,用来向内核输出一段文字。

3、编译模块
接下来写Makefile。
(其中,all到make的过程中要使用“回车+Tab”键)
第一行:自己写的.c的文件名+”.o”。
第三行的LINUX_KERNEL_PATH后面要写你自己的内核版本对应的内核源码包地址.
解释一下make命令:
make -C $(LINUX_+KERNEL_PATH) 指明跳转到内核源码目录下读取那里的Makefile
M=$(CURRENT_PATH) 表明返回到当前目录继续执行当前的Makefile。

代码很简单,其中 LINUX_KERNEL_PATH 包含了自己的虚拟机的内核地址。
使用 make命令 来编译。要使用tab 补全,不然写好的代码不能用。
make之后的执行时这样的:

生成了好多文件:

4、加载模块
sudo insmod 1.ko
输入密码后即可。此时已经加载了模块。

5、测试模块
Dmesg:看内核信息

6、卸载模块
sudo rmmod 1
这时用dmesg看内核信息,就会看到写在module_exit()中的输出。
7、实现输出当前进程信息的功能
1:代码

Makefile如下:
之后make:
sudo insmod 2.ko:

Dmesg:看内核信息。

实现了代码的功能,验证成功。
8、实现读取进程链表的功能
在上一个代码的基础上,修改代码。

可以看到,我用了一个叫做for_each_process()的宏,它的定义如下:

其实就是个for循环,从第一个PCB(叫做init_task)开始,顺着next指针读了一圈。
修改Makefile,进行make,insmod操作,输出如下:


20135218 Linux 实践二 编译模块的更多相关文章
- 20135337——Linux实践二:模块
一.编译&生成&测试&删除 1.编写模块代码,查看如下 gedit 1.c(编写) cat 1.c(查看) MODULE_AUTHOR("Z") MODUL ...
- Linux实践二:模块
一.基本模块的实现: 1.进程遍历打印输出 2.简单地编写一个新的系统调用(替换空的系统调用号) 基本模块学到的知识点: 1.相关指令 make oldconfig 配置内核 make 编译内核 ma ...
- 【实践报告】Linux实践二
3.编译并安装内核与模块 sudo make bzImage –j3 编译内核 sudo make modules –j3 编译模块 sudo make modules ...
- linux内核分析实践二学习笔记
Linux实践二--内核模块的编译 标签(空格分隔): 20135328陈都 理解内核的作用 Linux内核[kernel]是整个操作系统的最底层,它负责整个硬件的驱动,以及提供各种系统所需的核心功能 ...
- Linux课程实践二:编译模块实现内核数据操控
一.内核模块原理 1. Linux内核增加功能 Linux内核整体结构很庞大,包含了很多的组件,现在有两种方法将需要的功能包含进内核当中: - 静态加载:将所有的功能都编译进Linux内核. - 动态 ...
- Linux及安全实践二——模块
Linux及安全实践二--模块 一.模块的编译.生成.测试.删除 1.编写模块代码 编写:gedit 3.c 2.编写Makefile obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj ...
- linux 实践2.2 编译模块
1. 理解模块原理 linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展性和可维 ...
- 《Linux及安全》课程实践二
编译生成新内核 一.实践原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容都集成在一起,效率很高,但可扩展 ...
- Linux内核 实践二
实践二 内核模块编译 20135307 张嘉琪 一.实验原理 Linux模块是一些可以作为独立程序来编译的函数和数据类型的集合.之所以提供模块机制,是因为Linux本身是一个单内核.单内核由于所有内容 ...
随机推荐
- 关于plist文件的那些事
今天遇到新生问一个问题,就是用自己定义了一个plist文件,然后可以往里面写东西,但是写过再次运行的时候里面的数据总是最后一次写入的数据.后来就专门研究了一下plist文件. 大家都知道当你创建一个项 ...
- Alpha冲刺 - 事后诸葛亮
Alpha冲刺 - 事后诸葛亮 Alpha完成情况表 Stardust(安卓端) 模块 预期计划 现实进展 完成度 登录/注册 登录时,从服务器拉取的数据并同步数据库.获取的数据有:用户名.密码.记录 ...
- JAVA中MAP转LIST
@Test public void testMap2List() throws Exception{ Map<String, String> map = new HashMap&l ...
- Sketch webView方式插件开发技术总结
相信大家都对Sketch有一定的了解和认识.除了基础的矢量设计功能以外,插件更是让Sketch保持强大的独门秘籍.Sketch开放了第三方插件接口,设计师可以在几百种的插件中轻松找到适合自己工作方式的 ...
- 【BZOJ2159】Crash的文明世界
[2011集训贾志鹏]Crash的文明世界 Description Crash小朋友最近迷上了一款游戏--文明5(Civilization V).在这个游戏中,玩家可以建立和发展自己的国家,通过外交和 ...
- Linux安装solr
solr官网下载地址为:http://mirror.bit.edu.cn/apache/lucene/solr/ 以7.6.0版本作为实践 1.下载 wget http://mirror.bit.ed ...
- Percona XtraDB Cluster集群
官网参考地址: https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.html 前期准备: 都用的root权限或使用s ...
- NSTimer深入理解
NSTimer,即计时器,用于定时执行一些任务,一次或者多次. 系统Foundation框架提供的最常用方法如下,创建一个NSTimer,并将它放到当前runloop的default mode中. + ...
- 【Codeforces Round 1110】Codeforces Global Round 1
Codeforces Round 1110 这场比赛只做了\(A\).\(B\).\(C\),排名\(905\),不好. 主要的问题在\(D\)题上,有\(505\)人做出,但我没做出来. 考虑的时候 ...
- <转>安全测试思维导图
最近有监控到公司的某些系统在某些时间段出现大量的HTTP或者TCP连接,考虑到安全性,老大让我研究研究安全测试... 正好今晚从订阅的码农周刊(开发者头条)看到了一篇安全测试相关的帖子,做个搬运工,分 ...