linux 笔记 关于struct file 结构下 private_data 数据结构的思考
2014-09-26 17:26
302 查看
http://blog.csdn.net/bush2582/article/details/7731220
struct file是字符设备驱动相关重要结构。struct file代表一个打开的文件描述符,它不是专门给驱动程序使用的,系统中每一个打开的文件在内核中都有一个关联的 struct file。 它由内核在 open时创建,并传递给在文件上操
作的任何函数,知道最后关闭。当文件的所有实例都关闭之后,内核释放这个数据结构。
在 struct filed有个成员void *private_data;文档上说明该成员是系统调用时保存状态信息非常有用的资源。起初一直不明白这个private_data在驱动 open函数中的作用,后来发现private_data 这个成员在open函数被调用的时候 linux 系统就已经将其幅值为NULL,之后可供用户使用,或者比较悲剧的被用户忽略改域。
在详细的阅读源代码后,发现 这个private_data 其实是用来保存自定义设备结构体的地址的。自定义结构体的地址被保存在private_data后,可以在read ,write 等驱动函数中被传递和调用自定义设备结构体中的成员。
例如 可以在open函数中这么做
struct scull_dev *dev;
dev = container_of(inode->i_cdev,struct scull_dev,cdev);
filp->private_data = dev; /*for other methods*/
(container_of这个宏返回的是地址,即结构体的地址)
也可以使用C语言中的一些技巧实现地址的赋值
struct s3c2440_camif *dev =&camif;
file->private_data = dev;
struct file是字符设备驱动相关重要结构。struct file代表一个打开的文件描述符,它不是专门给驱动程序使用的,系统中每一个打开的文件在内核中都有一个关联的 struct file。 它由内核在 open时创建,并传递给在文件上操
作的任何函数,知道最后关闭。当文件的所有实例都关闭之后,内核释放这个数据结构。
在 struct filed有个成员void *private_data;文档上说明该成员是系统调用时保存状态信息非常有用的资源。起初一直不明白这个private_data在驱动 open函数中的作用,后来发现private_data 这个成员在open函数被调用的时候 linux 系统就已经将其幅值为NULL,之后可供用户使用,或者比较悲剧的被用户忽略改域。
在详细的阅读源代码后,发现 这个private_data 其实是用来保存自定义设备结构体的地址的。自定义结构体的地址被保存在private_data后,可以在read ,write 等驱动函数中被传递和调用自定义设备结构体中的成员。
例如 可以在open函数中这么做
struct scull_dev *dev;
dev = container_of(inode->i_cdev,struct scull_dev,cdev);
filp->private_data = dev; /*for other methods*/
(container_of这个宏返回的是地址,即结构体的地址)
也可以使用C语言中的一些技巧实现地址的赋值
struct s3c2440_camif *dev =&camif;
file->private_data = dev;
相关文章推荐
- linux 笔记 关于struct file 结构下 private_data 数据结构的思考
- 关于struct file 结构下 private_data 数据结构z作用
- kernel struct file结构中的private_data
- linux设备驱动第三版笔记---->linux驱动重要数据结构之struct file
- Linux struct file结构
- file结构中的private_data
- file结构中的private_data
- linux struct file结构
- Windows数据结构(Win32_FILE_ATTRIBUTE_DATA结构 —— GetFileAttributesEx函数案例)
- linux设备驱动第三版笔记---->linux驱动重要数据结构之file_operations
- Linux struct file结构
- file结构中的private_data
- 关于atexit,Linux中的t权限,Linux中的FILE结构体
- Linux struct file结构
- file结构中的private_data
- linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用
- 关于使用masm编译器产生的PE文件"data段"与"data?段"结构的思考与试验
- Linux网管笔记(16)关于Linux内核的编译
- 关于 debug assertion failed, file:dlgdata.cpp,line"43 错误解析
- ExtJS学习笔记(一):ExtJS程序的结构及如何定义js的private, public属性、方法