下面将介绍一个简单的Linux内核驱动程序(部分),用于处理一个假设的字符设备(鼠标、键盘、串口、LED...),具体介绍如下:
1 头文件导入
#include <linux/fs.h> // 用于声明 file_operations 结构体和其他文件系统相关函数。
#include <linux/module.h> // 用于声明 module_init 和 module_exit 宏,并定义模块相关的功能。
#include <linux/init.h> // 用于声明 __init 和 __exit 宏。
#include <linux/device.h> // 用于声明 class 和 device 相关的结构体和函数。
#include <linux/uaccess.h> // 用于处理用户空间和内核空间之间的数据传输(如 copy_from_user)。
#include <linux/types.h> // 用于定义 dev_t 类型,它表示设备号。
#include <asm/io.h> // 用于声明 ioremap 和 iounmap 函数。
这些头文件提供了内核编程所需的基础功能,例如设备文件操作、内核模块初始化和退出、与用户空间进行交互等。
2 全局变量和宏定义
1)'pin4'为假设的设备,首先创建设备类'pin4_class'和设备文件'pin4_class_dev',用于在'/dev'目录下创建设备节点。
static struct class *pin4_class;
static struct device *pin4_class_dev;
2)定义设备号,包括主设备号(标识设备类型)及次设备号(标识设备实例),同时定义设备名称。
static dev_t devno; // 设备号,用于标识内核中的设备。
static int major = 231; // 主设备号231是为这个驱动手动分配的。
static int minor = 0; // 次设备号。
static cha