1 模块程序
PS:举个例子–文件名hello.c
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/init.h>
int init_hello_module(void)
{
printk("Hello! This is a testing module1!\n");
return 0;
}
void exit_hello_module(void)
{
printk("Sorry! The module1 is unloading!\n");
}
module_init(init_hello_module);
module_exit(exit_hello_module);
MODULE_LICENSE("GPL");
个人建议,经过我多次通过make运行。int init_hello_module----你应该按这样格式写
int init_XXXX_module----个人建议而已,不喜勿喷。第二个函数也一样。
2 编写Makerfile文件、
用终端新建–指令:vi Makerfile
vi + 文件名
obj-m := hello.o //hello为你的要编译文件名
下面的格式很重要--请注意!!!--格式举例子↓
all: ----直接敲回车
(这里相当于按了tab分隔符)make..........这里会这就这样子
//注意空格!!!
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
3 加载模块程序
这里,我们在终端输入:make 就能得到hello.ko、hello.o文件
注意,如果输入make提示安装插件,必须要装的哦!!具体指令看提示,我懒得找!!
PS:这个hello.ko文件很重要
接下来我们准备加载模块了!
指令:sudo insmod hello.ko
输入完这个指令,是不会显示如何东西的。那么我们怎么知道有没有加载成功呢?
指令:lsmod | grep hello (是L不是i哦!!)
我就懒得截图。算了,我还是截图吧。。。。。o(╯□╰)o
4 模块输出
由于网上指令一大堆,也试了,结果都有问题。。。所以,我就懒得去弄,当然我也会提供这些方法出来。
感兴趣的话,你也可以去试试!
我的指令的话,在终端输入,是这个:
dmesg //我所使用的 //网上所使用的指令 cat syslog | grep hello tail -n /var/log/messages
这里没图,具体情况就是,显示的文字在最后面,不用往前面翻!!
5 模块卸载
//必须使用管理员才能卸载 sudo rmmod hello.ko
同样,不会显示是否成功之类的信息!
使用下面代码查看有没有打印出模块函数里面写的信息,代码的情况也一样,具体看上面
dmesg
欢迎访问我的私人博客:我的私人博客