Събирайки всичко

За да разберем по-добре какво прави моделът на драйвера, нека преминем през жизнения цикъл на устройство в ядрото. Описваме как взаимодейства подсистемата PCI с модела на драйвера, основните концепции за добавяне и премахване на драйвер и как устройствата се добавят и премахват от системата. Тази информация и по-специално при описването на кода на ядрото на PCI се отнася за всички други подсистеми, които използват ядрото на драйвера, за да контролират своите драйвери и устройства.

Както е показано на фигура 14-3, взаимодействието между PCI ядрото, ядрото на драйвера и отделните PCI драйвери е доста сложно.

ядрото драйвера

Фигура 14-3. Процес на създаване на устройство

Добавяне на устройство

Подсистемата PCI декларира един структурен тип_буса, наречен pci_bus_type, който се инициализира със следните стойности:

struct bus_type pci_bus_type =

Тази променлива pci_bus_type се регистрира в ядрото на драйвера, когато подсистемата PCI се зарежда в ядрото чрез извикване на bus_register. Когато това се случи, ядрото на драйвера създава директория/sys/bus/pci в sysfs, която се състои от две директории: устройства и драйвери .

Всички PCI драйвери трябва да дефинират променлива struct pci_driver, която определя различните функции, които този PCI драйвер може да изпълнява (за повече информация относно PCI подсистемата и как да напишете PCI драйвер, вижте Глава 12). Тази структура съдържа структура device_driver, която след това се инициализира от ядрото на PCI при регистрация на PCI драйвер:

/ * инициализация на обичайните полета на драйвера * /

Този код настройва шината за драйвера, като посочва указател към pci_bus_type и указатели за сондиране и премахване на функции за насочване към функции в ядрото на PCI. За да работят правилно атрибутите на PCI драйвера, ktype за драйвера kobject е зададен на променливата pci_driver_kobj_type. След това ядрото PCI регистрира PCI драйвера с ядрото на драйвера:

/ * регистрирайте се в ядрото * /

Драйверът вече е готов за комуникация с всички PCI устройства, които поддържа.

неподписан int devfn;

неподписан къс продавач;

неподписано кратко устройство;