《linux设备驱动开发详解》中globalmem代码笔记
https://blog.csdn.net/star714/article/details/77388639
我知道container_of根据一个结构体变量中的一个成员变量的指针来获取指向整个结构体变量的指针,也试验了ok。
看到网上写的,
inode->i_cdev是系统函数inode结构体的成员指针,
struct globalmem_dev是用户自己定义的字符设备的结构体类型,
cdev是用户自己字符设备的结构体成员-字符设备cdev。
涉及到两个结构体,一个是系统自带的inode函数结构体,另一个是用户设备的结构体,这两个不是一个结构体,但是用container_of是为了打通什么吗?
container_of的作用是根据一个结构体变量中的一个成员变量的指针来获取指向整个结构体变量的指针。在这个代码中,inode->i_cdev是系统函数inode结构体的成员指针,而struct globalmem_dev是用户自己定义的字符设备的结构体类型,cdev是用户自己字符设备的结构体成员-字符设备cdev。container_of帮助找到用户自己定义的字符设备结构体地址,从而获取字符设备的相关信息。并且将这个结构体赋给filp->private_data
通过这个方法将inode结构体的成员i_cdev关联到globalmem_dev结构体, 从而在open、read、write、release操作中可以使用filp->private_data(dev)来操作globalmem_dev中的成员,而不需要再次转换关联。