ubuntu18.04下用insmod加载驱动程序报错:Operation not permitte

可能是BOIS下的security boot mode开启着,disable后大概率解决。
这篇文章主要记录一下编写驱动程序的过程,上面的问题困扰了我好久,开门见山的提出来方便相同问题的人更快找到。
首先照着老师的代码写

#include
#include
static int helloworld_init(void){
	printk(KERN_ALERT"hello world\n");
	return 0;
}
static void helloworld_exit(void){
	printk(KERN_ALERT"good bye\n");
}
module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_LICENSE("Dual BSD/GPL");

这个代码没法直接编译,要引入头文件的目录,直接写Makefile(注意大写)

ifeq ($(KERNELRELEASE),)
	KERNELDIR ?= /usr/src/linux-headers-5.3.0-46-generic
    PWD := $(shell pwd)
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
	obj-m := helloworld.o
endif

ifeq ($(KERNELRELEASE),)不懂,基本不变的固定开头;KERNELDIR就是编译完会把helloworld.ko驱动复制一份放到/usr/src/下,5.3.0-46-generic是linux内核,可以在终端中用uname -r查看;PWD := $(shell pwd)获取当前终端的目录,赋值给PWD;M=可以在给定路径自动找模块源码,编译生成.ko 文件。obj-m := helloworld.o 表明有一个模块要从目标文件 helloworld.o 建立。
这里我也不懂,反正在终端输入make构建成功了,下面是网上一篇比较详细的解析。

https://www.cnblogs.com/zhangjiebin/archive/2013/03/21/2972588.html

ubuntu18.04下用insmod加载驱动程序报错:Operation not permitte_第1张图片
构建完后出现好多文件,只有helloworld.ko是我们需要的,sudo insmod helloworld.ko加载驱动就完成了。实验完用sudo rmmod helloworld卸载。在终端执行dmesg可以看printk的内容。

你可能感兴趣的:(ubuntu18.04下用insmod加载驱动程序报错:Operation not permitte)