Вопрос или проблема
Я использую 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
. Это связано с несколькими факторами:
-
Кэширование модулей: Иногда ядро может сохранять некий кэш модулей, что позволяет им продолжать работать даже после физического удаления, до перезагрузки ядра.
-
Альтернативные модули: Возможно, что за те устройства, которые вы видите, отвечают не эти конкретные модули, а их аналоги или более низкоуровневые драйверы.
-
Статический драйвер: На этапе компиляции ядра некоторые драйверы могут быть встроены (статически скомпилированы) прямо в само ядро, а не загружаться как модули. Это значит, что они будут работать независимо от наличия их в
/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, вышеописанная информация поможет вам в следующих аспектах:
-
Диагностика: Понимание того, как драйверы могут быть встроены или загружаемы в ОС, помогает в эффективной диагностике проблем.
-
Оптимизация: Понимание кэширования и управления модулями может помочь в оптимизации загрузки системы и работы с периферией.
-
Проектирование: При работе с кастомными ядрами или специализированными приложениями ситуация подобная вашей может возникнуть часто, и она подчеркивает важность верного проектирования с учетом всех особенностей модульной системы Linux.
В заключение, эффективность работы с драйверами I2C зависит от понимания специфики их загрузки и взаимодействия с операционной системой. Ubuntu 22.04, как и другие версии, предоставляет гибкие инструменты для этого, демонстрируя богатую экосистему управления оборудованием. Надеюсь, представленная информация помогла в понимании концепции и применения драйверов I2C в вашей системе.