该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
1.1.设备文件
/dev/
mknod
class_create
device_create
device_destroy
class_destroy
给系统调用open函数使用
open("/dev/设备文件名")
1.2.设备号
主设备号
次设备号
dev_t
12
20
MKDEV
MAJOR
MINOR
register_chrdev_region
alloc_chrdev_region
1.3.字符设备驱动涉及的数据结构
struct cdev:描述字符设备
.ops:此字段执行底层的硬件操作方法
struct file_operations:描述硬件的操作方法
.open
.release
.read
.write
.unlocked_ioctl
struct inode:描述文件的物理特性
.i_rdev:保存设备号
.i_cdev:指向对应的字符设备对象
struct file:描述文件被打开以后的状态
.f_op:指向底层驱动的硬件操作方法
read->...->file->f_op->read = led_read
write->...>file->f_op->write = led_write
ioctl->...>file->f_op->unlocked_ioctl = led_ioctl
close->...>file->f_op->release = led_close
它们能够正常执行的前提是open必须成功!
open作用就是将file->f_op指向驱动的硬件操作方法
2.linux内核混杂设备驱动相关内容
混杂设备其实还是字符设备,只是主设备号由内核分配,为10;
各个混杂设备通过次设备号进行区分;
描述混杂设备的数据结构:
struct miscdevice {
int minor; //次设备号,MISC_DYNAMIC_MINOR
char *name; //设备文件名,由内核创建
struct file_operations *ops; //指向硬件的操作方法
};
使用步骤:
1.分配初始化
2.注册misc_register
3.销毁misc_deregister