Отображение памяти на пользовательском HW

Я новичок в использовании mmap и отображении регистров HW, возможно, вопросы просты. Итак, моя проблема в том, что у нас есть несколько пользовательских HW, которые имеют 32-битные регистры. Одним из требований является то, что я должен использовать mmap для обеспечения быстрых операций ввода-вывода.

Я вижу в примерах, что люди используют dev/mem как общий файл. Это хорошая идея, или я должен создать свой собственный dev/custom и поместить туда отображенную память? Есть ли какие-то преимущества в этом?

Во-вторых, есть ли инструменты, позволяющие мне создать сопоставленный файл, например, dev/custom или как это сделать?

В-третьих, как мне убедиться, что смещение всегда кратно размеру страницы? В моем случае это 4096 байт.

Я использую с ++ и Linux.

1 ответ

Это зависит от вашей аппаратной платформы. Для Intel ПК вы можете использовать IO портов и IO с отображением памяти, для ARM - IO памяти.

Прежде всего, вы должны указать, какую шину и конфигурацию, которую вы поддерживаете, например, можно ли перечислить с помощью PCI, USB или просто жестко закодированных коммуникаций в специальной памяти (SoC-way)?

Последнее, о чем стоит беспокоиться, это как на самом деле отобразить (физическую) память этого устройства в адресное пространство вашего приложения или драйвера. В linux вы выполняете mmap со смещением в виде BAR вашего оборудования (выровненного по страницам), затем вы можете получить доступ к IO, отображенному в памяти, с помощью указателя виртуального адреса. (Вам может потребоваться дополнительная настройка флагов кеша)

Другие вопросы по тегам