получить физический адрес буфера под Linux

Я использую ядро Linux 3.3 на Microblaze Xilinx с полным MMU. задача, которую я выполняю, требует, чтобы я знал следующее: мне нужно создать текстовый файл (буфер) и найти физический адрес этого буфера, и я не хочу, чтобы ядро записывало этот файл в отдельные области памяти.

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

Больше деталей:

моя система имеет 512 МБ оперативной памяти DDR3, подключенной к системе через многопортовый контроллер памяти (MPMC) «Xilinx». Базовый адрес этого контроллера памяти - 0x90000000, все устройства в памяти системы обращаются через этот контроллер, включая MicroBlaze, DMA Устройство, которое у меня есть, использует специальный интерфейс, называемый Native Personality Interface (NPI), для связи с памятью на очень низком уровне, что обеспечивает очень высокую производительность.

Этот модуль NPI DMA изначально был разработан для использования в самом базовом встроенном ядре под названием «xilkernel», которое не поддерживало виртуальную память, ни MMU не был частью MicroBlaze, поэтому программист мог видеть, где будет находиться код ОС, и выбирать физическую память. адрес, такой как 0x91800000, как исходный адрес, с которого DMA будет передавать поток, затем программист может поместить файл по этому точному адресу и запустить систему

когда нам нужно было перенести проект для использования Linux вместо xilkernel, мы столкнулись с этой проблемой, у меня есть файлы на внешнем устройстве хранения, к которым я могу получить доступ как блочное устройство из Linux, и мне нужно переместить каждый файл в основную память (ОЗУ DDR3) и сделать поток DMA файлом. в настоящее время потоки DMA с фиксированного адреса, но я могу сделать его общим, если это необходимо.

Ответы на вопрос(2)

Ваш ответ на вопрос