【发布时间】:2019-04-17 16:43:13
【问题描述】:
我在 big.LITTLE 板上进行 cpu 管理,我正在开发的板上有一些 ina231 功率传感器。我相信这是由 ina2xx_driver 处理的(这对我来说很有意义)。我对驱动程序的了解仍在开发中,所以我不确定应该如何从驱动程序/设备中获取我的 CPU 模块所需的信息,以一种不会让 Linux 之神生气的方式。
该板有 4 个传感器,我相信这些传感器随后存储在链表 struct list_head clients 中的 struct i2c_driver 中。如果我理解正确的话,那么我最初的想法是导出一个指向驱动程序的指针
static struct i2c_driver ina2xx_driver = {
.driver = {
.name = "ina2xx",
},
.probe = ina2xx_probe,
.remove = ina2xx_remove,
.id_table = ina2xx_id,
};
+struct i2c_driver *ina2xx_driver_p = &ina2xx_driver;
+EXPORT_SYMBOL(ina2xx_driver_p);
到我的模块,然后可以单步执行 i2c 客户端的链接列表,允许我通过执行类似操作来访问单个设备信息
struct i2c_client *tmp
struct list_head *pos;
struct list_head *clients_head = &ina2xx_driver_p->clients;
list_for_each(pos, clients_head){
tmp = list_entry(pos, struct i2c_client, detected)
struct ina2xx_data *data = ina2xx_update_device(tmp.dev);
ina2xx_get_value(data, $(attribute));
}
我实际上并没有尝试过,这就是我在阅读头文件后想象的一种解决方案。鉴于我对推荐的做法缺乏了解,我认为最好在浪费一两天时间尝试实施注定要失败的事情之前问清楚。
是否有更标准化的方式在内核中用于获取设备驱动程序或设备指针以访问信息或获取设备信息而不从文件中读取信息的方式?
希望我的问题有意义,谢谢。
【问题讨论】:
-
在设备树中搜索,如何在那里添加设备。您正在尝试做的事情是完全错误的。
-
@0andriy 但我不需要添加设备。只需从现有和初始化的设备访问设备信息
-
如果您需要什么样的信息?
-
@0andriy 在客户端数据 (client->dev->p->driver_data) 中存储设备的寄存器,在调用 ina2xx_update_device 时更新。我需要访问这些私人数据。
-
为什么需要它们?
标签: c linux-kernel linux-device-driver kernel-module device-driver