LINUX驱动的私有变量

关于linux的filp->private_data解释 首先给出filp的结构体:struct file struct file {   union {    struct list_head fu_list; //文件对象链表指针linux/include/linux/list.h    struct rcu_head fu_rcuhead; //RCU(Read-Copy Update)是Linux 2.6内核中新的锁机制    } f_u;   struct path f_path; //包含dentry和mnt两个成员, 阅读详情

Linux驱动有两种常见的设置私有变量的方式

1.file->private_data

2.platform_set_drvdata();platform_get_drvdata()

两种方法有何异同呢

file->private_data 只能用在 字符设备的文件操作结构体
如:下面这些函数中(一般在my_open中通过container_of赋值,在其他文件操作函数中使用)
static struct file_operations my_fops = {
.owner = THIS_MODULE,
.open = my_open,
.write = my_write,
.mmap = my_mmap,
.unlocked_ioctl = my_ioctl,
};
因为 file->private_data 是与文件描述符 (struct file) 相关联的私有数据。它只能在字符设备的文件操作函数中使用,因为这些函数的参数中都包含 struct file *file 指针。

platform_set_drvdata() 在static int platform_probe(struct platform_device *pdev)中被赋值, platform_get_drvdata() 可以在任何包含struct platform_device *pdev参数的函数中使用,只要传递了pdev参数,就可以使用。

此外,file->private_data仅能作用与此时打开的驱动,如果一个设备创建多个驱动,对于file->private_data来说彼此之间独立。而platform_set_drvdata()更倾向于全局变量,即使对应多个驱动,platform_set_drvdata()也只有一个。

Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析 前面学习了SDIO接口的WiFi驱动,现在我们来学习一下USB接口的WiFi驱动,二者的区别在于接口不同。而USB接口的设备驱动,我们前面也有学习,比如USB摄像头驱动、USB鼠标驱动,同样都符合LinuxUSB驱动结构:            USB设备驱动(字符设备、块设备、网络设备)                                                | 阅读详情

相关推荐

linux驱动由浅入深系列: 驱动中获取设备结构体中定义的数据

linux内核2.6版以后,驱动模型统一为设备、驱动、总线的结构。即一个linux设备或驱动都是要挂载到一种总线上的,如常见的usb、pci、i2c等,对于SoC系统内部的控制器使用platform虚拟总线。这样platform机制将设备本身的资源(如gpio、irq、mem)注册进内核,由内核统一管理,当驱动中需要使用设备的资源时,可以由统一的接口。 不管是设备还是驱动,都是挂接在某条总线上的

Radia的专栏 1937

Linux 字符驱动private_data访问和传递数据

1,struct inode 里面的pravitae_data实现数据之间的传递,open到其他函数之间的传递 在open里面里面定义数据,在其他的write,read,ioctl里面访问数据: /****************************************************** 为什么引入 pravita_data 在多个用户要使用设备节点时,我们就引入了prav...

陌上花开缓缓归以的博客 2831

Rust Reqwest+Rustls 自签名证书校验

所以这里必须保证reqwest引用的rustls库和本地工程一致。以上就是实现不校验签名的逻辑,后续自己可以在对应回调进行逻辑判断。

bawomingtian123的专栏 1349

Linux设备驱动模型的private_data 简单理解

Linux内核模型,主要是通过kobject kset来组织各部分目录的关系。 我的理解:任何的kobject都是一个对象元素,kset就是元素的集合,并且kset本身也有kobject的属性,并且描述kset的kobject同样隶属于另外一个kset集合。 内核模型的bus class driver devices数据结构,内部都镶嵌了自己的private data,用来用作外部访问的接口

none 4005

Mac 环境配置jdk、Maven

3、终端打开配置jdk时候建好的脚本文件: open -e .bash_profile。4、查看maven是否安装成功和系统能不能识别maven/mvn命令:⬇️。输入⬇️并保存: 其中第一行JAVA_HOME替换为自己下的jdk路径。,安装编译好的二进制版本,具体安装zip还是tar.gz我看的。5、查看jdk是否安装成功和系统能不能识别java命令:⬇️。至此,我的Mac系统的环境配置jdk、Maven完成!然后就发现我的maven命令还是没作用,不识别,下载后直接安装即可,很快,点几下就OK了。

weixin_42416791的博客 4387

FlashAttention 快速安装指南(避免长时间编译)

FlashAttention 编译太慢?本篇提供无需编译的预编译 wheel 快速安装方案,适配多版本 Python、PyTorch 和 CUDA,极大节省部署时间!

Junseer的博客 9718

Linux驱动开发中private_data变量的理解

在嵌入式Linux中,"是一个结构体或类中的成员变量,用于指向该设备的私有数据。这个变量的作用是为了让驱动程序可以在设备和设备文件之间建立联系。

DOF526570的博客 1116

Linux系统下Materials Studio 2020安装避坑指南:从依赖包到许可证配置全流程

本文提供了一份在Linux系统上安装Materials Studio 2020的深度避坑指南。详细解析了从系统依赖包检查、安装流程、许可证配置到Gateway服务部署的全过程,并分享了与Slurm作业调度系统集成的实战经验,旨在帮助用户高效、稳定地完成部署。

weixin_29313547的博客 385

Linux驱动模块的文件操作集的函数里面的filp->private_data的传入途径

filp->private_data,此时的dev就是前面已经初始化后的结构体设备指针,可以用里面的节点指针和gpio编号,如果没有在open函数中赋值,如下图所示,它是应用与驱动读写数据的桥梁,这些函数里面一般会有一个filp->private_data的变量,通常是把驱动里的。的,如下图所示,假如没有这一步,后面得到的结构体指针指向的将会是一个。,例如gpio编号会是一串很长的数字,导致驱动无法使用。编译不会报错,但是得到的各种属性都是错误值。如下图所示,在write函数中用到这个。

XueHaiWuYa__1999的博客 288

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

Openclaw错误排查及解决方案之:Previous run is still shutting down. Please try again in a moment.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 232

基于YOLO26深度学习框架的智能停车场管理系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的智能停车场管理系统实现方法。系统采用CSPDarknet53作为主干网络,结合特征金字塔和注意力机制提升检测性能。通过数据预处理、模型训练和停车分析三个主要模块,实现了车位占用检测、车辆类型识别等功能。实验结果表明,该方法在检测精度和速度方面表现优异,为智能停车场管理提供了有效的技术解决方案。

一键难忘的博客 570

linux 驱动私有数据

在 struct filed有个成员void *private_data这个字段允许驱动程序在不同的文件操作(如read、write、ioctl等)中访问与特定设备相关的私有信息。

本地服务器 872

Mamba-UNet:用于医学图像分割的类似UNet的纯视觉Mamba网络

所提出的Mamba-UNet的架构如图2所示,其灵感来源于UNet [24] 和 Swin-UNet [3]。首先将大小为 H × W × 1 的2D灰度图像分割成类似于ViT和VMamba的块 [5,16],然后转换为维度为 H/4 × W/4 × 16 的1D序列。一个初始的线性嵌入层将特征维度调整为任意大小C。这些块令牌随后通过多个VSS块和块合并层进行处理,以创建分层特征。块合并层负责下采样和维度增加,而VSS块则专注于学习特征表示。

AI浩 7548

关于linux设备驱动是否使用全局变量的问题

关于linux设备驱动是否使用全局变量的问题 今天有人问我,关于linux设备驱动是否使用全局变量的问题,为什么说尽量不使用全局变量? 其实这个问题从两方面说: 1)使用全局变量,那么破坏了函数的重入性,为了实现函数重入,又不得不使用锁来保护全局变量。这个效率变得低下了。 函数重入,主要是使用局部变量,即变量放在线程的栈中,各自使用自己的,就不会冲突。另外一种是使用锁来保护,保证数据的完整性。 2)使用全局变量,那么就违背了linux驱动的编写原则。即一个驱动程序应该支持驱动多个设备同时工作。例如马达

Neil驱动的博客 2275

MATLAB - ROS 2 工具箱入门教程

ROS 工具箱提供了一个连接 MATLAB® 和 Simulink® 与机器人操作系统(ROS 和 ROS 2)的接口。利用该工具箱,您可以设计 ROS 节点网络,并将 MATLAB 或 Simulink 生成的 ROS 节点与现有的 ROS 网络相结合。工具箱包括 MATLAB 函数和 Simulink 块,可通过记录、导入和回放 rosbag 文件来可视化和分析 ROS 数据。您还可以连接到实时 ROS 网络,访问 ROS 消息。

机器人控制与仿真应用 3067

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

字符设备驱动第三课---私有数据

一、设备中的私有属性 struct file 结构体中专门为用户留了一个域用于定义私有数据,是个void *型的指针。通过它可以将私有数据一路从open带到read, write,层层传入。一般是在open 的时候赋值,reads时用。 1、结构体定义: struct file { union { struct llist_node fu_llist; struct rcu

u010243305的博客 1215

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux 查看是否有led设备,linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用...

private_data改进为设备驱动支持多个设备个体做准备,针对private_data进行改进在设备打开操作中通过inode中保存的i_cdev获取代表当前设备的cdev对象通过代表当前设备的cdev对象得到包含该对象的设备私有数据结构体将设备私有数据结构体指针保存到struct file的private_data成员中在其它设备操作中直接使用保存在struct file的private_da...

weixin_33147807的博客 132

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

12.Linux驱动-关于dev_set_drvdata()和dev_get_drvdata()

内核版本:Linux-4.5 dev_set_drvdata()和dev_get_drvdata()代码如下: static inline void *dev_get_drvdata(const struct device *dev) { return dev->driver_data; } static inline void dev_set_drvdata(struct device *dev, void *data) { dev->driver_data = data; } 那么

weixin_43824344的博客 1673

从零开始理解Linux设备驱动私有数据管理:dev_set_drvdata全解析

本文深入解析Linux设备驱动开发中的核心机制——dev_set_drvdata私有数据管理。通过对比全局变量的弊端,详细阐述了如何利用dev_set_drvdata和dev_get_drvdata函数将设备实例数据与struct device对象绑定,实现多实例隔离、清晰架构与自动生命周期管理,并提供了平台设备驱动的完整实战示例与最佳实践。

meat5的博客 406

linux设备驱动开发学习之旅--使用文件私有数据的字符设备驱动

[cpp] view plaincopy /**   * Author:hasen   * 参考 :《linux设备驱动开发详解》   * 简介:android小菜鸟的linux   *           设备驱动开发学习之旅   * 主题:使用文件私有数据的字符设备驱动   * Date:2014-10-31    */      #includ

嵌入式Linux开发 1366

设备驱动的私有数据:open与private_data

设备驱动的私有数据:open与private_data。

lsgwr的博客 2107

一个驱动控制多个设备&每个设备拥有私有数据

本文主要记录一下使用单一驱动,控制多个设备,且每个设备拥有私有数据。使的主要思路为:在驱动侧 open 函数中,读取 inode 的设备号,通过次设备号,从而判断打开的是哪一个设备,从而将其对应的私有数据传递给 file 结构体。在 write/read 函数中就可以通过 file->private_data 获取到本设备的私有数据。

qq_43557686的博客 873

【讯为Linux驱动开发】4.文件私有数据

前面关于设备号、设备节点、class类和device设备都是用全局变量定义的,多了以后难免杂乱。所以可以创建一个设备结构体,把设备号、设备节点、class类和device设备都放进去。可移植性更高。

Xiaoxuexxxxx的博客 446

linux驱动开发之字符设备--私有数据和container_of

前言 驱动开发中通常为设备定义一个设备相关的设备结构体,其包含该设备的cdev 、私有数据、信号量、irq等这些信息。 驱动开发中通常将文件的私有数据private_data指向设备结构体,在read()、write()、ioctl()等函数通过 private_data 访问数据 设备结构体。 container_of() 是一个比较常用的宏,其作用为通过结构体成员的指针找到对应结构体

Android 系统开发 3099

【Linux 驱动私有数据】

Linux驱动私有数据是驱动开发中的关键机制,用于管理设备实例的专属信息。它充当"数据管家",在不同驱动函数间传递设备硬件资源(如GPIO引脚)、驱动对象(设备类/节点)和运行状态等关键数据。通过定义私有数据结构(如包含GPIO编号、设备指针的结构体),在初始化阶段分配内存并配置资源,然后将指针存储在全局变量或文件结构中。后续函数(如文件操作、中断处理)通过该指针访问设备专属信息,实现设备控制与状态维护。这种机制确保了驱动各功能模块的高效协作和设备资源的精准管理。

highersister的博客 792
上一篇: linux驱动中断
下一篇: FPGA组合逻辑和时序逻辑的同时到达与为什么时序逻辑总是“慢一拍”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值