Ошибка непереведенной страницы с помощью pgprot_noncached () - PullRequest
0 голосов
/ 22 ноября 2018

Я использую 2 платы ARM для удаленной записи и чтения DMA.С включенным SMMU я столкнулся с проблемой при получении физического адреса, который требуется для сопоставления физического адреса с адресом ядра в пространстве пользователя.

В настоящее время я экспериментирую с отключенным SMMU.Вот поток:

ker_addr = (u64) dma_alloc_coherent (... dma_addr_t bus_addr);// ли ​​приведение вызывает какие-либо проблемы?

phys_addr = bus_addr;

mmap (... phys_addr);

vma-> vm_page_prot = pgprot_noncached (vma> vm_page_prot);

remap_pfn_range (vma, vma-> vm_start, vma-> vm_pgoff, vma-> vm_end - vma-> vm_start, vma-> vm_page_prot));

Но это привело к ошибке нетранслируемой страницы,Когда прокомментировал pgprot_noncached в пользовательском драйвере, я не нашел ошибки.Пожалуйста, помогите мне узнать причину.

Кроме того, рекомендуется ли заменить remap_pfn_range () на dma_mmap_coherent ()?Насколько я знаю, remap_pfn_range () имеет дело с физическим адресом, где dma_mmap_coherent () имеет дело с адресом шины, заданным dma_alloc_coherent ().Пожалуйста, дайте мне знать, если это не так.

Заранее спасибо !!

...