欢迎使用CSDN-markdown编辑器
来源:互联网 发布:2016年大数据产业规模 编辑:程序博客网 时间:2024/06/02 01:24
写一个简单的module、编译、挂/卸载
写hello.c
写一个linux的模块文件,这样才能进行模块编译。在加载这个模块的时候可以修改这个nbr变量的值。yuer_init()函数将在模块加载的时候运行,通过输出的结果可以看到模块是否加载成功。
#include <linux/init.h> #include <linux/module.h> MODULE_AUTHOR("your name"); MODULE_LICENSE("xxx"); static int nbr = 5; module_param(nbr, int, S_IRUGO); static int __init yuer_init(void) { int i; for(i=0; i<=nbr;i++) { printk(KERN_ALERT "Hello, How are you. %d\n", i); } return 0; } static void __exit yuer_exit(void) { printk(KERN_ALERT"I come from yuer's module, I have been unlad.\n"); } module_init(yuer_init); module_exit(yuer_exit);
写Makefile(非makefile)
obj-m := modules.o #要生成的模块名 modules-objs:= mymod.o #生成这个模块名所需要的目标文件 KDIR := /lib/modules/3.13.0-100-generic/build #这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境 PWD := $(shell pwd)default: make -C $(KDIR) M=$(PWD) modulesclean: rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions
obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj-m := <模块名>.o
modules-objs :这个变量是说明声称模块modules需要的目标文件 格式要求 <模块名>-objs := <目标文件>
切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymod;
KDIR :这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境
M= :指定我们源文件的位置
PWD :这是当前工作路径$(shell )是make的一个内置函数。用来执行shell命
编译模块
在命令终端进入源文件目录,输入make运行结果:
挂载module
从上图的编译结果可以看到。有一个modules.ko生成了。这就是我们的模块。
现在我们就可以来加载了。
首先在终端输入:sudo insmod modules.ko
在终端输入:dmesg | tail -5 这是查看内核输出信息的意思。tail -5 显示最后5条;
显示结果如下:
可以看出,模块已经挂载成功,且正常输出了源程序功能。
卸载module
在终端输入:sudo rmmod modules
在终端输入:dmesg | tail -2
加载模块时传递参数(nbr)
在终端输入:sudo insmod modules.ko nbr=4
在终端输入:dmesg | tail -6
显示结果如下:
查看模块的信息
模块加载成功。我们还可以通过modinfo来查看我们的模块信息。如下
在终端输入:
显示结果:
http://blog.sina.com.cn/s/blog_4ba5b45e0102v25h.html
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- volte遇上VOWIFI
- poj 2155 Matrix
- 基于motion的视频压缩的实时监控系统
- PHP学习笔记 (基础篇)
- js前端表单验证(禁止输入)
- 欢迎使用CSDN-markdown编辑器
- ECharts
- Js实现16/19位银行卡号前端校验
- 杭电ACM2050java做法
- 利用postgreSQL管理地图数据库
- 168. Excel Sheet Column Title
- java成员对象
- C++里面获取单个进程的内存利用率
- php中simplexml_load_file函数用法实例