能够以字节流的形式访问而且只能顺序访问的设备叫做字符设备,针对字符设备编写的驱动叫做字符设备驱动
用户层: app: open("/dev/input/mouse0", O_RDWR);
read(), wirte(), close()
─────────────────────────────────────────────────────
内核层: 鼠标设备驱动
┌──────────────────────────┐ 鼠标设备驱动注册后会得
│ mouse_open() │ 到一个设备号可以创建
│ mouse_read() │ 鼠标设备文件 /dev/...
│ mouse_write() │ 设备号:13,32
│ mouse_close() │ 设备号 = 13 << 20 | 32
└──────────────────────────┘
─────────────────────────────────────────────────────
硬件层: 鼠标设备
应用层控制硬件需要完成的事情:
#include <linux/fs.h> // 头文件
// 函数原型
int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops);
功能:实现字符设备驱动的注册,这个函数申请了 256 个设备的资源,次设备号是 0 - 255。
参数:
major:注册的驱动对应的主设备号
major == 0:系统会自动分配一个主设备号major > 0: 会被当作主设备号,静态指定name:注册时填写的驱动名称fops:操作方法结构体指针返回值:
major == 0 时,成功返回主设备号,失败返回错误码