Linux内核dev_set_drvdata()和dev_get_drvdata()存储自定义结构体用法(六)

2024-05-07 22:38

本文主要是介绍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()存储自定义结构体用法(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968596

相关文章

iOS自定义分享 (一)分享组件的接入

前言 在项目开发中,很多时候需要用到分享的功能。对于新手来说,分享是一个比较棘手的问题。并不是因为分享很难做,只是流程较多,第一次接触难免会出错,只要一个步骤错了,就无法继续下去。在这里对于几种常见的分享总结一下。 实现步骤 第一步:登录对应的网站,注册帐号,创建APP应用,获取AppID和AppKey; 第二步:下载对应的SDK,按照官方提供的文档配置工程,添加相应的依赖库; 第三步:

async与await 用法

一.async async 是 ES7 才有的与异步操作有关的关键字,和 Promise , Generator 有很大关联的。 1.async 函数返回一个 Promise 对象,可以使用 then 方法添加回调函数。 async function helloAsync() {return "hello world";}var asyn = helloAsync();console

ES6之Promise用法解析

一.Promise是什么 promise是一个对象,对象和函数的区别就是对象可以保存状态,函数不可以(闭包除外) 并未剥夺函数return的能力,因此无需层层传递callback,进行回调获取数据 主要用于异步计算可以将异步操作队列化,按照期望的顺序执行,返回符合预期的结果可以在对象之间传递和操作promise,帮助我们处理队列代码风格,容易理解,便于维护,多个异步等待合并便于解决 二.实例

pl- 配置远程打印机,用linux命令行打印

问题来源: 实验室打印机认证过我台式机的IP,但是里面只有linux命令行界面,只当作服务器用…又不想每次用笔记本想打印都折腾换网线…so… 问题描述:如何用命令行连接网络打印机,并用命令行控制打印 工具:pladmin 配置, pl 打印 参考资料: 在 Oracle® Solaris 11.2 中配置和管理打印 极客学院happypeter1983 打印(可以看参数) 材料: 打印

【Ruby】Ruby框架的使用(Ruby on Rails项目结构分析)

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801   目录结构 Ruby on Rails框架项目目录结构如下图所示: app:是web应用的主程序目录,包含了mvc组件的代码(controllers、models、views)config:runtime rules,routes,database等的配置db

linux ndk编译搭建测试

一、ndk下载 NDK 下载  |  Android NDK  |  Android Developers 二、ndk环境变量配置 ndk解压: unzip android-ndk-r26d-linux.zip  环境变量配置:  export NDK_HOME=/rd/own/test/android-ndk-r26d/  export PATH=$PATH:$NDK_HOME

dom4j处理xml在linux环境下中文乱码

最近在搞一个webservice 的soap接口数据同步,接口提供方就是个鸟人,两个接口来来回回写了2个月才调通,我也真是服了 ———**——– 好了吐槽到此结束,下面说说乱码的问题 dom4j 解析xml 就是一个把字符串、文件、输入流转换成文本(Document )再处理的过程;下面附上代码 InputStream in = new ByteArrayInputStream(fyxx.

【LinuxC++】Linux环境下C++编程

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com   QQ:1494713801   在linux下,开发工具被切割成一个个独立的小工具。各自处理不同的问题。例如: 编辑器(emacs, vim)用来进行编辑程序的 调试器(gdb) 用来调试程序 编译器(GCC) 用来编译和链接程序的 性能分析工具(gcov, gprof) 用来优化程序的 文档生成器

【阅读】《head first javascript》第二章——存储数据

复习要点 脚本通常能以以下三种基本数据类型表示:文本(text)、数字(number)、布尔(boolean)变量是可能在脚本过程中改变的数据常量是不会改变的数据关键字var用于创建变量,关键字const用于创建常量javascript数据的类型在设定数据为特定值的同时建立。另外,变量值的类型可以改变(弱类型语言)虽然javascript并未严格地要求,常量名称采用全部大写、变量名称采用小写驼

Linux系统下qtcreator每次打开文件都要重新编码问题

在Linux系统下qtcreator每次打开windows系统下的.c文件都会提示编码问题, 提示错误:“Could not decode “xxx” with “UTF-8”-encoding. Editing not possible "中文显示乱码,不能编译,如下图: 解决: 1、点击上面错误提示条右边“Select Encodeeing”按钮 选GBK / windows-936…,按编