linux-自定义Linux内核模块
发布时间
阅读量:
阅读量
自定义Linux内核模块
- 开发平台
-
构建源代码模块
-
配置编译指令文件
-
执行构建操作
-
部署软件组件
-
检查安装结果
-
卸载模块
-
- 验证是否成功
-
开发环境
Linux系统版本:Ubuntu 18.04
工具:vim、make
注:其他linux系统也可以
编写模块文件
源码文件为helloworld.c
内容如下:
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int __init lkm_init(void){
printk("hello world\n");
return 0;
}
static void __exit lkm_exit(void){
printk("Goodbye\n");
}
module_init(lkm_init);
module_exit(lkm_exit);
MODULE_LICENSE("GPL");
尽管文件扩展名为.c(即.Composer),但仍需注意其语法遵循的是C语言规范而非完全的标准C语言。此外,在编写模块时是以内核为框架进行组织的
编写Makefile
在helloworld.c相同目录下新建Makefile文件,内容如下:
obj-m:=helloworld.o
CURRENT_PATH:=$(shell pwd)
LINUX_KERNEL:=$(shell uname -r)
LINUX_KERNEL_PATH:=/usr/src/linux-headers-$(LINUX_KERNEL)
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules
clean:
make -C $(LINUX_KERNEL_PATH) M=${CURRENT_PATH) clean
编译模块文件
执行命令
make
得到helloworld.ko文件,即为模块文件
安装模块
执行命令
sudo insmod helloworld.ko
验证是否成功
执行命令
dmsg
查看输出了我们代码中打印的 hello world
执行
lsmod | grep helloworld
可以看到我们的模块已经出现了
卸载模块
执行
sudo rmmod helloworld
验证是否成功
执行命令
dmsg
查看输出了我们代码中打印的 Goobye
执行
lsmod | grep helloworld
可以看到我们的模块已经不在了
全部评论 (0)
还没有任何评论哟~
