Зонд не вызывается, потому что ядро, которое может быть связано с драйвером, не найдено «подходящим» устройством. Существуют различные способы предоставления информации об устройстве в ядро. Они рассматриваются следующим образом:
Если это для целей тестирования, вы можете зондировать устройства 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()
, а затем вставьте модуль таким образом, чтобы устройство было «известно» ядру и привязывало устройство к его драйверу. Это не обязательно в кодах init.
Я рекомендую вам пройти через следующую документацию зондировании устройств I2C: http://lxr.free-electrons.com/source/Documentation/i2c/instantiating-devices
Какую версию ядра вы используете? Используете ли вы дерево устройств? Является ли интерфейс I2C определенным в дереве устройств? –
Привет, я использую 3.14. Я не использую дерево устройств. Я попытался добавить i2c_register_board_info в i2c-i801 (так как это адаптер i2c), но получил ошибку компиляции, в которой указано, что «i2c_register_board_info» не определен. Мне пришлось явно экспортировать эту функцию, чтобы обойти проблему компиляции, и до сих пор не может заставить зонд быть для системы intel, кажется, что есть что-то еще, что можно сделать .. – vcho
«i2c_register_board_info» определяется в драйверах/i2c/i2c-boardinfo.c, поэтому его размещение в i2c-i1801, как и вы, не является решением. У вас есть CONFIG_I2C_BOARDINFO включен в вашем файле .config? –