Linux内核dev_set_drvdata()和dev_get_drvdata()存储自定义结构体用法
定义位置:kernel/msm-3.18/include/linux/device.h
static inline void dev_set_drvdata(struct device *dev, void *data){dev->driver_data = data;
}
static inline void *dev_get_drvdata(const struct device *dev){return dev->driver_data;
}kernel/msm-3.18/include/linux/i2c.h
struct i2c_client{unsigned short addr;struct device dev;
};//自定义结构体
struct data{int num;char *name;
};栗子一:i2c_set_clientdata和i2c_get_clientdata也是调用这两个函数
kernel/msm-3.18/include/linux/i2c.h
static inline void i2c_set_clientdata(struct i2c_client *dev, void *data){dev_set_drvdata(&dev->dev, data);
}
static inline void *i2c_get_clientdata(const struct i2c_client *dev){return dev_get_drvdata(&dev->dev);
}struct data set_stu;
struct i2c_client *i2c;
//1.申请内存,devm_kzalloc()函数自动释放内存
devm_kzalloc(&i2c->dev, sizeof(struct stu), GFP_KERNEL);//2.设置结构体stu到kernel结构体void*
dev_set_drvdata(&i2c->dev, set_stu);//3.获取结构体stu
struct data get_stu;
get_stu = dev_get_drvdata(&i2c->dev);//4.置空,不用时
dev_set_drvdata(&i2c->dev, NULL);栗子二:struct snd_soc_dai{};
<1>.kernel/msm-3.18/include/sound/soc-dai.h
struct snd_soc_dai{struct snd_soc_codec *codec;
}; <2>.kernel/msm-3.18/include/sound/soc.h
struct snd_soc_codec { struct snd_soc_component component;
};<3>.kernel/msm-3.18/include/sound/soc.h
struct snd_soc_component {struct device *dev;
};struct data set_stu;
struct data get_stu;
struct snd_soc_dai *dai;//1.申请内存,devm_kzalloc()函数自动释放内存
devm_kzalloc(dai->codec->component.dev, sizeof(struct stu), GFP_KERNEL);//2.设置结构体stu到kernel结构体void*
dev_set_drvdata(dai->codec->component.dev, set_stu);//3.获取结构体stu
get_stu = (struct data*)dev_get_drvdata(dai->codec->component.dev); //4.置空,不用时
dev_set_drvdata(dai->codec->component.dev, NULL);
Linux内核dev_set_drvdata()和dev_get_drvdata()存储自定义结构体用法相关推荐
- Linux内核中的PCB里面task_struct结构体中的具体信息
1.PCB进程控制块--->task_struct 广义上,所有的进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合. 每个进程在内核中都有一个进程控制块来维护进程的相关信息 ...
- exfat单元分配要设置多少_微软宣布,支持往Linux内核里添加exFAT存储了!跨系统存储的福音...
栗子 发自 凹非寺 量子位 报道 | 公众号 QbitAI exFAT,是微软开发的文件系统,为闪存而生. 你的U盘.SD卡.手机等等存储设备,能存4G以上的大文件,很大程度上是它的功劳. 可exF ...
- Linux下DIR,dirent,stat等结构体详解
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
- Linux下DIR,dirent,stat等结构体详解(转)
最近在看Linux下文件操作相关章节,遇到了这么几个结构体,被搞的晕乎乎的,今日有空,仔细研究了一下,受益匪浅. 首先说说DIR这一结构体,以下为DIR结构体的定义: struct __dirstre ...
- Gin 框架学习笔记(01)— 自定义结构体绑定表单、绑定URI、自定义log、自定义中间件、路由组、解析查询字符串、上传文件、使用HTTP方法
要实现一个 API 服务器,首先要考虑两个方面:API 风格和媒体类型.Go 语言中常用的 API 风格是 RPC 和 REST,常用的媒体类型是 JSON.XML 和 Protobuf.在 Go A ...
- 【Qt】信号和槽传递自定义结构体
一.使用信号和槽传递自定义结构体 这是一个老问题了,但是每次使用都要bing,因此做个笔记整理下. 一共有三种方法,可以让结构体在信号和槽之间传递.前两种方法可以让结构体在线程之间传递,最后一种方法只 ...
- C++对自定义结构体变量排序
在C++中,如果容器中的数据类型为int double等基本类型时,我们很容易利用STL自带的函数对其进行排序,但是如果数据类型是我们自定义的结构体或者类呢,这时候再利用STL进行排序就力不从心了.在 ...
- Qt中的QByteArray和自定义结构体之间的相互转换
在Qt项目开发中,经常会碰到自定义结构体和字符数组之间的转换问题,不妨假设结构体名字为custom_struct, 字符数组名字为array_data 1. QByteArray转换为自定义结构体 c ...
- QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE、枚举Q_ENUMS 、成员变量Q_PROPERTY、自定义结构体QVariantMap、List数据QVariantL
QML < 5 > QML 访问C++ 类 (函数Q_INVOKABLE.枚举Q_ENUMS .成员变量Q_PROPERTY.自定义结构体(QVariantMap ).List数据QVar ...
最新文章
- hr2000 光谱Matlab,HR4000 HR2000 HR2000+ 光纤光谱仪 CG HC-1光栅 消除高阶衍射滤光片-广州标旗...
- setFilters使用方法
- Java JDBC批处理插入数据操作
- Vue011_ 内置指令与自定义指令
- RabbitMQ教程C#版 “Hello World”
- fermat数推素数无穷_如何在3分钟内对Fermat测试进行素数测试
- 多少秒算长镜头_你了解植保无人机一天到底能够干多少活吗??
- webservice测试工具
- Android 数据存储/访问 之 SharedPreferences(偏好设定)
- IDEA运行下载的Servlet时报错 Error running Tomcat 8.5.8: Unable to open debugger port (127.0.0.1:49551):
- linux局域网即时通讯,基于身份的Linux下局域网即时通讯系统的研究与实现
- linux限制message日志大小,message显示rsyslog日志服务警告信息due to rate-limiting
- diskgenius系统迁移_关于系统迁移至SSD
- [Hive优化]--常用参数优化汇总
- python 画图colorbar 颜色大全 plt.cm.get_cmap
- 【开源】司马编译器 Smart Compiler
- HTML中清除浮动的几种方法
- linux ubuntu 常用口令
- 订阅号消息 服务号 信息推送
- Handdle AI在芯片字符瑕疵识别检测中的应用