Я разрабатываю модуль ядра Linux, который взаимодействует с аппаратным компонентом, обращающимся к DDR, используя DMA. (Бег на руке SoC)Промывка диапазона виртуальных адресов
Что водитель по существу делает это выделить буфер (вес/kmalloc), и записать физический (используя virt_to_phys) адрес буфера для базового оборудования
При чтении буфера , старые данные, похоже, читаются, что указывает на проблему с кешем (при непосредственном контроле DDR, обход Linux, считывание новых данных).
Я не могу понять, как работает очистка или аннулирование кеша.
Каков наилучший подход?
Использование ядра 3,14
Спасибо. Могу ли я использовать либо методы, чтобы выделить физически смежную память? –
на dma_alloc_coherent вы получаете физически непрерывный буфер памяти. Если вы используете dma_map_single, вам нужно передать ему выделенный континуум буфер (выделенный, например, с помощью kmalloc) –