2

Отказ от ответственности, я очень далек от эксперта по CentOS/Linux, и мне было трудно найти что-то подобное самостоятельно, используя Google fu. Я работаю над продуктом, который входит в слот PCIe на ПК под управлением CentOS. На боковом канале PCIe-соединения есть SMBus (то есть I2C), который используется для сбора таблицы Vital Product Data (VPD). Я пытаюсь найти способ протестировать этот интерфейс, но до сих пор с треском провалился. Я знаю, что есть несколько инструментов для чтения VPD и I2C-устройств:

LM-Tools (I2C), установленный с помощью sudo yum install i2c-tools , установленный с помощью sudo yum install dmidecode

У инструментов в dmidecode есть "vpddecode", который ничего не возвращает, и я подозреваю, что что-то ищет в памяти, но я действительно не знаю. LM-Tools имеет i2cdetect, но попытка выполнить «sudo i2cdetect -y 0» не работает и сообщает:

Ошибка: не удалось открыть файл /dev /i2c-2 или /dev /i2c /2: такого файла или каталога нет

Если я посмотрю в /dev , там нет элементов с i2c. Итак, я думаю, мне нужно загрузить модуль или что-то?

Итак, мои вопросы:

  1. Смогут ли эти инструменты связаться с моим устройством, которое находится на PCIe SMBus?
  2. Если эти утилиты будут работать с моим устройством на PCIe SMBus, какие действия мне нужно предпринять, чтобы они работали?
  3. Если эти утилиты не будут работать с моим устройством на PCIe SMBus, какие утилиты будут работать?

Любая помощь с благодарностью. У меня есть гугл, но мой гугл-фу в основном выводит информацию о модулях LM для чтения временных параметров и тому подобного, даже если я пытаюсь их отфильтровать.

Спасибо Марк

2 ответа2

2

Насколько я знаю, контроллеры SMBus представлены в Linux как устройства I²C. (Поскольку SMBus является подмножеством I²C, эти устройства будут поддерживать не все команды I²C, а только те, которые относятся к SMBus.) Таким образом, наличие контроллера SMBus вашей материнской платы, видимого как устройство /dev/i2c-X необходимо для любой пользовательской программы для связи с вашим устройством PCIe SMBus.

Чтобы иметь устройства /dev/i2c-X , вам необходимо загрузить модуль i2c-dev . Вы можете сделать это вручную, выполнив modprobe i2c-dev на оболочке или добавив строку, содержащую только имя модуля, в файл /etc/modules . Последний автоматически загрузит модуль при каждом запуске системы.

Кроме того, вам нужно загрузить драйвер для конкретного контроллера SMBus на материнской плате (если он не загружается автоматически). Я не знаю, какая материнская плата (чипсет) у вас есть. Контроллер SMBus большинства чипсетов Intel поддерживается модулем ядра i2c-i801 Linux.

Если вы загрузили оба модуля, в вашей системе должна быть одна или несколько шин I²C. Для каждой шины есть устройство /dev/i2c-X и запись в /sys/bus/i2c/devices/ с тем же именем.

Чтобы определить, какая шина принадлежит вашему устройству PCIe, вы можете попробовать:

$ grep . /sys/bus/i2c/devices/i2c-*/name

Это даст вам список всех автобусов и напечатает имя водителя для каждого автобуса. Поскольку у вас установлен i2c-tools, вы также можете использовать i2cdetect -l чтобы получить аналогичный список.

Редактировать: Кажется, есть проблема, связанная с ACPI с i2c-i801 и Intel C220 на некоторых материнских платах, что делает модуль SMBus непригодным для использования.

0

Передача acpi_enforce_resources = lax в командной строке разрешит конфликт ресурсов ACPI.

драйвер i2c /dev
Предупреждение ACPI: диапазон SystemIO 0x0000000000003000-0x000000000000301F конфликтует с OpRegion 0x0000000000003000-0x000000000000300F (_SB_.PCI0.SBUS.SMBI) (20150930 / адрес-254)
ACPI: этот конфликт может вызвать случайные проблемы и нестабильность системы
ACPI: если для этого устройства доступен драйвер ACPI, его следует использовать вместо собственного драйвера i801_smbus 0000: 00: 1f.3: SMBus с использованием прерывания PCI

Проверка ресурса ресурсов между родными драйверами и ACPI OperationRegions (только SystemIO и системная память). Порты ввода-вывода и память, объявленные в ACPI, могут использоваться подсистемой ACPI в произвольном коде AML и могут создавать помехи для устаревших драйверов. acpi_enforce_resources = может быть установлен в:

  • строгий (по умолчанию) (2) -> дальнейший драйвер, пытающийся получить доступ к ресурсам, не будет загружен
  • lax (1) -> будет загружен еще один драйвер, пытающийся получить доступ к ресурсам, но вы получите системное сообщение о том, что что-то может пойти не так ...

  • нет (0) -> Ресурсы региона деятельности ACPI не будут зарегистрированы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .