前言
环境:openeluer
内核:5.10.0+
代码参考:
通过网盘分享的文件: 链接: https://pan.baidu.com/s/14-4XSjm-wvpqxdWcGoXXvw?pwd=9gj7 提取码: 9gj7 复制这段内容后打开百度网盘手机App,操作更方便哦
内核模块相关的基本工具与信息
- lsmod:查看内核模块
- insmod:加载内核模块
- rmmod:卸载内核模块
一、hello驱动
在linux中,驱动本身不加载进内核的话就只是个模块,模块加载进内核后,才能被内核调用,所以,我们先编写一个最简单的hello驱动来验证一下
1 | // hello.c |
其中,
module_init()和module_exit()是内核模块的初始化和卸载函数__init和__exit是内核模块的初始化和卸载函数的宏定义MODULE_AUTHOR()是模块作者的宏定义,MODULE_LICENSE()是模块许可证的宏定义,MODULE_DESCRIPTION()是模块描述的宏定义
1 | # Makefile |
运行make生成模块文件hello.ko

运行insmod hello.ko加载模块
接着lsmod | grep hello查看模块是否加载成功
用dmesg能看到末尾有输出了我刚刚在hello_init()中打印的Hello world! I am Akira信息,模块加载成功
最后用rmmod hello卸载模块,重新运行dmesg,就能看到hello_exit()中输出Hello world! Akira exit
恭喜你,完成了第一个驱动的编写与加载!
