Почему реализация pci linux для ififd использует «platform_driver» вместо «pci_driver»? - PullRequest
0 голосов
/ 26 сентября 2018

Реализация PCI-IFIFD CAN (drivers / net / can) основного ядра linux ( link) использует структуру platform_driver вместо структуры pci_driver.
У меня возникли проблемы с разграничением этих двух структур.Для этого я сообщил себе:
- драйвер платформы против обычного драйвера устройства
- платформа_драйвер
- pci_driver

Согласнок первому источнику:

В отличие от устройств PCI или USB, устройства I2C не перечисляются на аппаратном уровне (во время выполнения).Вместо этого программное обеспечение должно знать (во время компиляции), какие устройства подключены к каждому сегменту шины I2C. Таким образом, USB и PCI не являются платформенными устройствами .

Если это так, то почему реализация ififd PCI использует структуру platform_driver?
Кроме того, как кто-то может использовать этот драйвер для pci-карт, использующих ififd?

1 Ответ

0 голосов
/ 12 декабря 2018

Вы должны различать platform_driver, который является драйвером шины (контроллера), и pci_driver, который является драйвером устройства PCI (клиент на шине).

Это драйвер шины CAN шина CANДрайвер для контроллера IFI CANFD

Контроллеры шины (адаптеры) зарегистрированы в ядре как platform_devices

Драйвер PCI предоставляет перехватчики (обратные вызовы) и структуры для регистрации устройства PCI на уровне ядра PCI.и привязать его к устройству.

pci_register_driver() используется для регистрации структуры pci_driver для существующего устройства PCI на шине PCI, определенной в таблице struct pci_device_id xxx_pci_tbl[], с помощью Class, Vendor и Device ID для сопоставления с устройством.

struct pci_driver xxx_driver = {
    .name           = DRV_NAME,
    .probe          = xxx_pci_probe,
    .remove         = xxx_pci_remove,
    .id_table       = xxx_pci_tbl

/ Документация / PCI / pci.txt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...