![]() |
1
1
方法3或4应该可以正常工作。就潜伏期而言,它们之间没有区别。延迟大约为100纳秒。 如果需要初始化设备,或者控制允许哪些应用程序访问它,或者一次强制一个读卡器等,则需要方法4。方法3看起来确实有点麻烦,因为它跳过了所有这些。但如果你不需要这样的东西就简单多了。 字符设备的延迟肯定更高,因为每次读取设备时都需要内核转换。 dma方法的延迟完全取决于设备将时间写入内存的频率。CPU访问内存的延迟比MMIO要低,但是如果设备每毫秒只进行一次DMA,那么这就是您的延迟。而且,这种方法会产生大量无用的dma通信量,因为cpu读取该值的频率远远低于写入该值的频率。 |
![]() |
2
1
正在添加@prl的答案… 方法3在我看来完全合法。这就是它的用途。您可能需要查看内核文档文件: https://www.kernel.org/doc/Documentation/filesystems/sysfs-pci.txt
您也可以使用
假设您的设备已经配置并启用。通常,当系统启动时,PCI设备不能执行任何操作。某些驱动程序需要声明该设备,并对其进行初始化/配置。完成后,如果只通过读取一两个寄存器就可以访问时间,则可以使用方法3。(我不确定:它 可以 PCI设备可以自行初始化,但我从未见过。我想可能至少需要一些东西来激活它的内存空间。如果设置足够小/足够简单,则可能从用户空间完成此操作。)
与方法4的主要区别在于,控制设备的驱动程序将提供支持,允许该区域
在用户空间中,您将执行
Linux驱动程序编程并不是很困难,但是如果你以前没有做过,那会有一个很明显的学习曲线,所以我绝对不会使用方法4,除非确实需要这样做。 |
|
Cong Li · cdev及其相关文件操作如何工作? 9 年前 |