学习关于 PCI-e:驱动程序与 DMA

主要观点:实现一个简单的 PCI-e 设备,包括手动操作内存映射、创建字符设备让用户空间与设备交互、使用 DMA 减少 CPU 负担、实现阻塞写以及将设备与 QEMU 控制台输出挂钩显示内容等。
关键信息

  • 通过lspci获取 BAR0 地址,可通过编程向 PCI 子系统请求设备内存映射细节。
  • 定义struct pci_driver,包含支持的设备表和probe函数,probe函数中启用设备、获取内存区域映射等。
  • 创建字符设备,实现openreadwrite函数,通过container_of获取GpuState指针。
  • 使用 DMA 进行数据传输,定义寄存器和命令,实现execute_dma函数。
  • 配置 MSI-X 实现异步操作的同步阻塞,使用wait_queue和中断处理程序。
  • 将设备缓冲区与 QEMU 控制台输出挂钩显示测试图案。
    重要细节
  • static struct pci_device_id gpu_id_tbl[]定义支持的设备 ID 表。
  • setup_chardev函数用于创建字符设备并添加到文件系统。
  • write_reg函数用于向寄存器写入值。
  • 在 QEMU 中进行相关配置实现设备与控制台的连接等。
阅读 13
0 条评论