内核模块的编写、编译、加载、卸载;Makefile的编写

来源:互联网 发布:百度大数据 编辑:程序博客网 时间:2024/06/05 08:38

1、创建实验目录

#mkdir /home/guoqian/4-1-2

#cd /home/guoqian/

           这是hello.c

2、编写内核模块hello.c、Makefile

 

这是Makefile

3、编译内核模块

#make

上图hello.ko为编译得到的内核模块

4、加载内核模块

#insmod hello.ko

注:注意观察输出打印语句

说明:在安装内核模块的时候,内核模块初始化函数hello_init得到调用,应该打印输出语句“Hello world!”;但并没有在终端上看到相应的信息,这是因为prink输出权限不够,在图形化界面中prink权限为KERN_EMERG,而初始化函数中prink语句的权限为KERN_ERR;所有打印输出信息都会保存在文件/var/log/message中,大家可以通过该文件来查看输出信息。

#vi /var/log/message

好吧,我们是不是可以这么想,如果我们把prink的权限改为KERN_EMERG,那么我们加载内核模块时,就会输出打印信息是么,下面是我验证的结果

5、查看内核模块

#lsmod

 

6、卸载内核模块

#rmmod hello

说明:大家可以发现在卸载内核模块的时候,内核模块卸载函数hello_exit得到调用,打印出了“hello exit”语句;或者从文件/var/log/messages也可以查看到打印输出信息。

7、再次查看内核模块

#lsmod | grep hello

 

看似简单的东西我却做了一天,学长还小小指点了一下,再次总结一下吧:1、刚开始我怎么做都不好使,经过确认才知道hello.c这个程序我敲错了

左边这个事正确的,右边是错误的,左边的init和exit前面有两个锻钢,右边的只有一个,这两个是完全不同,我费了挺多事儿才把上面那张图截下来就是希望以后学习者可以借鉴一下,当然我应该好好说明一下,但今天有点累了,我将会在下篇博客中详细说明。

2、当我们进入、/var/log/messages这个文件时,我们看到了大量的文字,那么我们怎么来查找自己想看的信息在哪呢。只需键入Enter键然后输入/ 然后输入你想查找的信息就可以了。