Si solo tengo la dirección física del búfer del dispositivo (PCIe), ¿cómo puedo asignar este búfer al espacio de usuario?

Si yotener solo la dirección física del búfer de memoria al que se asigna el búfer del dispositivo a través de la BARRA PCI-Express (Registro de dirección base), ¿cómo puedo asignar este búfer?al espacio de usuario?

Por ejemplo, ¿cómo suele ser el código en Linux-kernel?

unsigned long long phys_addr = ...; // get device phys addr
unsigned long long size_buff = ...l // get device size buff

// ... mmap(), remap_pfn_range(), Or what should I do now?

En:Linux x86_64

Desde:https://stackoverflow.com/a/17278263/1558037

ioremap() asigna una dirección física a una dirección virtual del núcleo.remap_pfn_range() asigna direcciones físicas directamente al espacio del usuario.

Desde:https://stackoverflow.com/a/9075865/1558037

int remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr, 
    unsigned long pfn, unsigned long size, pgprot_t prot);

remap_pfn_range - reasignar la memoria del kernel al espacio de usuario

Puede ser puedo usarlo así?

unsigned long long phys_addr = ...; // get device phys addr
unsigned long long size_buff = ...l // get device size buff

remap_pfn_range(vma, vma->vm_start, (phys_addr >> PAGE_SHIFT), 
    size_buff, vma->vm_page_prot);

Pregunta: Pero, ¿dónde puedo conseguirwma, y lo que debo hacer conwma antes de llamar aremap_pfn_range()?

Respuestas a la pregunta(2)

Su respuesta a la pregunta