20135218 Linux 实践二 编译模块
2016-05-24 09:12
169 查看
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操作,输出如下:
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操作,输出如下:
相关文章推荐
- Linux 免密码登录
- 强悍的 Linux —— 强悍的 vim (二)
- (已解决scientificlinux 与windows7的双系统问题)在linux下修复/添加windows启动/引导项
- linux gcc编译undefined reference to `stricmp'问题
- linux wc命令
- linux tail命令的使用方法详解
- localdomain的linux域
- Linux 实验一 基础实践
- Linux 实验一 基础实践
- 每天一个Linux命令(26)chown命令
- linux 系统
- linux 学习笔记(三):open、creat、close 函数的使用,文件的创建、打开与关闭
- 基于柔性数组和类型转换以及sendmsg的消息组装方法
- Linux C++开发学习(一)
- Linux内核之进程和文件共享
- 安装centos7 按e编辑 修正无法发现/dev/root 问题
- AT91SAM9261EK Linux 3.10.12 yaffs2 移植成功
- Linux学习笔记一
- Linux学习笔记二
- centos7.2 ftp连接问题