我目前正在为 Ubuntu 开发 PCI 设备驱动程序。我有一些关于 PCI 驱动程序的示例代码,但我很难理解 ioremap 和 file_operation.mmap。
文件操作mmap说明:
内存映射是现代 Unix 系统最有趣的特性之一。就驱动程序而言,可以实现内存映射,为用户程序提供对设备内存的直接访问。映射设备意味着将一系列用户空间地址关联到设备内存。每当程序在分配的地址范围内读取或写入时,它实际上是在访问设备。
ioremap 的描述:
在许多系统上,根本无法通过这种方式直接访问 I/O 内存。所以必须先建立映射。这就是ioremap函数的作用。该函数是专门为I/O内存区域分配虚拟地址而设计的。
以上描述均来自“makelinux”。但我仍然不确定我是否正确理解了这两个函数之间的区别。现在,我的理解是这样的fops.mmap
:(文件操作 mmap)将一系列用户空间地址与设备内存相关联。这意味着对于 pci 设备,我们BAR
使用fops.mmap
. 使用ioremap
,我们为这些从fops.mmap
.
如果我错了,有人能告诉我吗?谢谢~
附注。我也在 Ubuntu 社区发布了这个,希望我没有违反任何规则。