我只想知道当我们必须使用这些set和get驱动程序API时,可能的用例是什么。我所知道的就是数据被保存了,以后我们可以使用数据来做一些事情。我的问题是什么时候我们真的需要这样做?
/*
* These exports can't be _GPL due to .h files using this within them, and it
* might break something that was previously working...
*/
void *dev_get_drvdata(const struct device *dev)
{
if (dev && dev->p)
return dev->p->driver_data;
return NULL;
}
EXPORT_SYMBOL(dev_get_drvdata);
void dev_set_drvdata(struct device *dev, void *data)
{
int error;
if (!dev)
return;
if (!dev->p) {
error = device_private_init(dev);
if (error)
return;
}
dev->p->driver_data = data;
}
EXPORT_SYMBOL(dev_set_drvdata);发布于 2015-01-14 00:17:51
驱动程序核心处理运行驱动程序的不同阶段。您可以将驱动程序代码视为一组回调,如->probe()、->remove()等。有关详细信息,请查看struct platform_driver或struct pci_driver定义。
那么,如何在回调之间进行通信呢?
对,你至少有两种方法:
struct device或它的子级(例如struct pci_dev)。因此,我们有一个指向私有成员的指针,该成员可用作应通过回调传递的有用信息的容器。
为什么我们需要它?大多数驱动程序都会请求一些资源,并将指向它们的指针保存在probe阶段的某个地方。为了避免资源泄漏,您必须在remove阶段释放它们。这就是它的用法。
正如allsey87所指出的,另一个有用的模式是跨回调传递设备的当前状态。一个真实的例子是电源管理回调(->suspend()、->resume()等)。
https://stackoverflow.com/questions/23800337
复制相似问题