Rain_Saber
文章7
标签0
分类2
Linux实验

Linux实验

这是我个人上课学习,自己所编写的实验教程

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