Вот моя проблема.В настоящее время я обновляю ядро машины со встроенным Linux, переходя с 4.1 на 4.14.73 .
У меня проблема с драйвером.В ядре 4.1 непосредственно перед регистрацией irq с помощью request_irq
флаг IRQF_VALID
будет установлен для драйвера set_irq_flags
.
Как указано здесь ,
set_irq_flags является специфичным для ARM с пользовательскими флагами, которые имеют эквиваленты genirq.Конвертируйте драйверы для непосредственного использования интерфейсов genirq, чтобы мы могли отключить set_irq_flags.Перевод флагов выглядит следующим образом:
IRQF_VALID
-> !IRQ_NOREQUEST
IRQF_PROBE
-> !IRQ_NOPROBE
IRQF_NOAUTOEN
-> IRQ_NOAUTOEN
Следовательно, я заменил set_irq_flags
на irq_clear_status_flags(irq, IRQ_NOREQUEST)
.
Дело в том, что теперь вызов request_irq
возвращает -16
(-EBUSY
), и у меня естьпонятия не имею почему.Я проверил каждый запрос IRQ (во время выполнения), и все они отличаются от того, который запрашивает этот драйвер.
Я также заметил эту строку в журнале:
genirq: Несоответствие флагов irq 40. 00000004 (digitalGPIO) против 00000000 ((ноль))
Я очень озадачен именем устройства (null)
.
Что я делаюне так?
Надеюсь, я включил достаточно контекстной информации.