zoukankan      html  css  js  c++  java
  • [Linux笔记]platform_set_drvdata和platform_get_drvdata用法

    在用到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中了。
  • 相关阅读:
    《复杂网络环境下访问控制技术》读书笔记(2)
    《复杂网络环境下访问控制技术》读书笔记(1)
    20199319《网络攻防实践》假期作业
    云班课实验补充
    20199319 缓冲区溢出漏洞试验
    20199319《Linux内核原理与分析》第十二周作业
    20199319《Linux内核原理与分析》第十一周作业
    图书管理系统UML建模
    《深入理解计算机系统(第三版)》第二章学习总结
    2019-2020-1 20199319《Linux内核原理与分析》第九周作业
  • 原文地址:https://www.cnblogs.com/wangxianzhen/p/3009530.html
Copyright © 2011-2022 走看看