Platofrm - Linux, Arch - ARM Программирование языки - C/C++файл карты, чтобы барана
Цель - карта регулярно (скажем текст) файл в заранее известном месте (физический адрес) в оперативной памяти и передать этот физический адрес в другое приложение. Размер блока, который я собираю за один раз, составляет 128 КБ.
Способ, которым я пытаюсь перейти, - Процесс пространства пользователя вызывает вызов ioctl, чтобы попросить драйвер устройства получить блок памяти (ram), вычислить физический адрес и вернуть его в пространство пользователя.
Процесс пользовательского пространства должен отображать файл в это физическое адресное пространство Я не уверен, как это сделать. Любая помощь приветствуется. ???
Проблема с вызовом mmap в файле, а затем вычисление физического адреса заключается в том, что страницы не находятся в памяти, пока кто-то не получит доступ к ним, а выделенные страницы физической памяти не будут смежными.
Другой процесс, который фактически получит доступ к файлу, поступает от стороннего поставщика. Это приложение требует, как только мы передадим ему физический адрес, содержимое файла должно присутствовать в непрерывной памяти.
Как я делаю это прямо сейчас -
процесс пользователя вызовите ММАП к устройству. Драйвер устройства выполняет kmalloc, вычисляет начальный физический адрес и сопоставляет VMA с этим физическим адресом. Теперь пользовательский процесс выполняет чтение файла и копирует его в адресное пространство, полученное во время mmap.
Ошибка. Копия файла существует в двух местах в баране, когда чтение выполняется с диска и другое, когда я копирую его в буфер, полученный с помощью mmap и соответствующих накладных расходов на копирование. В идеальном мире я хотел бы загрузить файл непосредственно с диска в известное/предопределенное местоположение.
Пытается перефразировать вопрос: для устройства (встроенного Linux?) Существует жесткий диапазон физических адресов для ввода-вывода. Этот диапазон адресов должен быть сопоставлен с файлом, поэтому любой, кто читает или записывает файл, будет выполнять IO для устройства. Как диапазон адресов можно сопоставить с файлом? – nalply