简易驱动程序

第一个驱动程序

1、编写驱动程序

##############hello.c############
#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
static int __init hello_init(void)
{
        printk(KERN_ALERT"Hello World!\n");
        return 0;
}
static void __exit hello_exit(void)
{
        printk(KERN_ALERT"Goodbye World!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

2、编写Makefile

obj-m:=hello.o
all:
        $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
        $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
  1. $(shell uname -r) 来代替你的内核版本
  2. uname -r 查看内核版本
  3. Makefile与上面的hello.c在同一文件夹,我给他们建了一个drvhello目录
  4. M=$(PWD)指定的是hello.c与Makefile所在的目录

3、在drvhello目录下 sudo make

make后生成一些文件,其中有我们非常想看到的模块目标文件hello.ko

在这里插入图片描述
过程:先进入Linux内核所在目录,并编译出hello.c文件,然后创建模块,运行MODPOST生成临时文件hello.mod.c文件,而后根据此文件编译出hello.mod.o,之后连接hello.o和hello.mod.o文件得到模块目标文件hello.ko,最后离开Linux内核所在的目录——某本书

4、sudo insmod hello.ko

情况一:成功
dmesg 查看结果,可以看到Hello World!的输出
在这里插入图片描述情况二:失败
insmod: ERROR: could not insert module hello.ko:Operation not permitted

  • 检查自己是否是在root超级用户下加载驱动模块
  • dmesg -c 把显示开机信息清除掉,再insmod hello.c查看错误。
  • 如果出现Lockdown: insmod: unsigned module loading is restricted; see man kernel_lock7的错误
  • 可能是你的secure boot的问题。那么请把你的BIOS的secure boot关了谢谢 。
  • 如果是open file error错误,检查自己所要打开的文件是否存在。

5、rmmod hello.ko

卸载模块:
在这里插入图片描述

参考博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值