linux驱动中,hwmon越来越多的被使用,利用hwmon下的节点查看内核导出的信息非常方便,也用hwmon框架做了两个设备的驱动了,该梳理下,做为知识储备了。
在3.4内核中,hwmon非常简单,对外只有一个函数:struct device *hwmon_device_register(struct device *dev),调用这个接口实现的hwmon设备,在/sys/class/hwmon/下会多出个文件夹,都是按照hwmon 0/1/2/3 编号,当有些注册失败时,编号就会发生变化,用脚本去自动采集这些数据时,每次都有根据实际情况修改脚本,非常不便,不过这个接口是调用了hwmon_device_register_with_groups(struct device
*dev, const char *name, void *drvdata, const struct attribute_group **groups),可以将此接口导出,将第二个参数赋成设备名,在/sys/class/hwmon/下的文件夹就是所定义的名字了。
在3.13内核中,hwmon改变很大,终于有了可以更多选择的接口了,使用也更方便,只需调用一个函数:
hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
data, lm73_groups);
if (IS_ERR(hwmon_dev))
return PTR_ERR(hwmon_dev);
甚至连定义好的节点都会帮我们初始化好,省去了自己将lm73_groups的属性节点注册。