Nano Hash - криптовалюты, майнинг, программирование

Linux: заставить прерывание PCIe MSI запускаться из командной строки

Фон

У меня возникла проблема, когда на 32-битном ядре Linux мой драйвер PCIe с несколькими MSI и пользовательским аппаратным устройством будет работать отлично, теперь я перешел на 64-битный процессор iMX8MM, и прерывания MSI больше не срабатывают. Драйвер правильно регистрирует прерывания без каких-либо ошибок, и я могу просмотреть вывод cat /proc/interrupts и увидеть все векторы MSI, перечисленные для моего драйвера, вместе с их счетчиком прерываний, который равен нулю. Есть мост, но /sys/bus/pci/devices/<address>/msi_bus имеет 1, поэтому он включен. Все из lspci -vv выглядит в порядке и CONFIG_PCI_MSI было применено к ядру. Я могу читать и записывать буферы памяти на устройстве PCIe, поэтому связь работает правильно, я просто не могу запустить прерывания MSI. Это точно такой же код драйвера, работающий на 32-битном ЦП, который работал и был перекомпилирован на новом 64-битном ЦП.

Вопрос

Как заставить систему прерывать MSI, чтобы увидеть, подхватит ли Linux его и выполнит ли мой код? Из lspci -vv я вижу адрес MSI и знаю значение вектора MSI для записи. Итак, где я могу написать это в системе? Я просмотрел /dev/mem и другие области, где я мог бы выполнить echo 0x1 > <address> или какую-либо другую функцию командной строки, чтобы записать значение и вызвать его. Где и как мне написать, чтобы вызвать определенное прерывание MSI?


Ответы:


1

MSI не может запускаться процессором; запись двойного слова, которая запускает прерывание, распознается как прерывание только тогда, когда она исходит от устройства.

ЦП может инициировать прерывание аналогичным образом, записывая в локальный регистр APIC ICR. Это можно сделать только из ядра, и, насколько я знаю, нет существующей службы ядра, позволяющей вводить произвольное прерывание. Возможно, вы можете добавить службу в драйвер ядра, чтобы сделать это. (Обратите внимание, в качестве временного средства отладки; было бы ужасно неуместно оставлять это на месте в драйвере.)

Поля ICR не идентичны полям MSI, но похожи. Должно быть просто сравнить документацию для двух, чтобы сопоставить одно с другим.

05.09.2020
  • Ваше решение не пробовал, пересобрал ядро ​​и теперь все работает. 11.09.2020
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..