Может ли несколько драйверов зарегистрироваться для работы с одним устройством в Linux? - PullRequest
0 голосов
/ 09 мая 2018

Я изучаю разработку ядра Linux Робертом Лавом и сейчас читаю обработку прерываний в Linux. Было упомянуто, что драйвер может зарегистрироваться для обработки аппаратного устройства, используя функцию ниже, где последний аргумент dev является уникальным в отношении устройства. Означает ли это, что у нас не может быть двух драйверов устройств, обслуживающих одно и то же аппаратное устройство? Если я хочу реализовать драйвер клавиатуры, который работает вместе с уже существующими драйверами, разве это невозможно? Должен ли я отменить регистрацию существующего драйвера для клавиатуры и зарегистрировать тот, который я написал?

int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, 
const char *name, void *dev) 

1 Ответ

0 голосов
/ 09 мая 2018

В некоторых случаях строки запроса прерывания распределяются между драйверами. В таких случаях драйверы предоставляют IRQF_SHARED в флагах и предоставляют уникальное значение dev при вызове request_irq ().

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

Я ничего не знаю об оборудовании вашей клавиатуры, поэтому трудно сказать, можно ли использовать с ним два драйвера устройства. Если вам нужен только доступ для чтения к устройству, а состояние другого драйвера не меняется, это может сработать.

Совместное использование UART между двумя драйверами, например, определенно не будет работать, потому что только один из драйверов сможет читать символы из RX FIFO.

...