linux - 总线主控需要哪些内核标志和 PCIe 设置
问题描述
我无法让总线主控 DMA 在带有内核的 Ubuntu 设备驱动程序上工作5.3.0-68-generic
。
- 我已经启用了总线主控
pci_set_master
(当使用 时lspci -v
,PCIe 设备将具有 bus_master 标志)并且我正在分配一个 DMA 缓冲区dma_alloc_coherent
。 - 我将
dma_addr_t
dma alloc 返回的值传递给设备,然后使用内核虚拟地址和 chrdev mmap 驱动程序将地址映射到用户空间(使用remap_pfn_range
),用户空间驱动程序可以在其中填充 DMA 内存区域。
PCIe 设备似乎看不到 DMA 区域中的内存更新,我是否需要启用一些 dma、iommu 或 pci 设置以允许 PCIe 设备作为总线主设备读回系统内存?
解决方案
推荐阅读
- java - JSON条件输出
- svn - SVN在文件内容中搜索?
- nativescript - 如何在nativescript中上传图片
- css - How to identify the navbar colour in CSS
- python - python - 如何从python列表中的索引中打印某个元素之前的2个元素?
- jersey - 如何在 grizzly 服务器控制台上获取 HTTP 请求日志?
- java - Apache poi:只要在段落中插入运行,XWPFFieldRun 就会在段落前面移动
- angular - 数据源更新时保持展开的 mat-table 不会折叠行(Angular Material)
- php - 如何在 AND 条件内创建 Opencart mysql 查询
- visual-c++ - CMake Warning (dev) in CMakeLists.txt: No cmake_minimum_required command is present. A line of code such as cmake_minimum_required(VERSION 3.9)