Система на основе PowerPC использует Blob Tree Device Blob (DTB) , также называемый Источник дерева устройств (DTS) , который представляет собой базу данных, которая представляет аппаратные компоненты (Конфигурация процессора,Автобусы, периферия и т. Д.) На данной доске.Ядро Linux во время загрузки ожидает определенной информации об оборудовании, на котором оно работает.Информация об оборудовании передается от DTB к ядру программным обеспечением загрузчика (например, u-boot) в соответствии со стандартом Open Firmware .Как только ядро получит информацию об оборудовании, оно выполнит все настройки программного обеспечения как часть процедуры инициализации ядра.
С этого момента, если какой-либо программный компонент ядра (например, драйвер устройства) нуждается в деталях аппаратного обеспечения, он должен получить его от ядра, используя набор Стандартные двоичные интерфейсы открытого встроенного программного обеспечения .Некоторые из них перечислены ниже:
of_register_platform_driver() - Register driver for device
of_unregister_platform_driver() - Unregister driver for device
of_address_to_resource() - Obtain physical address of peripheral
of_get_property() - Find property with a given name for a given node
of_find_node_by_phandle() - Find a node given a phandle
irq_of_parse_and_map() - Parse and map an interrupt into linux virq space
of_irq_to_resourse() - Obtain virtual IRQ of peripheral
...
...
Теперь перейдем к проблеме, поднятой здесь.irq_of_parse_and_map()
используется для анализа и отображения прерывания в пространство linux virq.Обычно это будет сделано драйвером устройства контроллера прерываний системы.Когда сопоставление прерываний выполнено, вы можете получить источник прерывания virq , обратившись к вызову of_irq_to_resource()
.Этот шаг потребуется для регистрации обработчика прерывания в источнике прерывания.Поэтому попробуйте использовать of_irq_to_resource()
вместо irq_of_parse_and_map()
.
Ref:
Blob Tree Tree: http://www.informit.com/articles/article.aspx?p=1647051&seqNum=5
Открыть прошивку: http://www.openfirmware.org/
интерфейса IRQ: linux-2.6 / drivers / of / irq.c