/ / Могат ли многобройни драйвери да се регистрират, за да се справят със същото устройство в linux - linux, linux-kernel, interrupt, interrupt-handling

Могат ли многобройни драйвери да се регистрират, за да се справят с едно и също устройство в linux - linux, linux-kernel, interrupt, interrupt-handling

Аз преминавам през Linux Kernel Development отРобърт Любов и в момента четене прекъсва обработка в Linux. Споменато е, че драйверът може да се регистрира, за да се справи с хардуерно устройство, използвайки функцията по-долу, където последният аргумент dev е уникален w.r.t на устройството. Това означава ли, че не можем да имаме два драйвера за устройства, обслужващи едно и също хардуерно устройство? Ако искам да внедря драйвер за клавиатура, който работи заедно с вече съществуващи драйвери, не е възможно ли? Трябва ли да дерегистрирам съществуващия драйвер за клавиатура и да се регистрирам това, което съм написал?

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

Отговори:

1 за отговор № 1

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

Шофьорите на устройства обикновено споделят прекъсва, когатохардуер осигурява единична прекъсване, която се използва за множество компоненти на хардуера, всеки от които има собствен драйвер. В този случай хардуерът ще предостави и статус на прекъсване и битове за маска за всеки от компонентите.

Не знам нищо за клавиатурата вихардуер, така че е трудно да се каже дали можете да използвате два драйвера за устройства с него.Ако всичко, от което се нуждаете, е четене на достъп до устройството и състоянието на устройството не се променя от другия драйвер, може да работи.

Споделянето на UART между двата драйвера, например, със сигурност няма да работи, защото само един от драйверите ще може да чете символи от RIFO FIFO.