您的位置:首页 > 运维架构 > Linux

Linux-内核模块编程

2016-04-15 13:42 621 查看
实验环境

VMware Workstation Pro下Linux Red Hat

内核版本:2.6.32

1.使用vim进行程序编写

(1)编写hello.c



包含两个必要的头文件linux/init.h包含模块初始化和清除、linux/modele.h包含模块加载的函数

“MODULE_LICENSE(“GPL”)”是进行模块许可证声明,内核模块应遵循 GPL 兼容许可权。

定义了两个函数,hello_init和hello_exit进行文字输出,在文字输出的时候使用了printk函数,这是linux内核函数,它与标准C的printf的不同就在于它可以通过设置优先级来决定输出信息的位置。

最后通过两个宏指令来注册调用。

(2)编写Makefile



通过hello.o来生成目标文件obj,其中-m表示这是一个模块

如果要编译内核,需要使用内核的Makefile文件,其路径是“/lib/modules/(版本号)/build”,其中的版本号使用“uname -r”指令动态获取。然后通过pwd记录当前的路径,以便返回到当前程序的目录。

2.运行程序验证结果



使用make命令,编译内核成功



使用ll命令查看当前文件夹中的文件,可以看到hello.ko,这是我们要加载的文件。使用insmod命令对模块进行加载。但是现在并没有看到对应的输出命令。



使用lsmod命令查看模块,可以看到我们的模块hello已经加载进去了,只是没有输出对应的信息。



使用dmesg命令检测内核环缓冲,可以看到模块的输出。



使用rmmod命令将模块卸载,并查看模块,验证该模块真的被卸载掉了。



最后再使用dmesg查看模块卸载的输出信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vim linux 内核 模块