前言
我们现在就写一个驱动小demo,环境准备:要有个linux系统,我的demo系统是一台老掉牙的笔记本上,装了个Ubunut18.04LTS 版本的系统。uname -a 命令我们查看一下这个系统的内核信息,如下:
内核版本是 4.15.0. x86_64的系统。
这个有什么用呢?就是下载对应的内核源码?我们要查询源码里面的一个文件。文件的目录是:
linux-source-4.15.0/Documentation/kbuild
在这个路径下有个 modulex.txt文件。很重要,我们要用它。
我们的目的就是让这个驱动加载到我们这台Linux机器的系统里面。
入口函数
驱动需要一个入口函数,在加载期间告知内核,这个是入口,(道理类似于应用程序的main函数)。
该函数的类型必须遵循如下的格式:
int xxxxx_func(void);
注意:
1. 有一个 int 返回值,如果该驱动被成功加载了,那么该接口必须返回0,如果内部出错,可以返回 <0 的值,告诉内核,该模块加载不成功。
2. 一个驱动模块,只能有一个入口函数
3. 告诉内核的方式采用宏 wrap,如下:
module_init(xxxx_funct)
出口函数
如果需要,就添加一个出口函数,如果不需要,那就拉倒。当然,如果没什么资源需要被释放的,那么建议,出口函数就空