作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只想知道当我们必须使用这些集合并获取驱动程序 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);
最佳答案
驱动程序核心处理运行驱动程序的不同阶段。您可以将驱动程序代码视为一组回调,例如 ->probe()
, ->remove()
, 等等。详情可查看struct platform_driver
或 struct pci_driver
定义。
那么,如何在回调之间进行通信呢?
对,你至少有两种方法:
struct device
或其子代(例如 struct pci_dev
)。 probe
的某个位置。阶段。为避免资源泄漏,您必须在
remove
处释放它们。阶段。就是这样用的。
->suspend()
,
->resume()
等)。
关于linux-device-driver - dev_set_drvdata 和 dev_get_drvdata 的可能用途是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800337/
我只想知道当我们必须使用这些集合并获取驱动程序 API 时可能的用例是什么。 我只知道数据被保存了,以后我们可以使用数据做一些事情。我的问题是什么时候我们真的需要这样做? /*
我是一名优秀的程序员,十分优秀!