这是对`device_show_int()`Linux内核错误的调用吗?

我开始提出这个问题: 如何正确地为平台驱动程序初始化属性组?

并得出这样的结论:函数调用device_show_int()这样做与错误的函数原型。

代码问题通过使用DEVICE_INT_ATTR()macros定义struct dev_ext_attribute结构开始。 [struct device_attribute][1]结构将show字段定义为指向具有三(3)个参数的函数的指针:

 struct device_attribute { struct attribute attr; ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf); ssize_t (*store)(struct device *dev, struct device_attribute *attr, const char *buf, size_t count); }; 

然而在我的调用堆栈(请参考上面的问题)中,只有来自drv_attr_show()的两个参数调用了解引用的函数:

 if (drv_attr->show) ret = drv_attr->show(drv_priv->driver, buf); 

这似乎相当诡异,这是一个错误,或者我设法搞砸内核构build? (ARM,Kernel 3.12)

你很困惑device_attributedriver_attribute 。 函数drv_attr_show()struct driver_attribute ,它被定义为:

 struct driver_attribute { struct attribute attr; ssize_t (*show)(struct device_driver *driver, char *buf); ssize_t (*store)(struct device_driver *driver, const char *buf, size_t count); }; 

所以没有错误在这里。