Събирайки всичко
За да разберем по-добре какво прави моделът на драйвера, нека преминем през жизнения цикъл на устройство в ядрото. Описваме как взаимодейства подсистемата 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;
неподписан къс продавач;
неподписано кратко устройство;