linux-kernel - 如何在运行时在 linux 客户端驱动程序中声明/定义 hwmon 传感器属性
问题描述
我正在寻找一种在运行时从 Linux 内核驱动程序创建 hwmon sysfs 节点的方法,因为客户端驱动程序不会在驱动程序中维护传感器列表。
我们的 Linux 内核客户端驱动程序在编译时不知道传感器属性/列表。此驱动程序将在运行时从固件中获取可用的传感器列表。基于传感器,客户端驱动程序必须使用 hwmon 驱动程序创建/注册 sysfs 节点。
我知道使用下面的代码片段在编译时使用 hwmon 设备声明/添加 sysfs 节点。
/* In client driver */
static ssize_t show_sensor1_info(struct device *dev, struct device_attribute *da, char *buf)
{
// client driver displays sensor1 data
}
static struct sensor_device_attribute sensor_attr1 =
SENSOR_ATTR(sensor1, 0444, show_sensor1_info, NULL, 0);
struct device *hdev = hwmon_device_register(&pdev->dev);
err = device_create_file(hdev, &sensor_attr1.dev_attr);
输出
$ ls /sys/class/hwmon/hwmon*/sensor1
sensor1
查询: 客户端驱动程序不会在编译时维护传感器列表。因此,如何在运行时执行与客户端驱动程序相同的工作不知道可用的传感器列表。
只有在加载此驱动程序后它才会知道。调用此驱动程序的探测器后,它会从硬件监视器固件中请求所有可用的传感器列表。
解决方案
我找到了一种基于运行时传感器计数创建 hwmon sysfs 节点的方法。我参考了这段代码https://elixir.bootlin.com/linux/v4.3/source/drivers/hwmon/acpi_power_meter.c#L630,它解决了我的要求。谢谢。
推荐阅读
- ios - 使用约束时不显示 UILabel 子类
- python - 使用 Pandas 中的方法链接分配给列的子集
- wagtail - 是否可以将 CustomUser(AbstractUser) 添加到 modelAdmin 菜单?
- sql - SQL - 显示来自 user_objects 数据字典的对象名称和类型
- floating-point - 不是数字 (NaN)
- python - 如何在以下示例中使用 pyspark 折叠操作找到最大值?
- gnuplot - Plotting same line number of several blocks data with gnuplot
- javascript - Cannot read property 'findAll' of undefined sequelize express JS
- java - 在 IntelliJ 中将 Spring Boot bean 标记为外部提供
- r - 对 2 个队列数据集进行逻辑回归,返回错误