一、编写linux内核模块
linux内核模块三要素:
入口:执行insmod 安装命令操作
出口: 执行rmmod 卸载命令操作
许可证:遵循GPL协议,开源,指定入口地址,出口地址
#include <linux/init.h> #include <linux/modules.h> //入口函数 static int __init demo_init(void) { return 0; } //出口函数 static void __exit demo_exit(void) { } module_init(demo_init);//指定入口地址 module_exit(demo_exit);//指定出口地址 MODULE_LICENSE("GPL");//遵循GPL协议
二、编译linux内核模块
借助Makefile进行编译
#arm架构linux内核路径 #KERNEDDIR := /home/ubuntu/linux-5.10.61/ #x86架构linux内核路径 KERNEDDIR := /lib/modules/$(shell uname -r)/build #打开终端,执行pwd命令 PWD := $(shell pwd) all: @#-C:跳转到指定的目录下,读取当前目录下的Makefile文件 @#M:回到当前驱动目录下,读取当前目录下的Makefile文件 make -C $(KERNEDDIR) M=$(PWD) modules clean: make -C $(KERNEDDIR) M=$(PWD) clean #添加驱动被编译文件 obj-m := demo.o