Я запускаю встроенный linux 3.2.6 на ARM-процессоре. Я использую модифицированную версию последовательного драйвера atmel для управления четырьмя портами USART на моем устройстве. Когда я использую драйвер, скомпилированный с ядром, все работает нормально. Но вместо этого я хочу запустить драйвер как модуль ядра. Я делаю все необходимые изменения и отключает внутренний драйвер, и все кажется прекрасным. Устройства 4 tty успешно зарегистрированы, и я вижу, что все мои функции зондирования и инициализации работают правильно.request_irq преуспевает, но прерывание никогда не обнаруживается
Итак, вот в чем проблема: Когда я пытаюсь написать какое-либо из устройств, моя функция «начать передачу» вызывается, а затем ждет прерывания от usart, который никогда не возникает. Таким образом, запись просто зависает, и, используя логический анализатор, я вижу, что RTS получает подтверждение, но на строке tx не отображаются байты. Я знаю, что мой вызов request_irq преуспевает, но я никогда не вижу никаких записей irq в/proc/interrupts. В драйвере я также попытался использовать request_irq для регистрации отдельного обработчика прерываний для линии gpio, и это отлично работает.
Я знаю, что это проблема, которую, вероятно, трудно диагностировать, но я ищу ЛЮБЫЕ возможные предложения, которые могли бы привести меня в правильном направлении к поиску решения. Дайте мне знать, если вам нужны какие-либо разъяснения. Спасибо
Другая мысль, когда используется встроенный драйвер/proc/interupts, показывает, что irq зарегистрирован как «AIC» irqs. Может ли быть что-то, что приведет к отключению между Advanced Interrupt Controller и загружаемым модулем? – user1415608
Что делает * «Я делаю все необходимые изменения и отключает внутренний драйвер» * означает? Почему вы должны «отключить» «внутренний» драйвер? Означает ли это, что в памяти могут быть две версии драйвера? Связано ли это с тем, что серийный драйвер Atmel не может быть настроен на загрузку модуля через 'make menuconfig'? – sawdust