字符设备驱动框架,与设备模型没有任何直接关系,互相独立。
但是,通常有间接关系:字符设备驱动可能会主动搭配平台设备模型使用。
1. 字符设备驱动
字符设备驱动,有一套自己独有的数据结构,比如设备号、 struct cdev,不复杂都是基于 kobject 的微弱派生出来的体系。另外它与其他子系统互联互动,比如 VFS 进程 ,实现一套独立、精简、朴素的、灵活的、实用的驱动框架。
字符设备驱动的使用过程:
1.1 注册过程:
1. 准备 file_operations 结构体内必要的驱动函数;
2. 向字符设备框架申请设备号资源;
3. 初始化 cdev 结构体 cdev_init(dev, &fops);
4. 注册进 cdev core : cdev_add(dev, dev_num, MINOR_COUNT);
以上是必不可少的环节,下面是可选的,通常会有的:
5. 创建设备类:dev_class = class_create(THIS_MODULE, CLASS_NAME);
6. 创建设备节点:dev_device = device_create(dev_class, NULL, dev_num, NULL, DEVICE_NAME);
1.2 动态描述:
1. cdev core 和 VFS、进程协同工作;
2. 应用层调 open/read/write/lseek ,会陷入到系统调用对应的 sys_xxxs,最终会调用到内核里字符设备驱动注册过的 file_operations 的 open/read/write/llseek 驱动函数。