Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания в Linux
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы
Docent86
Железо:
Одноплатный комп + плата расширения.
Софт:
ubuntu 8.04, ядро 2.6.24-26-generic
исходники модуля для платы расширения
Суть:
Плата расширения сидит на РС-104 шине (аналог ISA), имеет встроенную память с которой и работаем, вырабатывает прерывания. Прерывания на плате задаются перемычками, соответствующие прерывания включаем в Биосе и при инициализации модуля. Прерывания выбираются согласно манулу на ОПК для исключения конфликтов. Базовый адрес тоже на перемычках и т.д. Чтение/запись памяти платы на отлично, плата работает и вырабатывает прерывания которые можно наблюдать физически (на осцилографе длительность прерывания 500мс). далее - смотрим /proc/interrupts видим наше устройство и счетчик прерываний = 0. Система не видит\не реагирует на поступающее прерывание. --> обработчик прерываний соответственно не запускается.
Танцы с бубном в биосе результатов не дали. Где искать что делать? [size="3"][/size]
gosha
QUOTE (Docent86 @ Sep 18 2012, 08:00) *
Железо:
Одноплатный комп + плата расширения.
Софт:
ubuntu 8.04, ядро 2.6.24-26-generic
исходники модуля для платы расширения
Суть:
Плата расширения сидит на РС-104 шине (аналог ISA), имеет встроенную память с которой и работаем, вырабатывает прерывания. Прерывания на плате задаются перемычками, соответствующие прерывания включаем в Биосе и при инициализации модуля. Прерывания выбираются согласно манулу на ОПК для исключения конфликтов. Базовый адрес тоже на перемычках и т.д. Чтение/запись памяти платы на отлично, плата работает и вырабатывает прерывания которые можно наблюдать физически (на осцилографе длительность прерывания 500мс). далее - смотрим /proc/interrupts видим наше устройство и счетчик прерываний = 0. Система не видит\не реагирует на поступающее прерывание. --> обработчик прерываний соответственно не запускается.
Танцы с бубном в биосе результатов не дали. Где искать что делать? [size="3"][/size]


Linux пере-инициализирует контроллер прерываний при загрузке.
У Вас PnP PC-104 плата? Linux ее находит?
Попробуйте параметры загрузки ядра pci=biosirq

/proc/bus/isapnp
/proc/bus/eisa
dmesg > log

Либо обработчик завесился не на то прерывание.
Другие драйвера используют это перывание?
Docent86
Плата не ПнП, в комплекте с платой идут исходники модуля
в /proc/bus/ только input, pci, usb
в dmesg три записи о модуле :
no version for "struct_modules" found: kernel tainted
module license 'uncpecified' taints kernel
registered device..

никто другой прерывание не использует, прерывание назначается при загрузке insmod'ом с параметрами
isapnp: No Plug & Play devices found
Хотя сама плата работает - в ее память можно записать и считать данные, плата понимает команды управления и вырабатывает прерывание по результатам работы!!!
плата занимает два прерывания назначаемые параметрами при инициализации модуля, в /proc/interrupts эти два прерывания числятся под соотв номерами... но только числятся. значения = 0. в /dev/ устройство тоже есть. В биосе ОПК пробовали отключать ACPI, запускали ядро с параметрами не помогает
gosha
QUOTE (Docent86 @ Sep 18 2012, 10:26) *
Плата не ПнП, в комплекте с платой идут исходники модуля
в /proc/bus/ только input, pci, usb
в dmesg три записи о модуле :
no version for "struct_modules" found: kernel tainted
module license 'uncpecified' taints kernel
registered device..

никто другой прерывание не использует, прерывание назначается при загрузке insmod'ом с параметрами
isapnp: No Plug & Play devices found
Хотя сама плата работает - в ее память можно записать и считать данные, плата понимает команды управления и вырабатывает прерывание по результатам работы!!!
плата занимает два прерывания назначаемые параметрами при инициализации модуля, в /proc/interrupts эти два прерывания числятся под соотв номерами... но только числятся. значения = 0. в /dev/ устройство тоже есть. В биосе ОПК пробовали отключать ACPI, запускали ядро с параметрами не помогает


Шина PCI или Express ?

Linux при старте может запрещать роутинг прерываний в isa-pci bridge, если не находит на ISA плат.
Это регистры pci-isa bridge. Или irq isa роутятся не так, как мы думаем?


