字符设备驱动
2019-11-16 本文已影响0人
4c6ed2800025
- 初始化时首先向内核申请主、次设备号,包括动态分配或者静态分配,
register_chrdev_region() - 对设备需要使用的资源进行分配以及初始化,比如内存、同步原语等;
- 初始化
cdev结构,将包含open、release、read、write等函数的file_operation结构赋值给cdev->dev, 然后使用函数cdev_add()函数向系统注册字符设备,此时完成字符设备与设备号、操作函数的关联; - 但
file_operate包含的函数接口为struct inode*和/或struct file *,那怎样才能找到我们的scull_dev结构体?所以需要在open函数中通过inode结构体的i_cdev获取字符设备指针,然后利用container_of获取scull_dev结构体指针,并赋值给filp->private_data,这样, 我们便可以在read、write、ioctl等函数中通过struct file *获取自定义字符设备的指针,即scull_dev啦。
image
image