19-总结
11.7 总结
外设可处于CPU的内存空间和I/O空间,除X86外,嵌入式处理器一般只存在内存空间。在Linux系统中,为I/O内存和I/O端口的访问提高了一套统一的方法,访问流程一般为“申请资源→映射→访问→去映射→释放资源”。
对于有MMU的处理器而言,Linux系统的内部布局比较复杂,可直接映射的物理内存称为常规内存,超出部分为高端内存。kmalloc()和_ _get_free_pages()申请的内存在物理上连续,而vmalloc()申请的内存在物理上不连续。
DMA操作可能导致Cache的不一致问题,因此,对于DMA缓冲,应该使用dma_alloc_coherent()等方法申请。在DMA操作中涉及总线地址、物理地址和虚拟地址等概念,区分这3类地址非常重要。Linux内核中对DMA通道的申请和释放采用了和中断类似的方法。