通常,会在驱动的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...
如果有定义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中了。
/* /drivers/base/dd.c */intdev_set_drvdata(struct device*dev,void*data){int error;if(!dev->p){error=device_private_init(dev);if(error)returnerror;}dev->p->driver_data=data;return0;} /* /linux/device.h */struct device{struct device*parent;struct device_private*p;struct kobject ko...
platform_get_drvdata(const struct platform_device *pdev): 驱动中常用到platform_set_drvdata 和 platform_get_drvdata这两个函数,用于保存局部变量: include/linux/platform_device.h中: static inline void *platform_get_drvdata(const struct platform_device *pdev) { return dev_get_drvdata(&pdev->dev...
static inline void platform_set_drvdata(struct platform_device *pdev, void *data) { dev_set_drvdata(&pdev->dev, data); } int dev_set_drvdata(struct device *dev, void *data) { int error; if (!dev->p) { error = device_private_init(dev); ...
在Linux 中,`platform_set_drvdata` 函数用于将私有数据与某个平台设备相关联。 该函数的原型如下: ```c void platform_set_drvdata(struct platform_device *pdev, void *data); ``` 该函数有两个参数: - `pdev`:指向要设置私有数据的平台设备的指针。
_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_setup_pdev_archdata,设置platform_device变量中的archdata指针。 platform_get_resource、platform_get_irq、platform_get_resource_byname、platform_get_irq_byname,通过这些接口,可以获取platform_device变量中的resource信息,以及直接获取IRQ的number等等。
static int __init globalfifo_platform_dev_init(void) { int ret; plat_dev = platform_device_alloc(DEV_NAME, -1); if (!plat_dev) return -ENOMEM; ret = platform_device_add(plat_dev); if (ret) { printk(KERN_ERR "add platform device fail, ret = [%d]\n", ret); ...
dev;20u32num_resources;21structresource*resource;22};下面是对应旳FB设备旳变量定义//arch/arm/mach-pxa/generic.c229staticstructplatform_devicepxafb_device={230.name="pxa2xx-fb",231.id=-1,232.dev={233.platform_data=&pxa_fb_info,234.dma_mask...