Linux: создайте виртуальный файл с возможностью mmap () (например, память SPI) - PullRequest
1 голос
/ 08 июля 2011

У меня есть символьное устройство, которое обеспечивает доступ к внешней памяти SPI, и я хотел бы mmap () внешней памяти, чтобы я мог получить доступ к ней из программы, как если бы это была обычная память.

Если я использую обычную реализацию переназначения страниц mmap () для файла устройства char, это просто позволяет мне увидеть область памяти устройства, а не ее виртуальный файл char ...

Есть ли уловка, позволяющая мне это сделать?

ТИА

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Если бы драйвер символьного устройства предоставлял реализацию mmap, он работал бы.Вероятно, на это есть веская причина:

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

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

1 голос
/ 08 июля 2011

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

...