Я работаю с управлением процессором на платах big.LITTLE, и на плате, на которой я работаю, есть несколько датчиков мощности ina231. Который я считаю, обрабатываются ina2xx_driver (это будет иметь смысл для меня). Мои знания о драйверах все еще находятся в стадии разработки, поэтому я не уверен, как мне получить информацию, необходимую для моего модуля ЦП, из драйверов / устройств таким образом, чтобы не рассердить богов Linux.
На плате есть 4 датчика, которые, я полагаю, затем сохраняются в struct i2c_driver
в связанном списке struct list_head clients
. Если я правильно понял, то моей первоначальной идеей было экспортировать указатель на драйвер
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));
}
На самом деле я не пробовал это, просто я представляю одно решение после чтения заголовочных файлов. Учитывая мое отсутствие знаний о рекомендуемой практике, я подумал, что лучше спросить, прежде чем тратить день или два, пытаясь реализовать что-то, что обречено на провал.
Существует ли более стандартизированный способ, используемый в ядре для получения драйвера устройства или указателей устройства для доступа к информации или способ получения информации об устройстве, не считывая ее из файлов?
Надеюсь, мой вопрос имеет смысл и спасибо.