Понимание концепции драйвера i2c в Ubuntu 22.04?

Вопрос или проблема

Я использую Ubuntu 22.04. Какие модули в основном поддерживает драйвер a? Я удалил папку i2c по пути /lib/modules/6.8.0-52-generic/kernel/drivers, и эти устройства всё ещё можно увидеть после перезагрузки.

Разве i2c-ccgx-ucsi.ko и i2c-designware-pci.ko не являются этими двумя модулями?

sudo i2cdetect -l
i2c-0   smbus           SMBus I801 adapter at efa0              SMBus adapter
i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-2   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-3   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-4   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-5   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-6   i2c             Synopsys DesignWare I2C adapter         I2C adapter

Ответ или решение

Вопрос об управлении драйверами I2C в операционной системе Ubuntu 22.04 требует глубокого понимания работы модуляции ядра Linux и, в частности, взаимодействия с шиной I2C. I2C (Inter-Integrated Circuit) — это коммуникативный протокол, который широко используется для подключения различных интегральных микросхем и электронных компонентов в устройствах.

Теория

В операционных системах, таких как Ubuntu, поддержка разных периферийных устройств выполняется через драйверы, которые фактически являются посредниками между аппаратным обеспечением и операционной системой. В случае I2C, драйверы поддерживают различные адаптеры, работающие по этому протоколу. Обычно они размещены в каталоге /lib/modules/<версия-ядра>/kernel/drivers/i2c/. Основными компонентами здесь являются модули ядра, такие как i2c-ccgx-ucsi.ko и i2c-designware-pci.ko.

Удаление этих модулей обычно должно привести к исчезновению поддержки соответствующих устройств, однако в реальности устройства всё ещё могут отображаться при выполнении команды i2cdetect -l. Это связано с несколькими факторами:

  1. Кэширование модулей: Иногда ядро может сохранять некий кэш модулей, что позволяет им продолжать работать даже после физического удаления, до перезагрузки ядра.

  2. Альтернативные модули: Возможно, что за те устройства, которые вы видите, отвечают не эти конкретные модули, а их аналоги или более низкоуровневые драйверы.

  3. Статический драйвер: На этапе компиляции ядра некоторые драйверы могут быть встроены (статически скомпилированы) прямо в само ядро, а не загружаться как модули. Это значит, что они будут работать независимо от наличия их в /lib/modules.

Пример

В вашей ситуации, при выполнении команды i2cdetect -l, вывод показывает, что в системе определено несколько адаптеров I2C:

i2c-0   smbus           SMBus I801 adapter at efa0              SMBus adapter
i2c-1   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-2   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-3   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-4   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-5   i2c             Synopsys DesignWare I2C adapter         I2C adapter
i2c-6   i2c             Synopsys DesignWare I2C adapter         I2C adapter

Настоящее значение здесь заключается в том, что адаптеры, такие как Synopsys DesignWare, могут всё ещё быть распознаны даже без соответствующих файлов в i2c директории. Это указывает, что драйверы могут быть встроены в ядро. Драйверы Synopsys DesignWare иногда компилируются статически, что устраняет необходимость в их ручной подготовке.

Применение

Если вы рабочите с разработкой и отладкой устройств, взаимодействующих с I2C на Ubuntu, вышеописанная информация поможет вам в следующих аспектах:

  1. Диагностика: Понимание того, как драйверы могут быть встроены или загружаемы в ОС, помогает в эффективной диагностике проблем.

  2. Оптимизация: Понимание кэширования и управления модулями может помочь в оптимизации загрузки системы и работы с периферией.

  3. Проектирование: При работе с кастомными ядрами или специализированными приложениями ситуация подобная вашей может возникнуть часто, и она подчеркивает важность верного проектирования с учетом всех особенностей модульной системы Linux.

В заключение, эффективность работы с драйверами I2C зависит от понимания специфики их загрузки и взаимодействия с операционной системой. Ubuntu 22.04, как и другие версии, предоставляет гибкие инструменты для этого, демонстрируя богатую экосистему управления оборудованием. Надеюсь, представленная информация помогла в понимании концепции и применения драйверов I2C в вашей системе.

Оцените материал
Добавить комментарий

Капча загружается...