LINUX.ORG.RU

Linux kernel обработка прерываний

 


1

4

Народ, а вот кто в прерываниях понимает что-нибудь? Нужна помощь.

Номер прерывания в таблице IDT, и номер линии прерывания – это не одно и то же?

Такие дела – линукс ядро, при регистрации обработчика прерывания требует именно номер линии прерывания. А я знаю только номер из IDT. Если они совпадают и это одно и тоже – тогда без проблем. Но если не совпадают, то как мне найти номер линии?

Случай, когда они не совпадают я уже знаю – например, NMI (немаскируемое прерывание). Оно имеет номер 2 в таблице IDT, но вот линия номер 2 отдана под каскадное подключение другого контроллера прерываний. У NMI нет линии, оно отдельно.

А для остальных прерываний, которые обычные, маскируемые, как найти их линии?

★★★★★

«Каскадное подключение другого контроллера» было в 80-х годах. Если тебе интересно как там было устроено, то «линии» IRQ0-IRQ7 (первый контроллер) соответствовали INT08-INT0F, а «линии» IRQ8-IRQ15 - INT70-INT77.

Схема с двумя контроллерами исчезла ещё во времена 80486-х процов (выпущен в конце 80-х), более-менее эмулировалась чипсетом до конца 90-х, а на текущий момент от неё остался только легаси-интерфейс для старых ОС типа доса. Современное железо теми линиями не пользуется, ищи описание текущей ситуации по словам APIC, MSI, MSI-X.

Отдельно уточню, что старая схема была совершенно не рассчитана на многопроцессорную (многоядерную) конфигурацию системы. Современные прерывания это не просто однобитные линии, а шина сообщений между устройствами и процами, с программируемой логикой их маршрутизации.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 2)
Ответ на: комментарий от firkax

Ну у меня не последний писк моды. Проц-то – Vortex DX3.

То что, в /proc/interrupts показывается cascade напротив 2-й линии – вполне может быть просто легаси интерфейсом. Но проблемы это не отменяет.

Проблема сконвертировать номер из IDT в линию прерывания.

hibou ★★★★★
() автор топика

Я, короче, попытался сделать 2 финта ушами. Думал, что каждый продвинет меня в понимании. Но оба загнали меня в еще большее «я_ниче_не_понял.жпг».

Итак, финт 1: В ядре есть функция, irq_to_desc(irq) – ей на вход отдаешь линию прерывания, она в ответ тебе дает указатель на некую структуру в которой можно найти номер прерывания в IDT. Я напечатал все подключенные линии и номера прерываний на них. Номера оказались нулями. Как так? Неужели ни к одной линии ничего не подключено? А как тогда прерывания работают?

Финт 2: Есть функции probe_irq_on() и probe_irq_off(). Между ними можно заставить устройство сгенерировать прерывание. И тогда последняя функция скажет какая линия засветилась. Знаете какой итог? Тоже 0!!!

ЯННП.жпг

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

Просто в документации к pci_dev, например, написано как раз вот это:

struct pci_dev {
[snip]
	/*
	 * Instead of touching interrupt line and base address registers
	 * directly, use the values stored here. They might be different!
	 */
	unsigned int	irq;
[snip]
cumvillain
()
Ответ на: комментарий от hibou

Я мало что помню про ISA, но у тебя случаем IRQ оттуда не на GPIO контроллер заходят? Плата с вортексом кастомная? Ну или у тебя обработка прерываний в ISA контроллере должна каким-то образом быть и наружу уже выходить в обобщённом виде.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Dark_SavanT

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

hibou ★★★★★
() автор топика

Номер прерывания в таблице IDT, и номер линии прерывания – это не одно и то же?

Номер прерывания в таблице IDT, номер линии прерывания и регистрационный номер обработчика прерывания в ядре – это в общем случае не связанные друг с другом вещи и могут иметь разные значения. Устройство может быть подключено не напрямую к линиям прерываний процессора, а через дополнительный контроллер прерываний, GPIO и т.п.. Надо смотреть документацию на конкретное железо.

X512 ★★★★★
()
Ответ на: комментарий от hibou

Поговорил с инженером этого девайса, к которому я пишу драйвер. Он подтвердил мою догадку, я правильно думаю про маршрутизацию прерываний. «Верной дорогой идете, товарищи». )))

Сильнее наседать на него стеснительно. Надо курить документацию на Вортекс. Конкретно на регистры южного моста.

Правда если я переключу прерывания на ISA, я останусь без SSD и без сети. Но это только доли секунды. Потом обратно переключу.

Короче, курим даташит.

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

Ееее!!! Ураааа!! Я получил ответы на свои вопросы!

Ну да, короче, это маршрутизация прерываний. Ее можно настроить двумя путями. Для некоторых номеров можно настроить через БИОС, там есть пунктик – Reserved, это значит, что прерывание зарезервировано за шиной ISA.

И второй путь – для некоторых прерываний нет настроек в биосе. Либо чтобы не полагаться на эти настройки, в таких случаях надо самому настраивать через регистры процессора. Для вортекса есть адрес куда пишешь 2 двойных слова, т.е. 64 бита, эти биты влияют на маршрутизацию разных прерываний.

Щас у меня пока заработало с настройкой через биос.

Через регистр процессора я пока очень грубо переключил воще все прерывания на ISA, и у меня конечно же сломалась система. Но я потихоньку веду работу, чтобы сделать это более тонко. Чтобы переключить только то прерывание, которое нужно, а не все сразу.

И да, номер прерывания в IDT пока что совпадает с номером линии прерывания. Может это частный случай, но мне этого хватит сейчас.

hibou ★★★★★
() автор топика
Ответ на: комментарий от anonymous

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

PCI она тоже использует, но я еще не дошел, пока с ISA разбираюсь.

hibou ★★★★★
() автор топика
Ответ на: комментарий от hibou

Ну я догадывался, что железка на ISA не с алика скорее всего)

Но зачем ISA в 2024? Ком-порт например понятно, вещь универсальная, а ISA что ли тоже для простоты отладки железа используется?

Может фотку как это выглядит? Хоть обрезанную, интерфейс там только. Интересно жы.

anonymous
()
Ответ на: комментарий от anonymous

Без понятия. Это уже заказчики, менеджмент наверное. Или кто там решает кому че надо. Мы люди маленькие – партия сказала «надо», комсомол ответил «есть» )))

hibou ★★★★★
() автор топика