本文转载自:http://www.cnblogs.com/wangxianzhen/archive/2013/04/09/3009530.html

在用到Linux设备驱动的platform框架时,常常会遇到两个函数platform_get_drvdata和 platform_set_drvdata。通常,会在驱动的probe函数中获取device的相关信息,然后使用 platform_set_drvdata进行保存。在其他函数中要用到时(比如remove),通过platform_get_drvdata来获取。

       内核中的定义为:
#define platform_get_drvdata(_dev)dev_get_drvdata(&(_dev)->dev)
#define platform_set_drvdata(_dev,data)dev_set_drvdata(&(_dev)->dev, (data))
       _dev指的是struct platform_device,可以看到其实调用的是dev_get_drvdata和dev_set_drvdata。
struct platform_device {
const char* name;
intid;
struct devicedev;
u32num_resources;
struct resource* resource;
 
const struct platform_device_id*id_entry;
 
/* arch specific additions */
struct pdev_archdataarchdata;
};
 
void *dev_get_drvdata(const struct device *dev)
{
if (dev && dev->p)
return dev->p->driver_data;
return NULL;
}
 
void *dev_get_drvdata(const struct device *dev)
{
if (dev && dev->p)
return dev->p->driver_data;
return NULL;
}
       下面来看看涉及到的struct device的相关成员。
struct device {
       ...
       struct device_private*p;
       struct device_driver *driver;/* which driver has allocated this
       void*platform_data;/* Platform specific data, device core doesn't touch it */
       ...
};
       struct device_private中的成员:
struct device_private - structure to hold the private to the driver core portions of the device structure.这个结构用来保存struct device中的私有的设备驱动程序的核心部分。
struct device_private {
       ...
void *driver_data;
struct device *device;
};
       如果有定义struct platform_device *pdev;那设备相关的信息会保存在pdev->dev.platform_data中。在驱动中的probe配置好的设备信息则是通过 platform_set_drvdata保存在pdev->dev->p->driver_data中,但是driver_data 已经封装在函数platform_set_drvdata和platform_get_drvdata中了。

platform_set_drvdata和platform_get_drvdata用法【转】的更多相关文章

  1. platform_set_drvdata 和 platform_get_drvdata

    ndev是我们在probe函数中定义的局部变量,如果我想在其他地方使用它怎么办呢? 这就需要把它保存起来.内核提供了这个方法,使用函数platform_set_drvdata()可以将ndev保存成平 ...

  2. platform_set_drvdata()/platform_get_drvdata()/container_of()【转】

    本文转载自:http://blog.csdn.net/angle_birds/article/details/8443695 platform_set_drvdata(struct platform_ ...

  3. Linux Platform devices 平台设备驱动

    设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196 本文主要参考:http://www.wowotech.net/devi ...

  4. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

  5. jquery插件的用法之cookie 插件

    一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...

  6. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  7. [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法

    一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...

  8. python enumerate 用法

    A new built-in function, enumerate() , will make certain loops a bit clearer. enumerate(thing) , whe ...

  9. [转载]Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结

    本文对Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法进行了详细的总结,需要的朋友可以参考下,希望对大家有所帮助. 详细解读Jquery各Ajax函数: ...

随机推荐

  1. [LibreOJ β Round #4] 子集

    显然是个二分图,直接求最大独立就行了. #include<bits/stdc++.h> #define ll long long #define pb push_back using na ...

  2. JNA 相关问题

    JNA 相关问题 结构体对齐问题 要注意调用的c库字段对齐方式的相关设置. #pragma pack (push,1) #pragma pack(pop) jna中提供了4种对齐方式: /** Use ...

  3. redis常用命令与使用分析

    redis-cli的使用 连接服务器 redis-cli -h 127.0.0.1 -p 6392  -a 123456 set操作 语法 sadd key [members.......]      ...

  4. Java创建和解析Json数据方法(五)——Google Gson包的使用

    (五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法:         ①toJson():将java对象转化为json数据 ...

  5. 100 Most Influential Books According to Stack Overflow

    Please read this blog post to see why this is here. This data was created on 02/13/2012 20:00:00 All ...

  6. arcgis andriod开发程序实例,有图有真相

    本程序使用Google公司最新开发工具andriod studio开发,实现了地图的加载,放大,缩小,GPS定位,画点.线,面工具,本程序有偿提供源代码 主界面,加载tpk切片 放大: 加载geoda ...

  7. Python基础语法01

    Python 标识符 在python里,标识符有字母.数字.下划线组成. 在python中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. python中的标识符是区分大小写的. 以 ...

  8. JavaScript校验输入的字符串是否包含特殊字符

    校验在文本框输入的字符串中是否包含特殊字符串,js代码如下 function strInclude(substring){ if(substring){ var reg = new RegExp(&q ...

  9. python_获得列表中重复的项的索引

    a = ['b','a', 'b', 'c', 'a', 'c','d'] b=[] f=[] for i in a: c=[] for item in enumerate(a): if item[1 ...

  10. 百科知识 tar文件如何打开

    tar 是什么文件格式,是干什么用的,用什么打开 tarball压缩格式,源于Linux的一个指令,Windows上可以用WinRAR打开 Linux的实用程序tar最初是为了制作磁带存档而设计的(把 ...