Отображение памяти на пользовательском 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, отображенному в памяти, с помощью указателя виртуального адреса. (Вам может потребоваться дополнительная настройка флагов кеша)