Я бы, для начала, установил 4 любые карточки во все слоты PCI.
Определил бы их прерывания(/proc/interrupt)
Выгрузил бы драйвера карточек.
И последовательно завесился драйвером от PC-104 на их IRQ.



Docent86
Цитата(gosha @ Sep 19 2012, 10:26) *
Шина PCI или Express ?

Linux при старте может запрещать роутинг прерываний в isa-pci bridge, если не находит на ISA плат.
Это регистры pci-isa bridge. Или irq isa роутятся не так, как мы думаем?


Я бы, для начала, установил 4 любые карточки во все слоты PCI.
Определил бы их прерывания(/proc/interrupt)
Выгрузил бы драйвера карточек.
И последовательно завесился драйвером от PC-104 на их IRQ.


Шина PC-104 - это такой аналог ISA шины при котором устройства ставятся одно на другое сверху третье, поэтому слот только один, используется на промышленных одноплатных компьютерах (ОПК).
Плата не ПнП и ИРКю назначаются ручками при инициализации драйвера - insmod с параметрами, и на плате джамперами соотв. IRQ выбирается в соответствии с мануалом на ОПК в котором указано какие ИРКю выделены для PC-104 шины. Если IRQ выбрать не из списка модуль(драйвер) не запуститься всвязи с тем что IRQ уже используется. При загрузке ядра идет поиск ISA PnP устройств и естественно не находит т.к. не ПнП плата.


Да скорее всего IRQ isa как-то роутятся непонятно.
Как разрешить роутинг isa-pci?

P.S. - lspci:
00:01.0 PCI bridge: VIA Technologies, Inc. VT8605 [ProSavage PM133]
00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [PM133 AGP]
Docent86
Наткнулся на форум по QNX - там ребята с этой же платой работают и у них точно такая же проблема. Под "окнами" и ДОСом плата работает нормально, в КуНиксе ошибка по прерываниям.
gosha
QUOTE (Docent86 @ Sep 19 2012, 15:30) *
Наткнулся на форум по QNX - там ребята с этой же платой работают и у них точно такая же проблема. Под "окнами" и ДОСом плата работает нормально, в КуНиксе ошибка по прерываниям.


Все ISA прерывания через pci-isa bridge подключаются в прерывания PCI.
Физичесики на шине их всего 4 провода: pci_irq_a, pci_irq_b, pci_irq_c, pci_irq_d

Вставьте 4 карточки в 4 первых слота PCI и узнайте их прерывания.
Не вытаскивайте пока карточек. Выгрузите их драйвера, чтобы не испортить распределение и маскирование irq в контроллере.
И завесьте обработчик последовательным перебором на каждое из прерываний PCI.

Не спорьте.


=========================================================

Какое ISA прерывание в какую PCI_irq line (a.b.c.d) map-ятся?
Какие номера irq соответсвуют pci_irq_a, pci_irq_b, pci_irq_c, pci_irq_d

Содержимое регистров 0x60, 0x61, 0x62, 0x63 Pci-ISA bridge?
http://www.openwatcom.org/index.php/PCI_Interrupt_Routing
Убедитесь, что они правильные.


Docent86
Цитата(gosha @ Sep 20 2012, 12:10) *
Вставьте 4 карточки в 4 первых слота PCI и узнайте их прерывания.

СЛОТ ОДИН -> РС-104 )))
сегодня другую "материнку" принесли (производители разные), переставил CompactFlash на новую, установил испытуемую плату, включил все работает. Но в новой "материнке" в настройках Биоса если отключить ISA bridge subtractive decode (управление субтрактивным декодированием моста PCI-ISA) не только IRQ игнорируются, но и обмен данными. На старой "материнке" Биос "убогий" и в нем нет такой возможности как и многих других.
Теперь основной вопрос можно перефразировать - "Как включить не через настройки Биоса ISA bridge subtractive decode"
P.S. старая "материнка" - Octagon Systems XE-900 (USA), новая - Faswel CPC308-01(производятся в Росии)
Docent86
Тему можно закрывать.
Помогло отключение SMM (System Management Mode).
ACPI на этот момент уже был отключен.
На другом процессорном модуле это делается включением ISA bridge subtractive decode (управление субтрактивным декодированием моста PCI-ISA)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.