Зонд i2c не вызывается, не знаю, где вызывать i2c_register_board_info

У меня есть системы Intel. Я пытаюсь загрузить at24.ko и i2c-mux-pca9541.ko. оба модуля имеют функции проверки, которые не вызываются. согласно документации, мне нужно вызвать i2c_registetr_board_info в файле arch_init. но я не уверен, где это сделать для системы Intel (т.е. какие файлы). Я не вижу примеров нигде в Интернете. может кто-нибудь предоставить указатель на файл, в который я добавляю этот вызов. если это не правильный подход, пожалуйста, дайте мне знать.

заранее спасибо.


person vcho    schedule 13.10.2014    source источник
comment
Какую версию ядра вы используете? Вы используете дерево устройств? Определен ли интерфейс I2C в дереве устройств?   -  person sessyargc.jp    schedule 14.10.2014
comment
Привет, я использую 3.14. я не использую дерево устройств. Я попытался добавить i2c_register_board_info в i2c-i801 (поскольку это адаптер i2c), но получил ошибку компиляции, говорящую, что i2c_register_board_info не определен. мне пришлось явно экспортировать функцию, чтобы обойти проблему компиляции, и я все еще не могу вызвать зонд. для системы Intel, кажется, есть что-то еще, что нужно сделать ..   -  person vcho    schedule 14.10.2014
comment
i2c_register_board_info определяется в drivers/i2c/i2c-boardinfo.c, поэтому помещать его в i2c-i1801, как вы, это не решение. Включен ли параметр CONFIG_I2C_BOARDINFO в файле .config?   -  person sessyargc.jp    schedule 14.10.2014
comment
привет сесси. да он включен. Я также проверил system.map, и функция указана в файле.   -  person vcho    schedule 14.10.2014
comment
Какая именно система Intel у вас есть? У вас есть файл платы для него, например arch/arm/mach-omap2/myboard.c?   -  person yegorich    schedule 14.10.2014
comment
@yegorich упомянутый вами файл, вероятно, не будет скомпилирован в сборке Linux для Intel. Как говорится в пути, это для ARM. vcho, в других платформах, например ARM, вызов i2c_register_board_info выполняется на ранней стадии инициализации архитектуры. У него есть функция __init, которая вызывается рано. Затем это вызывает i2c_register_board_info. См. arch/x86/platform/intel-mid/sfi.c или arch/arm/plat-omap/i2c.c в дереве исходных текстов Linux.   -  person sessyargc.jp    schedule 15.10.2014
comment
@vcho, не могли бы вы сообщить мне, смогли ли вы добавить i2c_register_board_info в соответствующий файл, связанный с процессором Intel. Не могли бы вы поделиться со мной именем/путем файла, в который он был добавлен для справки?   -  person Karthik Balaguru    schedule 22.05.2017


Ответы (1)


Зонд не вызывается, потому что ядро ​​не нашло "подходящее" устройство, которое могло бы быть связано с драйвером. Существуют различные способы предоставления информации об устройстве ядру. Они обсуждаются следующим образом:

Если это для целей тестирования, вы можете проверить устройства i2c через sysfs:

echo <device_name> <i2c_address> > /sys/bus/i2c/devices/i2c-0/new_device

device_name : имя устройства i2c. Должен быть тот, который используется в драйвере.

i2c_address : Адрес устройства i2c согласно техническому описанию устройства.

Приведенная выше команда предполагает, что шина i2c «0» — это та, к которой подключено устройство.

Помимо этого, есть и другие способы проверить ваше устройство. Вы можете указать информацию об устройстве через дерево устройств или вызвав i2c_register_board_info(). Вы можете создать простой модуль, который создает структуру i2c_board_info и регистрирует ее с помощью i2c_register_board_info(), а затем вставляете модуль так, чтобы устройство было «известно» ядру и связывало устройство с его драйвером. Это не должно быть в кодах инициализации платы.

Я рекомендую вам ознакомиться со следующей документацией по проверке устройств i2c: http://lxr.free-electrons.com/source/Documentation/i2c/instantiating-devices

person raghav3276    schedule 28.10.2014
comment
спасибо, это мне очень помогает. но где передать platform_data из i2c_board_info - person yurenchen; 25.09.2017